문서 · 레퍼런스
MCP 서버
AI 도구가 이 플랫폼을 직접 다루게 해요. 도구 494개를 MCP 서버(mcp.ts)에서 읽어 이 페이지를 만들어요. 이 목록은 서버 코드에서 만들어져요. 새 기능이 생기면 여기에도 바로 나타나요.
연결하기
MCP 주소
https://end.blackall.ai/mcp?lang=ko한 주소로 JSON-RPC를 POST로 주고받아요. ?lang=ko, ?lang=en, ?lang=ja로 도구 설명과 오류의 언어를 골라요. 아무것도 없으면 Accept-Language를 따르고, 그것도 없으면 영어예요.
주소 옵션
주소 뒤에 붙여 이 연결이 보고 할 수 있는 것을 줄여요. 목록에서 빠진 도구는 이름으로 불러도 거절돼요. 도구가 적을수록 AI가 덜 헤매요. 지금 켜진 옵션은 whoami로 봐요.
| 옵션 | 설명 |
|---|---|
project_ref | 프로젝트 하나로 묶어요. ref를 비우면 이 프로젝트로 하고, 다른 ref는 거절해요. list_projects도 이 프로젝트만 보여 주고, 조직 전체를 다루는 도구(새 프로젝트, 팀, 알림 채널, 감사 로그, 결제)는 빠져요. |
read_only | true면 읽기 도구만 보이고, 연결 전체가 읽기 토큰처럼 동작해요. |
features | 쉼표로 고른 도구 그룹만 보여요. whoami와 list_projects는 늘 있어요. 모르는 그룹을 넣으면 쓸 수 있는 그룹을 알려 줘요. |
lang | ko, en, ja. 도구 설명, 안내, 오류의 언어예요. |
https://end.blackall.ai/mcp?lang=ko&project_ref=<ref>&read_only=true&features=database,deploy
Claude나 ChatGPT 커넥터에는 옵션을 붙인 주소를 그대로 넣어요. 동의 화면에서도 프로젝트 하나를 고르고 쓰기를 끌 수 있고, 그 선택은 연결에 저장돼요.
도구 그룹
| 그룹 | 도구 수 | 이름 |
|---|---|---|
account | 106 | whoami list_projects list_regions list_server_sizes request_region create_project rename_project list_transfer_targets transfer_project pause_project resume_project delete_project retry_provisioning get_project_archive restore_project_archive create_archive_download_url get_project_keys list_api_keys create_api_key revoke_api_key list_team invite_member cancel_invitation set_member_role remove_member set_mfa_required list_channels create_channel test_channel set_channel_enabled remove_channel get_audit_log import_sources start_import get_import list_shared_env_vars create_shared_env_var update_shared_env_var remove_shared_env_var list_access_groups create_access_group update_access_group remove_access_group get_member_access set_member_access list_audit_drains create_audit_drain set_audit_drain_enabled test_audit_drain remove_audit_drain list_org_webhooks create_org_webhook set_org_webhook_enabled test_org_webhook list_org_webhook_deliveries retry_org_webhook_delivery remove_org_webhook get_committer_settings set_committer_policy trust_committer remove_trusted_committer answer_preview_approval get_org_sso set_org_sso remove_org_sso add_org_sso_domain verify_org_sso_domain remove_org_sso_domain get_org_policies set_org_policies set_preview_suffix verify_preview_suffix remove_preview_suffix list_platform_settings set_platform_setting clear_platform_setting list_platform_servers get_platform_cpu_history request_platform_server_change get_platform_server_request cancel_platform_server_request list_github_variables set_github_variable delete_github_variable list_platform_operators add_platform_operator remove_platform_operator list_platform_runs cancel_platform_run rerun_platform_run list_platform_checks set_merge_when_green get_ci_machines restart_ci_machine renew_ci_registration set_up_build_cache_bucket get_platform_overview find_customer list_parking_hosts list_project_placements get_platform_server_pricing set_platform_server_pricing set_platform_server_size start_support_session end_support_session list_support_sessions |
database | 59 | list_tables list_policies query_sql run_sql read_rows export_table_csv import_table_csv get_database_connection reset_database_password list_backups create_backup restore_backup list_db_webhooks create_db_webhook set_db_webhook_enabled list_db_webhook_deliveries remove_db_webhook list_schemas set_exposed_schemas get_data_api_settings set_data_api_settings get_database_settings set_database_settings list_extensions enable_extension disable_extension list_vault_secrets create_vault_secret copy_vault_secrets_from_project set_vault_project_keys update_vault_secret delete_vault_secret get_network_restrictions update_network_restrictions list_migrations apply_migrations remove_migration_record dump_schema generate_typescript_types get_database_move move_to_dedicated_database get_dedicated_disk request_dedicated_disk shrink_dedicated_disk get_server request_server resize_server set_standby move_server release_server set_restore_days list_mysql_databases create_mysql_database bind_mysql_database delete_mysql_database get_mysql_connection create_mysql_backup list_mysql_backups restore_mysql_backup |
auth | 57 | list_users add_user import_users update_user generate_link remove_user list_auth_providers set_auth_provider set_auth_provider_enabled remove_auth_provider get_smtp_settings set_smtp_settings test_smtp_settings remove_smtp_settings get_email_templates set_email_template preview_email_template remove_email_template get_sms_settings set_sms_settings remove_sms_settings list_sso_providers add_sso_provider update_sso_provider remove_sso_provider get_auth_config update_auth_config list_custom_providers create_custom_provider update_custom_provider set_custom_provider_enabled remove_custom_provider list_third_party_auth add_third_party_auth remove_third_party_auth list_redirect_urls add_redirect_url remove_redirect_url set_anonymous_sign_in copy_auth_from_import copy_auth_from_project copy_users_from_project copy_schema_from_project copy_data_from_project get_jwt_signing set_jwt_signing rotate_signing_key retire_signing_key get_passkey_settings set_passkey_settings list_user_factors remove_user_factors remove_user_passkey list_oauth_apps create_oauth_app reset_oauth_app_secret remove_oauth_app |
storage | 41 | list_s3_keys create_s3_key revoke_s3_key list_buckets create_bucket update_bucket empty_bucket delete_bucket list_objects upload_object download_object delete_object create_upload_url create_signed_url copy_storage_from_import copy_storage_from_project list_kv_keys get_kv set_kv delete_kv get_edge_config set_edge_config get_edge_config_history list_edge_config_tokens create_edge_config_token connect_edge_config_token disconnect_edge_config_token revoke_edge_config_token get_storage_settings set_storage_settings set_s3_enabled set_bucket_versioning list_object_versions restore_object_version remove_object_version list_bucket_connections connect_bucket disconnect_bucket list_storage_policies create_storage_policy remove_storage_policy |
functions | 25 | list_functions get_function deploy_function set_function_public set_function_limits remove_function list_function_secrets set_function_secrets copy_function_secrets copy_functions_from_project get_project_forward set_project_forward get_project_write_lock set_project_write_lock compare_projects_data delete_function_secret set_function_egress list_jobs save_job copy_jobs_from_project set_job_enabled run_job list_job_runs remove_job set_job_retention |
deploy | 106 | list_deployments get_deployment redeploy promote_deployment rollback_deployment deploy_commit deploy_files deploy_source create_source_upload_url list_deploy_hooks create_deploy_hook remove_deploy_hook list_apps update_app delete_app get_preview_protection set_preview_protection get_branch_previews set_branch_previews list_env_vars set_env_vars remove_env_var list_git_access set_repo_token remove_repo_token add_repository list_importable_repositories import_repository disconnect_repository set_checks_on_server link_github_app unlink_github_app get_server_memory set_server_memory get_concurrent_builds set_concurrent_builds get_rolling_releases set_rolling_releases advance_rolling_release promote_rolling_release abort_rolling_release get_middleware set_middleware list_flags evaluate_flag set_flag_enabled get_remote_cache clear_remote_cache list_volumes create_volume resize_volume delete_volume create_volume_backup restore_volume_backup get_deployment_retention set_deployment_retention list_deleted_deployments delete_deployment restore_deployment set_protection_scope create_bypass_secret revoke_bypass_secret create_share_link revoke_share_link list_environments create_environment update_environment remove_environment set_domain_environment get_flag create_flag update_flag set_flag_environment add_flag_rule move_flag_rule remove_flag_rule set_flag_archived list_flag_segments create_flag_segment update_flag_segment remove_flag_segment list_flag_sdk_keys create_flag_sdk_key revoke_flag_sdk_key list_project_webhooks create_project_webhook set_project_webhook_enabled test_project_webhook list_project_webhook_deliveries retry_project_webhook_delivery remove_project_webhook list_remote_cache_tokens create_remote_cache_token revoke_remote_cache_token get_build_settings set_build_dev_settings set_ignored_build_step set_production_first set_git_checks set_expose_system_env set_directory_listing get_deployment_security set_deployment_security get_routing_rules save_routing_rules activate_routing_rules |
domains | 28 | list_domains add_domain remove_domain set_domain_redirect move_domain get_edge set_edge purge_edge_cache get_network set_static_outbound_ip upload_certificate remove_certificate get_firewall save_firewall_rule move_firewall_rule set_firewall_rule_enabled remove_firewall_rule set_firewall_managed publish_firewall reset_firewall_draft restore_firewall_version set_attack_mode get_bulk_redirects upload_bulk_redirects activate_bulk_redirects get_skew_protection set_skew_protection purge_edge_cache_item |
branching | 6 | list_branches create_branch merge_branch reset_branch delete_branch set_branching |
logs | 21 | get_logs get_advisors list_log_drains create_log_drain set_log_drain_enabled remove_log_drain get_metrics get_analytics get_speed_insights set_insights get_analytics_breakdown set_analytics_previews export_analytics list_analytics_reports get_analytics_report save_analytics_report remove_analytics_report list_alert_rules create_alert_rule set_alert_rule_enabled remove_alert_rule |
billing | 6 | usage get_billing get_plan get_spend_controls set_spend_cap set_spend_limit |
ai | 15 | get_ai_gateway set_ai_gateway add_ai_provider set_ai_provider_enabled remove_ai_provider get_ai_gateway_logs set_ai_budgets list_ai_gateway_keys create_ai_gateway_key set_ai_gateway_key_budgets set_ai_gateway_key_limits set_ai_model_aliases set_ai_gateway_hooks revoke_ai_gateway_key get_ai_spend |
realtime | 7 | list_realtime_tables set_realtime get_realtime_settings set_realtime_settings list_realtime_policies create_realtime_messages_table add_realtime_policy |
queues | 8 | list_queues create_queue delete_queue purge_queue send_queue_message peek_queue set_queues_api get_queue_metrics |
gpu | 9 | list_gpu create_gpu_job get_gpu_job cancel_gpu_job create_gpu_server stop_gpu_server delete_gpu_server create_gpu_volume delete_gpu_volume |
Claude와 ChatGPT
claude.ai, Claude Desktop, ChatGPT에서는 커스텀 커넥터에 MCP 주소를 넣어요. 로그인하고 허용하면 바로 연결돼요(토큰 필요 없음). 동의 화면에서 쓰기 권한을 빼면 읽기 전용이 돼요.
Claude Code
아래 명령으로 추가하면 처음 쓸 때 브라우저가 열려 로그인해요.
claude mcp add --transport http oneend "https://end.blackall.ai/mcp?lang=ko"
토큰으로 연결하기
브라우저를 열 수 없는 곳(CI, 서버)에서는 계정 → API · MCP 토큰에서 만든 bwk_… 토큰을 헤더로 넣어요. 다른 MCP 클라이언트도 같은 모양의 설정을 받아요.
claude mcp add --transport http oneend "https://end.blackall.ai/mcp?lang=ko" \
--header "Authorization: Bearer bwk_…"
{
"mcpServers": {
"oneend": {
"type": "http",
"url": "https://end.blackall.ai/mcp?lang=ko",
"headers": {
"Authorization": "Bearer bwk_…"
}
}
}
}
OAuth (ADR 0016)
콘솔이 권한 서버예요. 토큰 없이 initialize나 tools/call을 보내면 401과 WWW-Authenticate 헤더가 돌아오고, 클라이언트는 이를 따라 아래 주소를 찾아요. 동적 클라이언트 등록(RFC 7591)과 클라이언트 메타데이터 문서를 모두 받고, 모든 인가에 PKCE S256이 필요해요. 액세스 토큰은 1시간 유효하고, 리프레시 토큰은 한 번만 쓸 수 있어요.
| 주소 | 쓰임 |
|---|---|
https://end.blackall.ai/.well-known/oauth-protected-resource | 보호된 리소스 메타데이터 |
https://end.blackall.ai/.well-known/oauth-authorization-server | 권한 서버 메타데이터 |
https://end.blackall.ai/oauth/register | 클라이언트 등록 (RFC 7591) |
https://end.blackall.ai/oauth/authorize | 로그인과 동의 화면 |
https://end.blackall.ai/oauth/token | 코드와 리프레시 토큰을 액세스 토큰으로 교환 |
https://end.blackall.ai/oauth/revoke | 토큰 폐기 |
프로토콜
MCP 2025-06-18, 상태 없는 HTTP예요. 요청 하나에 응답 하나이고 스트림은 없어요(GET은 405). tools/list, resources/*, prompts/*는 토큰 없이 읽을 수 있고, initialize와 tools/call은 토큰이 필요해요. 도구의 실패는 프로토콜 오류가 아니라 isError: true인 결과로 돌아와요.
지원하는 메서드
tools/callinitializepingtools/listresources/listresources/readprompts/listprompts/get
curl -X POST "https://end.blackall.ai/mcp?lang=ko" \
-H "content-type: application/json" \
-H "Authorization: Bearer bwk_…" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_projects","arguments":{}}}'
문서와 절차
서버는 이 사이트의 문서를 MCP 리소스로, 단계별 안내를 프롬프트로 함께 줘요.
| 리소스 | 이름 | 설명 |
|---|---|---|
blackwall://start | 처음부터 끝까지 | 도구를 쓰는 순서. 무엇부터 부를지 모를 때 이것부터 읽으세요. |
blackwall://switch | Supabase·Vercel에서 옮기기 | Supabase나 Vercel로 만든 앱을 옮기는 순서: 데이터베이스, supabase-js, 로그인, 함수, 배포. 그대로 도는 것과 확인할 것. |
blackwall://access-rules | 접근 규칙 | 새 표가 왜 비어 보이는지. 이 플랫폼에서 가장 자주 틀리는 곳이라 먼저 읽으세요. |
blackwall://keys | 키 세 종류 | 공개 키·비밀 키·접근 토큰의 쓰임과, 어느 것을 브라우저에 두면 안 되는지. |
blackwall://data-api | 데이터 읽고 쓰기 | 질의 문법, 연산자, 한글 부분 검색. |
blackwall://extensions | DB 확장 | pgvector(임베딩 검색)와 PostGIS(지도) 같은 확장을 켜고 끄는 법, 켤 수 있는 목록, 공유 데이터베이스에서의 동작. |
blackwall://branches | DB 브랜치 | git 브랜치마다 미리보기 데이터베이스: 만들기, 미리보기 배포에 연결, 병합, 초기화, 삭제, 요금. |
blackwall://database-features | 대기열 · Vault · GraphQL · 접속 제한 | pgmq와 같은 대기열, 데이터베이스 안의 암호화된 비밀(Vault), /graphql/v1, 직접 연결의 주소 제한과 TLS. |
blackwall://auth | 로그인 붙이기 | 이메일·비밀번호와 소셜 로그인. 토큰이 어디로 돌아오는지. |
blackwall://realtime | 실시간 구독 | 표마다 켜야 한다는 것과, 접근 규칙이 실시간에도 걸린다는 것. |
blackwall://storage | 파일 | 버킷과 업로드, 공개와 비공개의 차이, S3로 쓰기, Supabase에서 파일 옮기기, 이어 올리기(TUS). |
blackwall://env | 환경 변수 | 배포한 앱에 API 키 같은 값을 넣는 법, 언제 반영되는지, 쓸 수 없는 이름. |
blackwall://logs | 로그 | 앱이 오류를 낼 때 무엇이 일어났는지 보는 법. 출처별로 무엇이 남는지. |
blackwall://deploy | 배포 | 저장소 연결, 프로덕션 브랜치, 모노레포의 빌드 폴더. |
blackwall://functions | 함수, 예약 작업, 데이터베이스 웹훅 | 함수 코드의 모양, 할 수 있는 것과 없는 것(외부 요청은 켜야 가능), 호출하는 법, cron 일정(UTC), 표 변경을 외부로 알리는 웹훅. |
blackwall://domains | 도메인과 엣지 | 도메인 연결·확인·리디렉트, API용 도메인, 방화벽과 요청 한도, 엣지 캐시. |
blackwall://edge | 엣지: 분석, 엣지 설정, KV, AI 게이트웨이, 점진적 배포, 미들웨어 | 사이트 앞에서 도는 것: 개인정보 없는 웹 분석과 속도 측정, 배포 없이 바꾸는 값과 기능 플래그, 키-값 저장소, OpenAI 호환 AI 게이트웨이, 새 배포를 일부 방문자에게 먼저 보내기, middleware.ts. |
blackwall://previews | 프리뷰 보호 | 프리뷰 주소를 누가 열 수 있는지, 자동화에서 통과하는 법. |
blackwall://limits | 한도와 요금 | 무료는 한 사람의 GitHub 사이트 하나만, 넘으면 거부. 유료는 쓴 만큼 계산. |
blackwall://organisation | 조직: 팀, 알림, 요금, 감사 기록 | 구성원 초대와 역할, 알림 채널, 청구서, 감사 기록, 그리고 같은 일을 HTTP(/api/v1)로 하는 경로. |
blackwall://migrations | 마이그레이션과 타입 | 스키마 변경을 버전 붙은 SQL로 적용하고 기록하기, 스키마를 SQL로 내려받기, supabase-js용 TypeScript 타입 만들기. |
blackwall://cli | 명령줄 도구 (oneend) | 터미널과 CI에서 쓰는 oneend 명령: 로그인, 프로젝트 연결, 환경 변수, 배포, 함수, 마이그레이션, 타입. |
| 프롬프트 | 이름 | 설명 |
|---|---|---|
new-table | 표 만들고 실제로 보이게 하기 | 표를 만들고 접근 규칙까지 세워, 공개 키로 읽히는 것을 확인해요. |
add-login | 로그인 붙이기 | 이메일 로그인을 붙이고, 사용자별로 자기 데이터만 보이게 해요. |
add-social-login | 소셜 로그인 붙이기 | 구글·카카오 같은 계정으로 로그인하게 해요. 콜백 주소와 돌아갈 주소를 함께 맞춰요. |
add-uploads | 파일 올리기 붙이기 | 버킷을 만들고 업로드·다운로드를 붙여요. |
cli | 명령줄 도구로 스키마와 배포 다루기 | oneend CLI로 로그인하고 폴더를 프로젝트에 연결한 뒤, 마이그레이션과 타입과 배포를 다뤄요. |
check-costs | 이번 달 얼마 나오는지 보기 | 사용량을 읽고, 무료 한도에 가까운 것이 있는지 확인해요. |
도구
주석은 클라이언트가 실행 전에 물을지 정할 때 써요. 읽기 전용이 아닌 도구는 추가만 하는 몇 개를 빼고 모두 파괴적(destructive)으로 표시해요. 콘솔 AI 도우미도 같은 기준으로 확인을 받아요.
계정과 리전
| 이름 | 설명 |
|---|---|
whoami | 내 계정 |
list_regions | 리전 목록 |
list_server_sizes | 서버 크기와 가격 |
request_region | 리전 요청 |
import_sources | 가져올 곳 |
start_import | 가져오기 시작 |
get_import | 가져오기 진행 상황 |
whoami 내 계정
읽기 전용
이 토큰이 누구의 것이고 어떤 권한을 가졌는지 알려줘요. operator는 운영자 도구를 쓸 수 있는지(active)와, 못 쓰면 이 계정의 이유(refused: not_listed, token_bound, no_second_factor)예요. 무엇부터 할지 모를 때 먼저 부르세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /me |
입력
입력이 없어요.
JSON 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}list_regions 리전 목록
읽기 전용
리전 목록이에요. can_create가 true인 곳만 지금 만들 수 있어요. 리전은 나중에 못 바꾸니 create_project 전에 확인하세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /regions |
입력
입력이 없어요.
JSON 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}list_server_sizes 서버 크기와 가격
읽기 전용
서버 크기(메모리)마다 구글 서버, CPU, 지역별 월 금액(monthly_minor)이에요. 통화를 비우면 조직의 결제 통화예요. KRW는 원(부가세 포함), USD는 센트(결제할 때 세금 추가)예요. included_in이 pro인 크기는 Pro 요금제에 포함돼요. region_status가 planned인 지역은 준비 중이라 고를 수 없어요. listed가 false면 아직 팔지 않는 것이라 sizes가 비어 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /server-sizes |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
region | string | 아니요 | 한 지역만 볼 때 그 코드(list_regions의 code). 비우면 모든 지역. |
currency | string, KRW | USD | 아니요 | KRW 또는 USD. 비우면 조직의 결제 통화. |
JSON 스키마
{
"type": "object",
"properties": {
"region": {
"type": "string",
"description": "한 지역만 볼 때 그 코드(list_regions의 code). 비우면 모든 지역."
},
"currency": {
"type": "string",
"enum": [
"KRW",
"USD"
],
"description": "KRW 또는 USD. 비우면 조직의 결제 통화."
}
},
"additionalProperties": false
}request_region 리전 요청
추가만 함
아직 열리지 않은 리전(can_create가 false인 곳)이 필요하다고 남겨요. 담당자가 직접 연락해요. 날짜를 약속하지는 않아요. 이미 열린 리전은 요청하지 말고 create_project로 바로 만드세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /regions/requests |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
region | string | 예 | list_regions가 can_create=false로 알려준 코드. |
note | string | 아니요 | 거기에 무엇을 두려는지, 왜 그 리전이어야 하는지. 선택 사항이지만 담당자가 연락할 때 이것부터 읽어요. |
JSON 스키마
{
"type": "object",
"properties": {
"region": {
"type": "string",
"description": "list_regions가 can_create=false로 알려준 코드."
},
"note": {
"type": "string",
"description": "거기에 무엇을 두려는지, 왜 그 리전이어야 하는지. 선택 사항이지만 담당자가 연락할 때 이것부터 읽어요."
}
},
"required": [
"region"
],
"additionalProperties": false
}import_sources 가져올 곳
읽기 전용 외부로 나감
이 조직에 연결한 원본 계정(Supabase, Vercel, PostgreSQL)마다 프로젝트 목록과 지금까지의 가져오기를 봐요. 계정 연결은 토큰이 대화에 남지 않게 콘솔(connect_url)에서 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /imports/sources |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
org | string | 아니요 | 조직의 id나 이름. 비우면 이 토큰이 닿는 첫 조직. |
JSON 스키마
{
"type": "object",
"properties": {
"org": {
"type": "string",
"description": "조직의 id나 이름. 비우면 이 토큰이 닿는 첫 조직."
}
},
"additionalProperties": false
}start_import 가져오기 시작
추가만 함 외부로 나감
콘솔에서 만든 가져오기(import)나 import_sources의 connection·project로 가져오기를 시작해요(묶음마다 새 프로젝트, 원본은 그대로). Supabase는 address에 세션 풀러 연결 문자열이 필요해요(쓰고 지워요). 다시 시작하면 바뀐 것만 옮겨요. 소유자·관리자·개발자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /imports |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
org | string | 아니요 | 조직의 id나 이름. 비우면 이 토큰이 닿는 첫 조직. |
import | string | 아니요 | 가져오기 id(import_sources의 imports, 콘솔 주소의 id). |
connection | string | 아니요 | 원본 계정(import_sources의 connection). import가 없을 때 project와 함께. |
project | string | 아니요 | 원본 프로젝트(import_sources의 projects[].id). |
address | string | 아니요 | Supabase 원본의 세션 풀러 연결 문자열(postgres.<ref>, 포트 5432). 다른 원본은 비워요. |
JSON 스키마
{
"type": "object",
"properties": {
"org": {
"type": "string",
"description": "조직의 id나 이름. 비우면 이 토큰이 닿는 첫 조직."
},
"import": {
"type": "string",
"description": "가져오기 id(import_sources의 imports, 콘솔 주소의 id)."
},
"connection": {
"type": "string",
"description": "원본 계정(import_sources의 connection). import가 없을 때 project와 함께."
},
"project": {
"type": "string",
"description": "원본 프로젝트(import_sources의 projects[].id)."
},
"address": {
"type": "string",
"description": "Supabase 원본의 세션 풀러 연결 문자열(postgres.<ref>, 포트 5432). 다른 원본은 비워요."
}
},
"additionalProperties": false
}get_import 가져오기 진행 상황
읽기 전용 외부로 나감
콘솔의 가져오기 진행 화면과 같아요. 옮길 곳마다 단계(스키마, 로그인 사용자, 데이터, 파일, 예약 작업…)의 상태와 수, 옮기지 않는 것과 이유, 확인할 것을 보여줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /imports/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
id | string | 예 | 가져오기 id. |
org | string | 아니요 | 조직의 id나 이름. 비우면 이 토큰이 닿는 첫 조직. |
JSON 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "가져오기 id."
},
"org": {
"type": "string",
"description": "조직의 id나 이름. 비우면 이 토큰이 닿는 첫 조직."
}
},
"required": [
"id"
],
"additionalProperties": false
}프로젝트
| 이름 | 설명 |
|---|---|
list_projects | 프로젝트 목록 |
create_project | 프로젝트 만들기 |
pause_project | 프로젝트 일시정지 |
resume_project | 프로젝트 다시 시작 |
delete_project | 프로젝트 삭제 |
retry_provisioning | 준비 실패한 프로젝트 다시 시도 |
rename_project | 이름 바꾸기 |
get_project_archive | 데이터베이스 보관 상태 |
restore_project_archive | 보관한 데이터베이스 복원 |
create_archive_download_url | 보관 파일 내려받기 주소 |
list_projects 프로젝트 목록
읽기 전용
이 계정의 프로젝트와 각각의 API 주소를 돌려줘요. status는 ready(쓸 수 있음), provisioning(데이터베이스를 만드는 중, 몇 초), failed(retry_provisioning), paused예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects, GET /projects/{ref} |
입력
입력이 없어요.
JSON 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}create_project 프로젝트 만들기
추가만 함
데이터베이스·인증·파일 저장소가 딸린 프로젝트를 만들어요. 리전은 비우면 기본 리전이고 나중에 못 바꿔요. 조직이 여럿이면 org로 골라요(요금제의 프로젝트 수 안에서). status가 provisioning이면 wait(초)를 주거나 ready가 된 뒤 표·키를 쓰세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
name | string | 예 | 사람이 읽는 이름. |
region | string | 아니요 | 어디에 둘지. list_regions가 쓸 수 있는 값을 알려줘요. 비우면 기본 리전. |
org | string | 아니요 | 만들 조직의 id나 이름(list_projects의 organisation_id·organisation). 비우면 프로젝트를 만들 수 있는 첫 조직. |
tier | string | 아니요 | 이 프로젝트만의 서버 크기. list_server_sizes가 알려준 값(예: 4gb)이나 default(요금제의 기본 크기)를 주면 만든 직후 서버를 요청해요. 비우면 공용 서버에서 시작해요. |
repo | string | 아니요 | 만들면서 바로 연결하고 배포할 GitHub 저장소(owner/name). list_importable_repositories의 repo. 비우면 저장소 없이 만들어요. 아래 branch·root_directory·app·installation·framework·build_command·output_directory·install_command·dotenv·sensitive는 import_repository와 같고 repo가 있을 때만 읽어요. |
branch | string | 아니요 | repo가 있을 때: 프로덕션 브랜치. 비우면 저장소의 기본 브랜치. |
root_directory | string | 아니요 | repo가 있을 때: 모노레포의 앱 폴더(예: apps/web). |
app | string | 아니요 | repo가 있을 때: 앱 이름. 비우면 폴더 이름, 없으면 저장소 이름. |
installation | integer | 아니요 | repo가 있을 때: 어느 GitHub 계정의 설치로 받을지. |
framework | string | 아니요 | repo가 있을 때: 프레임워크 프리셋. 비우거나 auto면 자동 감지. |
build_command | string | 아니요 | repo가 있을 때: 빌드 명령 덮어쓰기. |
output_directory | string | 아니요 | repo가 있을 때: 출력 디렉터리 덮어쓰기. |
install_command | string | 아니요 | repo가 있을 때: 설치 명령 덮어쓰기. |
dotenv | string | 아니요 | repo가 있을 때: .env 내용. 프로덕션과 프리뷰에 저장해요. |
sensitive | boolean | 아니요 | repo가 있을 때: dotenv의 값을 저장한 뒤 다시 보여주지 않아요. |
wait | integer, min 0, max 120 | 아니요 | 데이터베이스가 준비될(status: ready) 때까지 기다릴 초. 기본 0은 바로 답해요. 보통 몇 초면 돼요. |
JSON 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "사람이 읽는 이름."
},
"region": {
"type": "string",
"description": "어디에 둘지. list_regions가 쓸 수 있는 값을 알려줘요. 비우면 기본 리전."
},
"org": {
"type": "string",
"description": "만들 조직의 id나 이름(list_projects의 organisation_id·organisation). 비우면 프로젝트를 만들 수 있는 첫 조직."
},
"tier": {
"type": "string",
"description": "이 프로젝트만의 서버 크기. list_server_sizes가 알려준 값(예: 4gb)이나 default(요금제의 기본 크기)를 주면 만든 직후 서버를 요청해요. 비우면 공용 서버에서 시작해요."
},
"repo": {
"type": "string",
"description": "만들면서 바로 연결하고 배포할 GitHub 저장소(owner/name). list_importable_repositories의 repo. 비우면 저장소 없이 만들어요. 아래 branch·root_directory·app·installation·framework·build_command·output_directory·install_command·dotenv·sensitive는 import_repository와 같고 repo가 있을 때만 읽어요."
},
"branch": {
"type": "string",
"description": "repo가 있을 때: 프로덕션 브랜치. 비우면 저장소의 기본 브랜치."
},
"root_directory": {
"type": "string",
"description": "repo가 있을 때: 모노레포의 앱 폴더(예: apps/web)."
},
"app": {
"type": "string",
"description": "repo가 있을 때: 앱 이름. 비우면 폴더 이름, 없으면 저장소 이름."
},
"installation": {
"type": "integer",
"description": "repo가 있을 때: 어느 GitHub 계정의 설치로 받을지."
},
"framework": {
"type": "string",
"description": "repo가 있을 때: 프레임워크 프리셋. 비우거나 auto면 자동 감지."
},
"build_command": {
"type": [
"string",
"null"
],
"description": "repo가 있을 때: 빌드 명령 덮어쓰기."
},
"output_directory": {
"type": [
"string",
"null"
],
"description": "repo가 있을 때: 출력 디렉터리 덮어쓰기."
},
"install_command": {
"type": [
"string",
"null"
],
"description": "repo가 있을 때: 설치 명령 덮어쓰기."
},
"dotenv": {
"type": "string",
"description": "repo가 있을 때: .env 내용. 프로덕션과 프리뷰에 저장해요."
},
"sensitive": {
"type": "boolean",
"description": "repo가 있을 때: dotenv의 값을 저장한 뒤 다시 보여주지 않아요."
},
"wait": {
"type": "integer",
"minimum": 0,
"maximum": 120,
"description": "데이터베이스가 준비될(status: ready) 때까지 기다릴 초. 기본 0은 바로 답해요. 보통 몇 초면 돼요."
}
},
"required": [
"name"
],
"additionalProperties": false
}pause_project 프로젝트 일시정지
파괴적
프로젝트를 멈춰요: 사이트·API·함수는 503, 실시간·예약 작업·새 배포도 멈춰요. 데이터는 남고 resume_project로 바로 돌아와요. 90일 넘게 멈추면 데이터베이스를 보관 저장소로 옮겨요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/pause |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}resume_project 프로젝트 다시 시작
파괴적
일시정지한 프로젝트를 다시 시작해요. 무료 요금제에서 3일 동안 쓰지 않아 멈춘 프로젝트도 이걸로(또는 새 배포로) 다시 켜요. 예약 작업은 놓친 실행을 몰아서 하지 않고 다음 일정부터 돌아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/resume |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}delete_project 프로젝트 삭제
파괴적
프로젝트의 표·가입자·파일·함수·예약 작업·환경 변수·도메인을 영구히 지워요. 되돌릴 수 없어요. 사용자가 요청할 때만 쓰고 confirm에 프로젝트 이름을 넣으세요. 마지막 프로젝트는 못 지워요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
confirm | string | 예 | 프로젝트 이름. list_projects의 name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"confirm": {
"type": "string",
"description": "프로젝트 이름. list_projects의 name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"confirm"
],
"additionalProperties": false
}retry_provisioning 준비 실패한 프로젝트 다시 시도
추가만 함
데이터베이스를 만들지 못한 프로젝트를 다시 준비해요. 다른 도구가 "만들지 못했어요"로 거절할 때 쓰세요. 프로젝트를 새로 만들지 마세요. 요금만 두 배가 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/retry-provisioning |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}rename_project 이름 바꾸기
파괴적
프로젝트 이름이나 조직 이름, 또는 둘 다 바꿔요. ID(ref)와 주소는 바뀌지 않아요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 아니요 | 새 프로젝트 이름. |
organisation | string | 아니요 | 새 조직 이름. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "새 프로젝트 이름."
},
"organisation": {
"type": "string",
"description": "새 조직 이름."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_project_archive 데이터베이스 보관 상태
읽기 전용
데이터베이스를 못 쓰는 상태(결제 실패, 무료 요금제, 일시정지)가 90일 이어지면 보관 저장소로 옮겨요. 이 프로젝트의 state(none, scheduled, archiving, archived, restoring, purged), reason, archive_at, purge_at(옮긴 뒤 1년, 보관 파일과 파일을 지우는 때), restore_blocked_by를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/archive |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}restore_project_archive 보관한 데이터베이스 복원
파괴적
보관한 데이터베이스를 다시 만들어요(보통 몇 분). 결제가 안 끝났거나 무료 요금제면 거절해요(restore_blocked_by). 보관 파일이 지워졌으면 빈 데이터베이스를 만들어요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/archive/restore |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_archive_download_url 보관 파일 내려받기 주소
추가만 함
보관한 데이터베이스(pg_dump 형식, pg_restore로 복원)를 1시간 동안 내려받을 수 있는 서명 주소를 만들어요. 이유를 함께 적어야 하고, 개인정보 접속기록에 남아요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/archive/download |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
reason | string, min length 4, max length 300 | 예 | 내려받는 이유. 접속기록에 남아요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"reason": {
"type": "string",
"minLength": 4,
"maxLength": 300,
"description": "내려받는 이유. 접속기록에 남아요."
}
},
"required": [
"ref",
"reason"
],
"additionalProperties": false
}키와 서명
| 이름 | 설명 |
|---|---|
get_project_keys | API 키 가져오기 |
list_api_keys | 이름 붙은 API 키 목록 |
create_api_key | API 키 만들기 |
revoke_api_key | API 키 폐기 |
get_jwt_signing | 토큰 서명 방식 |
set_jwt_signing | 토큰 서명 방식 바꾸기 |
rotate_signing_key | 키 교체 |
retire_signing_key | 예전 키 폐기 |
get_project_keys API 키 가져오기
읽기 전용
프로젝트 주소와 두 키예요. 비밀 키는 접근 규칙을 무시하니 서버에서만 쓰세요(쓰기 권한 토큰 필요). 프론트엔드용이면 only: "publishable"로 부르세요: 주소와 공개 키만 오고 읽기 권한 토큰으로도 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | secrets.read 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/keys |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
only | string, publishable | 아니요 | publishable이면 주소와 공개 키만 돌려줘요. 비우면 두 키 모두. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"only": {
"type": "string",
"enum": [
"publishable"
],
"description": "publishable이면 주소와 공개 키만 돌려줘요. 비우면 두 키 모두."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_api_keys 이름 붙은 API 키 목록
읽기 전용
용도별로 만든 bw_publishable_·bw_secret_ 키의 이름, 종류, 앞부분, 마지막 사용 시각, 폐기 여부예요. 비밀 키의 값은 돌려주지 않아요. 공개 키는 값도 줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/api-keys |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_api_key API 키 만들기
추가만 함
이름 붙은 키를 하나 만들어요. publishable은 브라우저용(접근 규칙을 따름), secret은 서버용(접근 규칙을 무시)이에요. 비밀 키 값은 이 응답에만 있고 다시 볼 수 없어요. 소유자·관리자만 만들 수 있고, 프로젝트마다 20개까지예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/api-keys |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
kind | string, publishable | secret | 예 | |
name | string, min length 1, max length 60 | 예 | 어디에 쓰는 키인지. 예: 결제 서버 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"kind": {
"type": "string",
"enum": [
"publishable",
"secret"
]
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "어디에 쓰는 키인지. 예: 결제 서버"
}
},
"required": [
"ref",
"kind",
"name"
],
"additionalProperties": false
}revoke_api_key API 키 폐기
파괴적
이름 붙은 키 하나를 폐기해요. 30초 안에 그 키로 오는 요청이 거부돼요. 다른 키는 그대로예요. 되돌릴 수 없어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/api-keys/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_api_keys의 id |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_api_keys의 id"
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}get_jwt_signing 토큰 서명 방식
읽기 전용
로그인 토큰을 HS256과 ES256 중 무엇으로 서명하는지와, 지금 받아 주는 예전 키(유예 중인 키)를 보여줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/signing |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_jwt_signing 토큰 서명 방식 바꾸기
파괴적
ES256으로 바꾸면 새 로그인부터 비대칭 키로 서명하고, 다른 서버가 공개 키(JWKS)로 토큰을 확인할 수 있어요. 이미 받은 토큰은 만료될 때까지 그대로 통해요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | PUT /projects/{ref}/signing |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
alg | string, HS256 | ES256 | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"alg": {
"type": "string",
"enum": [
"HS256",
"ES256"
]
}
},
"required": [
"ref",
"alg"
],
"additionalProperties": false
}rotate_signing_key 키 교체
파괴적
공개 키·비밀 키를 서명하는 키를 새로 만들어요. 예전 키는 grace_hours(0, 1, 24, 168) 동안 더 받아요. 0(기본)이면 지금 앱이 30초 안에 모두 멈추니 confirm에 프로젝트 이름이 필요해요. 사용자가 요청할 때만, 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/signing/rotate |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
grace_hours | integer, 0 | 1 | 24 | 168 | 아니요 | |
confirm | string | 아니요 | grace_hours가 0(또는 비움)일 때만: 프로젝트 이름. list_projects의 name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"grace_hours": {
"type": "integer",
"enum": [
0,
1,
24,
168
]
},
"confirm": {
"type": "string",
"description": "grace_hours가 0(또는 비움)일 때만: 프로젝트 이름. list_projects의 name과 정확히 같아야 해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}retire_signing_key 예전 키 폐기
파괴적
유예 중인 예전 키를 지금 끝내요. kid는 get_jwt_signing의 keys에서 state가 rotating인 것이에요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/signing/keys/{kid} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
kid | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"kid": {
"type": "string"
}
},
"required": [
"ref",
"kid"
],
"additionalProperties": false
}데이터베이스
| 이름 | 설명 |
|---|---|
get_advisors | 보안·성능 점검 |
list_tables | 표 목록 |
list_policies | 접근 규칙 목록 |
query_sql | SQL 조회 (읽기 전용) |
run_sql | SQL 실행 (변경) |
read_rows | 표 내용 보기 |
export_table_csv | 표를 CSV로 내보내기 |
import_table_csv | CSV를 표로 가져오기 |
get_database_connection | 데이터베이스 연결 정보 |
reset_database_password | 데이터베이스 비밀번호 새로 만들기 |
list_extensions | DB 확장 목록 |
enable_extension | DB 확장 켜기 |
disable_extension | DB 확장 끄기 |
get_database_move | 전용 데이터베이스로 옮기기 상태 |
move_to_dedicated_database | 전용 데이터베이스로 옮기기 |
get_dedicated_disk | 전용 디스크 |
request_dedicated_disk | 전용 디스크로 옮기기 |
shrink_dedicated_disk | 디스크 줄이기 |
list_realtime_tables | 실시간 켠 표 |
set_realtime | 표의 실시간 켜기·끄기 |
list_migrations | 마이그레이션 기록 |
apply_migrations | 마이그레이션 적용 |
remove_migration_record | 마이그레이션 기록 지우기 |
dump_schema | 스키마를 SQL로 |
generate_typescript_types | TypeScript 타입 만들기 |
list_mysql_databases | MySQL 데이터베이스 목록 |
create_mysql_database | MySQL 데이터베이스 만들기 |
bind_mysql_database | MySQL 데이터베이스를 앱에 연결 |
delete_mysql_database | MySQL 데이터베이스 지우기 |
get_mysql_connection | MySQL 연결 정보 |
create_mysql_backup | MySQL 지금 백업 |
list_mysql_backups | MySQL 백업 목록 |
restore_mysql_backup | MySQL 백업으로 복원 |
get_advisors 보안·성능 점검
읽기 전용
데이터베이스 구조의 보안·성능 문제를 찾아요: RLS가 꺼진 표, 누구나 쓰는 규칙, 규칙을 무시하는 뷰, search_path 없는 security definer 함수, 사용자 표를 내보내는 뷰, 인덱스 없는 외래 키, 기본 키 없는 표, 중복 인덱스, 행마다 uid()를 부르는 규칙. 고칠 SQL(remedy)도 줘요. 표나 규칙을 바꾼 뒤 부르세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/advisors |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_tables 표 목록
읽기 전용
프로젝트의 표와 각 표의 칸, 대략의 줄 수, 접근 규칙 상태를 돌려줘요. 규칙이 켜져 있고 규칙 수가 0이면 공개 키로는 아무것도 보이지 않아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/tables |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_policies 접근 규칙 목록
읽기 전용
어떤 표의 어떤 동작이 누구에게 열려 있는지 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/policies |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}query_sql SQL 조회 (읽기 전용)
읽기 전용
조회 한 문장(SELECT 등)을 읽기 전용으로 실행해요(읽기 권한 토큰도 돼요). 바꾸는 문장은 run_sql을 쓰세요. Vault 비밀 값은 비어 있어요. 문법: https://www.postgresql.org/docs/16/sql-commands.html
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/sql/query |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
sql | string | 예 | 실행할 조회 한 문장. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"sql": {
"type": "string",
"description": "실행할 조회 한 문장."
}
},
"required": [
"ref",
"sql"
],
"additionalProperties": false
}run_sql SQL 실행 (변경)
파괴적
데이터나 구조를 바꾸는 SQL(CREATE, INSERT, UPDATE, DELETE 등)을 실행해요. 조회만이면 query_sql을 쓰세요. 문법은 PostgreSQL 16(https://www.postgresql.org/docs/16/sql-commands.html)이에요. 새 표는 접근 규칙이 켜진 채라 규칙을 만들기 전엔 공개 키로 안 보여요. 규칙의 권한 이름은 <ref>_anon, <ref>_authenticated, <ref>_service_role이에요. Supabase SQL(public., auth.uid(), storage., to authenticated)은 이 프로젝트 이름으로 바꿔 실행하고 translated로 알려 줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 입력에 따라 물어요 (읽기 SQL이나 dry_run이면 안 물음) |
| REST | POST /projects/{ref}/sql |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
sql | string | 예 | 실행할 SQL 한 문장. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"sql": {
"type": "string",
"description": "실행할 SQL 한 문장."
}
},
"required": [
"ref",
"sql"
],
"additionalProperties": false
}read_rows 표 내용 보기
읽기 전용
표의 앞부분을 그대로 읽어요. 확인용이며, 조건이 필요하면 run_sql을 쓰세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/rows/{table} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
table | string | 예 | 표 이름. |
limit | integer, min 1, max 200 | 아니요 | 기본 50줄. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"table": {
"type": "string",
"description": "표 이름."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"description": "기본 50줄."
}
},
"required": [
"ref",
"table"
],
"additionalProperties": false
}export_table_csv 표를 CSV로 내보내기
읽기 전용
표를 CSV로 돌려줘요(첫 줄은 열 이름). 1MB를 넘으면 잘리고 truncated가 true예요: filters로 나눠 받으세요. 빈 칸은 NULL, ""는 빈 문자열이에요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/tables/{table}/csv |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
table | string | 예 | 표 이름 (list_tables). |
filters | array<object>, max items 10 | 아니요 | 모두 맞는 줄만. 예: [{"column": "created_at", "op": "gte", "value": "2026-01-01"}] |
sort | string | 아니요 | 이 열 순서로. 비우면 표의 기본 순서. |
desc | boolean | 아니요 | true면 큰 것부터. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"table": {
"type": "string",
"description": "표 이름 (list_tables)."
},
"filters": {
"type": "array",
"maxItems": 10,
"description": "모두 맞는 줄만. 예: [{\"column\": \"created_at\", \"op\": \"gte\", \"value\": \"2026-01-01\"}]",
"items": {
"type": "object",
"properties": {
"column": {
"type": "string",
"description": "열 이름."
},
"op": {
"type": "string",
"enum": [
"eq",
"neq",
"gt",
"lt",
"gte",
"lte",
"like",
"ilike",
"in",
"is",
"isnot"
],
"description": "비교. in은 쉼표로 나눈 값, is·isnot은 NULL 검사."
},
"value": {
"type": "string",
"description": "비교할 값."
}
},
"required": [
"column",
"op"
],
"additionalProperties": false
}
},
"sort": {
"type": "string",
"description": "이 열 순서로. 비우면 표의 기본 순서."
},
"desc": {
"type": "boolean",
"description": "true면 큰 것부터."
}
},
"required": [
"ref",
"table"
],
"additionalProperties": false
}import_table_csv CSV를 표로 가져오기
추가만 함
CSV를 표에 넣어요. 첫 줄의 열 이름대로 들어가요(columns로 바꿔요). 한 줄이라도 실패하면 아무것도 넣지 않고 줄 번호와 이유를 알려 줘요. 2MB, 10,000줄까지예요. 따옴표 없는 빈 칸은 NULL이나 기본값이에요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/tables/{table}/csv |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
table | string | 예 | 표 이름 (list_tables). |
csv | string | 예 | CSV 내용. 첫 줄은 열 이름. |
columns | array<string> | 아니요 | CSV의 열마다 넣을 표의 열 이름, 건너뛸 열은 "". 첫 줄과 길이가 같아야 해요. 비우면 같은 이름끼리. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"table": {
"type": "string",
"description": "표 이름 (list_tables)."
},
"csv": {
"type": "string",
"description": "CSV 내용. 첫 줄은 열 이름."
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "CSV의 열마다 넣을 표의 열 이름, 건너뛸 열은 \"\". 첫 줄과 길이가 같아야 해요. 비우면 같은 이름끼리."
}
},
"required": [
"ref",
"table",
"csv"
],
"additionalProperties": false
}get_database_connection 데이터베이스 연결 정보
읽기 전용
이 프로젝트 PostgreSQL에 직접 연결할 주소를 봐요: direct(5432, 세션: 마이그레이션 도구·DB 클라이언트)와 pooler(6543, 트랜잭션: 서버리스). 비밀번호는 저장하지 않아 [YOUR-PASSWORD]로 나와요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | secrets.read 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/database |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}reset_database_password 데이터베이스 비밀번호 새로 만들기
파괴적
직접 연결 비밀번호를 새로 만들어 한 번만 보여 줘요. 이전 비밀번호의 연결은 다음부터 거부되니 confirm에 프로젝트 이름(list_projects의 name)이 필요해요. 이 사용자는 RLS를 거치지 않으니 서버에만 두세요. keep_for_deploys: true면 암호화해 저장하고 서버·미들웨어·함수가 실행될 때 DATABASE_URL·POSTGRES_URL·DIRECT_URL로 받아요(빌드 제외). 배포한 코드가 모든 행을 읽게 되니 사용자가 원할 때만 켜요. 빼면 넘기던 것도 멈춰요. 사용자가 요청할 때만 쓰고, 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/database/password |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
keep_for_deploys | boolean | 아니요 | true: 운영 배포에 DATABASE_URL로 넘겨요(암호화해 저장). 없거나 false: 보관하지 않고, 넘기던 것도 멈춰요. |
confirm | string | 예 | 프로젝트 이름. list_projects의 name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"keep_for_deploys": {
"type": "boolean",
"description": "true: 운영 배포에 DATABASE_URL로 넘겨요(암호화해 저장). 없거나 false: 보관하지 않고, 넘기던 것도 멈춰요."
},
"confirm": {
"type": "string",
"description": "프로젝트 이름. list_projects의 name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"confirm"
],
"additionalProperties": false
}list_extensions DB 확장 목록
읽기 전용
켤 수 있는 PostgreSQL 확장(vector, postgis, citext 등)과 available·enabled·버전이에요. extensions 스키마에 설치되고 SQL에서 vector(1536)처럼 바로 써요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/extensions |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}enable_extension DB 확장 켜기
파괴적
확장 하나를 켜요(create extension ... with schema extensions). 임베딩 검색은 vector, 지도·거리 계산은 postgis. 목록 밖의 확장은 거절돼요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/extensions/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 확장 이름: vector, postgis, citext, hstore, uuid-ossp, pgcrypto, ltree, fuzzystrmatch, btree_gin, btree_gist, intarray, tablefunc |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "확장 이름: vector, postgis, citext, hstore, uuid-ossp, pgcrypto, ltree, fuzzystrmatch, btree_gin, btree_gist, intarray, tablefunc"
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}disable_extension DB 확장 끄기
파괴적
확장을 꺼요. 쓰는 열·인덱스·함수가 남아 있으면 거절돼요. 다른 프로젝트가 쓰면 설치는 남고 이 프로젝트 기록만 지워요(note). pg_trgm·unaccent는 못 꺼요. confirm에 확장 이름이 필요해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | DELETE /projects/{ref}/extensions/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | |
confirm | string | 예 | 확장 이름. name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
},
"confirm": {
"type": "string",
"description": "확장 이름. name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"name",
"confirm"
],
"additionalProperties": false
}get_database_move 전용 데이터베이스로 옮기기 상태
읽기 전용
전용 데이터베이스에 있는지(dedicated), 요금제 포함 여부(plan_allows), 옮기는 상태(stopped, last_error)를 봐요. size_bytes가 auto_move_max_bytes보다 크면 move_to_dedicated_database로 요청하세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/database/move |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}move_to_dedicated_database 전용 데이터베이스로 옮기기
파괴적
프로젝트를 전용 데이터베이스로 옮기도록 요청해요(콘솔 "지금 옮기기"). 옮기는 동안 쓰기는 멈추고 읽기는 돼요. 직전 상태를 백업하고, 실패하면 그대로예요. Pro부터, 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/database/move |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_dedicated_disk 전용 디스크
읽기 전용
전용 디스크와 Postgres를 봐요: size_gb, 쓴 공간, 한 달 비용, 30일 기록, 하고 있는 요청, 줄이기 제안(shrink). 공용 디스크면 옮기는 기준(threshold_gb)과 지금 크기를 보여 줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/database/dedicated-disk |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}request_dedicated_disk 전용 디스크로 옮기기
파괴적
데이터베이스를 전용 디스크(max(1.2 × 데이터베이스, 20GB))로 옮기도록 요청해요. GB당 월 ₩1,200(75¢)이고, 옮기는 동안 쓰기는 실패해요. Enterprise는 언제든, 다른 유료 요금제는 기준을 넘으면 돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/database/dedicated-disk |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}shrink_dedicated_disk 디스크 줄이기
파괴적
전용 디스크를 줄여요: 작은 디스크(1.2 × 데이터베이스, 최소 20GB)로 옮기고 원래 것을 지워요. 7일 동안 25% 아래로 쓴 디스크만 돼요(shrink.suggested). 옮기는 동안 쓰기는 실패하고 읽기는 돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/database/dedicated-disk/shrink |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_realtime_tables 실시간 켠 표
읽기 전용
변경을 실시간으로 알리는 표 목록. 여기 없는 표를 구독하면 아무것도 오지 않아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/realtime |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_realtime 표의 실시간 켜기·끄기
파괴적
표 하나의 변경 알림을 켜거나 꺼요. 알림도 접근 규칙을 통과한 줄만 가요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/realtime/{table} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
table | string | 예 | |
enabled | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"table": {
"type": "string"
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"table",
"enabled"
],
"additionalProperties": false
}list_migrations 마이그레이션 기록
읽기 전용
apply_migrations로 적용한 마이그레이션의 버전·이름·적용 시각을 오래된 순으로 돌려줘요. 기록은 프로젝트 스키마의 oneend_migrations 표에 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/migrations |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}apply_migrations 마이그레이션 적용
파괴적
적용하지 않은 마이그레이션을 버전 순으로 하나씩 트랜잭션으로 실행하고 기록해요(적용된 건 건너뛰어요). 실패하면 그것만 되돌리고 멈추며 앞의 것은 남아요. run_sql 대신 쓰면 같은 변경을 다른 프로젝트에도 적용할 수 있어요. supabase/migrations 파일도 그대로 돼요: Supabase 이름(public., auth.uid(), storage., to authenticated)은 이 프로젝트 이름으로 바꿔 실행하고 translated로 알려 줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 입력에 따라 물어요 (읽기 SQL이나 dry_run이면 안 물음) |
| REST | POST /projects/{ref}/migrations |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
migrations | array<object>, max items 500 | 예 | |
include_all | boolean | 아니요 | 이미 적용된 마지막 버전보다 앞선 버전도 적용해요. 기본 false. |
record_only | boolean | 아니요 | 실행하지 않고 적용한 것으로 기록만 해요. 기본 false. |
dry_run | boolean | 아니요 | 무엇이 적용될지만 알려줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"migrations": {
"type": "array",
"maxItems": 500,
"items": {
"type": "object",
"properties": {
"version": {
"type": "string",
"pattern": "^[0-9]{1,32}$",
"description": "숫자 버전. 보통 YYYYMMDDHHMMSS."
},
"name": {
"type": "string",
"description": "영문·숫자·_·-로 된 짧은 이름. 예: create_notes"
},
"sql": {
"type": "string",
"description": "실행할 SQL. 여러 문장도 돼요."
}
},
"required": [
"version",
"sql"
],
"additionalProperties": false
}
},
"include_all": {
"type": "boolean",
"description": "이미 적용된 마지막 버전보다 앞선 버전도 적용해요. 기본 false."
},
"record_only": {
"type": "boolean",
"description": "실행하지 않고 적용한 것으로 기록만 해요. 기본 false."
},
"dry_run": {
"type": "boolean",
"description": "무엇이 적용될지만 알려줘요."
}
},
"required": [
"ref",
"migrations"
],
"additionalProperties": false
}remove_migration_record 마이그레이션 기록 지우기
파괴적
마이그레이션 하나를 적용하지 않은 것으로 되돌려요. 기록만 지우고 그 마이그레이션이 만든 것은 그대로 둬요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/migrations/{version} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
version | string, pattern ^[0-9]{1,32}$ | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"version": {
"type": "string",
"pattern": "^[0-9]{1,32}$"
}
},
"required": [
"ref",
"version"
],
"additionalProperties": false
}dump_schema 스키마를 SQL로
읽기 전용
프로젝트의 스키마(타입, 시퀀스, 표와 제약, 외래 키, 인덱스, 함수, 뷰, 트리거, RLS와 규칙)를 다시 만들 수 있는 SQL로 돌려줘요. 행 데이터와 권한은 들어 있지 않아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/schema |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}generate_typescript_types TypeScript 타입 만들기
읽기 전용
프로젝트의 표·뷰·함수·열거형으로 supabase-js의 createClient<Database>()에 넣는 Database 타입을 만들어요. 스키마를 바꾼 뒤 다시 부르세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/types/typescript |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
schema | string | 아니요 | 기본 public. 프로젝트가 만든 스키마(list_schemas의 name)도 돼요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"schema": {
"type": "string",
"description": "기본 public. 프로젝트가 만든 스키마(list_schemas의 name)도 돼요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_mysql_databases MySQL 데이터베이스 목록
읽기 전용
MySQL 데이터베이스(MariaDB 11.4)마다 받는 앱(app, null은 프로젝트 전체), 상태, 크기와 요금제 최대 개수(max)예요. available이 false면 이 서버에 아직 MySQL이 없어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/mysql |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_mysql_database MySQL 데이터베이스 만들기
추가만 함
WordPress 같은 MySQL 앱용 데이터베이스와 전용 로그인을 만들어요(보통 1분). app을 주면 그 앱만, 없으면 프로젝트의 앱 모두가 받아요. 서버는 시작할 때 MYSQL_URL·MYSQL_HOST·MYSQL_PORT·MYSQL_USER·MYSQL_PASSWORD·MYSQL_DATABASE와 WORDPRESS_DB_HOST·WORDPRESS_DB_USER·WORDPRESS_DB_PASSWORD·WORDPRESS_DB_NAME을 받아요(빌드 제외). 매일 밤 백업돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/mysql |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string, pattern ^[a-z][a-z0-9_]{0,31}$ | 예 | 영문 소문자로 시작하고 영문 소문자, 숫자, 밑줄(_)로 32자까지. 예: wordpress |
app | string | 아니요 | 이 데이터베이스를 받을 앱 이름. 비우면 프로젝트 전체용 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{0,31}$",
"description": "영문 소문자로 시작하고 영문 소문자, 숫자, 밑줄(_)로 32자까지. 예: wordpress"
},
"app": {
"type": "string",
"description": "이 데이터베이스를 받을 앱 이름. 비우면 프로젝트 전체용"
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}bind_mysql_database MySQL 데이터베이스를 앱에 연결
파괴적
MySQL 데이터베이스를 받을 앱을 바꿔요. app이 null이면 프로젝트 전체용이 돼요. 앱 하나에는 데이터베이스 하나만 연결돼요. 실행 중인 서버는 다시 시작하거나 다시 배포하면 바뀐 값을 받아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/mysql/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | |
app | string | 예 | 앱 이름, 또는 프로젝트 전체용이면 null |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
},
"app": {
"type": [
"string",
"null"
],
"description": "앱 이름, 또는 프로젝트 전체용이면 null"
}
},
"required": [
"ref",
"name",
"app"
],
"additionalProperties": false
}delete_mysql_database MySQL 데이터베이스 지우기
파괴적
MySQL 데이터베이스와 로그인, 백업을 모두 지워요. 되돌릴 수 없으니 사용자가 요청할 때만 쓰고 confirm에 데이터베이스 이름을 넣으세요. 받던 앱은 다음 시작부터 MYSQL_*를 받지 않아요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/mysql/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | |
confirm | string | 예 | MySQL 데이터베이스 이름. name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
},
"confirm": {
"type": "string",
"description": "MySQL 데이터베이스 이름. name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"name",
"confirm"
],
"additionalProperties": false
}get_mysql_connection MySQL 연결 정보
읽기 전용
MySQL 데이터베이스의 주소, 포트, 데이터베이스 이름, 로그인, 비밀번호와 앱이 받는 변수(variables)를 돌려줘요. 주소는 이 서버 안의 앱에서만 닿아요. 비밀번호는 쓰기 권한 토큰에만 보여요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | secrets.read 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/mysql/{name}/connection |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}create_mysql_backup MySQL 지금 백업
추가만 함
MySQL 데이터베이스를 지금 백업해요. 플러그인 업데이트나 대량 변경 전에 만드세요. 7일 보관돼요. 매일 밤 백업은 따로 자동으로 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/mysql/{name}/backups |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}list_mysql_backups MySQL 백업 목록
읽기 전용
MySQL 데이터베이스의 백업(매일 밤 자동, 직접 만든 것, 복원 직전 것)과 복원 기록을 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/mysql/{name}/backups |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}restore_mysql_backup MySQL 백업으로 복원
파괴적
MySQL 데이터베이스를 백업 시점으로 되돌려요. 그 뒤 변경은 사라지니 사용자가 요청할 때만 쓰고 confirm에 데이터베이스 이름을 넣으세요. 직전 상태를 백업하니 undo_backup_id로 되돌릴 수 있어요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/mysql/{name}/restore |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | |
backup_id | string | 예 | list_mysql_backups의 백업 id |
confirm | string | 예 | MySQL 데이터베이스 이름. name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
},
"backup_id": {
"type": "string",
"description": "list_mysql_backups의 백업 id"
},
"confirm": {
"type": "string",
"description": "MySQL 데이터베이스 이름. name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"name",
"backup_id",
"confirm"
],
"additionalProperties": false
}인증과 사용자
| 이름 | 설명 |
|---|---|
list_users | 서비스 가입자 목록 |
add_user | 서비스 가입자 추가 |
import_users | 서비스 가입자 한꺼번에 가져오기 |
update_user | 서비스 가입자 바꾸기 |
generate_link | 로그인 링크 만들기 |
list_auth_providers | 소셜 로그인 설정 보기 |
set_auth_provider | 소셜 로그인 켜기 |
set_auth_provider_enabled | 소셜 로그인 껐다 켜기 |
remove_auth_provider | 소셜 로그인 지우기 |
get_smtp_settings | SMTP 설정 보기 |
set_smtp_settings | SMTP 설정 |
test_smtp_settings | SMTP 시험 메일 보내기 |
remove_smtp_settings | SMTP 설정 지우기 |
get_email_templates | 이메일 템플릿 보기 |
set_email_template | 이메일 템플릿 저장 |
preview_email_template | 이메일 템플릿 미리보기 |
remove_email_template | 이메일 템플릿 되돌리기 |
get_sms_settings | 문자 로그인 설정 보기 |
set_sms_settings | 문자 로그인 설정 |
remove_sms_settings | 문자 로그인 지우기 |
list_sso_providers | SAML SSO 보기 |
remove_sso_provider | SAML SSO 지우기 |
list_redirect_urls | 로그인 후 돌아갈 주소 목록 |
add_redirect_url | 돌아갈 주소 추가 |
remove_redirect_url | 돌아갈 주소 제거 |
remove_user | 가입자 삭제 |
set_anonymous_sign_in | 익명 로그인 켜기·끄기 |
list_users 서비스 가입자 목록
읽기 전용
이 프로젝트 서비스의 가입자예요(플랫폼 계정과 별개). 한 번에 200명까지 오고 total이 전체 인원이에요. has_more가 true면 offset을 올려 다시 부르세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/users |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
limit | integer, min 1, max 200 | 아니요 | 한 번에 받을 인원. 기본값 50, 최대 200. |
offset | integer, min 0 | 아니요 | 건너뛸 인원. 기본값 0. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"description": "한 번에 받을 인원. 기본값 50, 최대 200."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "건너뛸 인원. 기본값 0."
}
},
"required": [
"ref"
],
"additionalProperties": false
}add_user 서비스 가입자 추가
추가만 함
이 프로젝트의 서비스에 가입자를 하나 만들어요. 비밀번호는 10자 이상이어야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/users |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
email | string | 예 | |
password | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"email": {
"type": "string"
},
"password": {
"type": "string"
}
},
"required": [
"ref",
"email",
"password"
],
"additionalProperties": false
}import_users 서비스 가입자 한꺼번에 가져오기
추가만 함
다른 서비스(Supabase auth.users 내보내기 등)의 가입자를 한 번에 500명까지 가져와요. id와 bcrypt 비밀번호 해시를 그대로 지켜서 비밀번호를 다시 정하지 않아도 로그인돼요. 목록 전체를 먼저 검사해 틀린 줄 번호를 알려 주고 하나도 가져오지 않아요. 이미 있는 계정은 건너뛰어서 다시 불러도 안전해요. dry_run=true면 검사만 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/users/import |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
users | array<object> | 예 | |
dry_run | boolean | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"users": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"encrypted_password": {
"type": "string"
},
"email_confirmed": {
"type": "boolean"
},
"user_metadata": {
"type": "object"
},
"app_metadata": {
"type": "object"
}
},
"required": [
"email"
],
"additionalProperties": false
}
},
"dry_run": {
"type": "boolean"
}
},
"required": [
"ref",
"users"
],
"additionalProperties": false
}update_user 서비스 가입자 바꾸기
파괴적
가입자 한 명의 이메일, 비밀번호, 이메일 확인, 정지, 메타데이터(합쳐짐)를 바꿔요. 비밀번호를 바꾸거나 정지하면 로그인이 모두 끊겨요. 비밀번호는 10자 이상, 유출된 것은 거절돼요. 사용자가 요청할 때만 쓰세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | PATCH /projects/{ref}/users/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_users의 id (UUID). |
email | string | 아니요 | 새 이메일. |
password | string | 아니요 | 새 비밀번호 (10자 이상). |
email_confirm | boolean | 아니요 | true면 이메일을 확인된 것으로 표시해요. |
ban_duration | string | 아니요 | 정지 기간. 예: 24h, 30m, 876000h(사실상 영구). none이면 정지를 풀어요. |
user_metadata | object | 아니요 | 사용자가 바꿀 수 있는 메타데이터에 합칠 값. |
app_metadata | object | 아니요 | 서버만 바꾸는 메타데이터에 합칠 값(역할, 요금제 등). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_users의 id (UUID)."
},
"email": {
"type": "string",
"description": "새 이메일."
},
"password": {
"type": "string",
"description": "새 비밀번호 (10자 이상)."
},
"email_confirm": {
"type": "boolean",
"description": "true면 이메일을 확인된 것으로 표시해요."
},
"ban_duration": {
"type": "string",
"description": "정지 기간. 예: 24h, 30m, 876000h(사실상 영구). none이면 정지를 풀어요."
},
"user_metadata": {
"type": "object",
"description": "사용자가 바꿀 수 있는 메타데이터에 합칠 값."
},
"app_metadata": {
"type": "object",
"description": "서버만 바꾸는 메타데이터에 합칠 값(역할, 요금제 등)."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}generate_link 로그인 링크 만들기
파괴적
메일로 가는 링크를 메일 없이 만들어요: invite(없으면 가입자 생성), magiclink, recovery, signup(password 필요). action_link를 열면 그 가입자로 로그인되니 비밀번호처럼 다뤄요: 사용자가 요청할 때만 만들고 그 사람에게만 전하세요. redirect_to는 add_redirect_url로 등록한 주소만 돼요. 소유자·관리자·개발자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | secrets.read 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/users/{id}/links |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
type | string, invite | magiclink | recovery | signup | 예 | |
email | string | 예 | 가입자의 이메일. |
password | string | 아니요 | signup일 때 새 가입자의 비밀번호 (10자 이상). |
data | object | 아니요 | invite·signup·magiclink로 새로 만들 때 넣을 사용자 메타데이터. |
redirect_to | string | 아니요 | 확인 뒤 돌아갈 주소. list_redirect_urls에 있는 것만. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"type": {
"type": "string",
"enum": [
"invite",
"magiclink",
"recovery",
"signup"
]
},
"email": {
"type": "string",
"description": "가입자의 이메일."
},
"password": {
"type": "string",
"description": "signup일 때 새 가입자의 비밀번호 (10자 이상)."
},
"data": {
"type": "object",
"description": "invite·signup·magiclink로 새로 만들 때 넣을 사용자 메타데이터."
},
"redirect_to": {
"type": "string",
"description": "확인 뒤 돌아갈 주소. list_redirect_urls에 있는 것만."
}
},
"required": [
"ref",
"type",
"email"
],
"additionalProperties": false
}list_auth_providers 소셜 로그인 설정 보기
읽기 전용
로그인할 수 있는 제공자를 모두 봐요(설정 전이면 configured: false). 직접 등록한 custom:<이름>은 custom 항목(주소, scopes, 필드 매핑)과 함께 나와요. callback_url은 제공자 콘솔에 붙여 넣을 주소예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/auth/providers |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_auth_provider 소셜 로그인 켜기
파괴적
제공자 하나의 클라이언트 ID와 시크릿을 저장하고 켜요(시크릿은 암호화해 저장하고 뒤 네 자리만 보여요). 먼저 제공자 콘솔에 list_auth_providers의 callback_url을 등록하세요. ID만 고치려면 client_secret을 빈 문자열로 둬요. provider를 custom:<이름>으로 주면 목록에 없는 OAuth 2.0·OpenID Connect 제공자를 등록해요: issuer(OIDC) 또는 authorize_url·token_url(·userinfo_url)이 필요하고, scopes와 claims(id·email·email_verified·name·avatar·phone이 응답의 어느 필드인지, 점 경로)를 줄 수 있어요. 앱에서는 signInWithOAuth({ provider: "custom:<이름>" })로 부르고, 로그인 직후 세션에 provider_token이 한 번 와요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/auth/providers/{provider} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
provider | string, pattern ^(google|kakao|naver|apple|github|gitlab|microsoft|facebook|line|discord|x|bitbucket|figma|linkedin_oidc|notion|twitch|slack_oidc|spotify|zoom|azure|keycloak|workos|twitter|slack|custom:[a-z0-9][a-z0-9_-]{0,39})$ | 예 | 로그인 제공자. google(구글), kakao(카카오), naver(네이버), apple(애플), github(GitHub), gitlab(GitLab), microsoft(Microsoft), facebook(Facebook), line(LINE), discord(Discord), x(X), bitbucket(Bitbucket), figma(Figma), linkedin_oidc(LinkedIn), notion(Notion), twitch(Twitch), slack_oidc(Slack), spotify(Spotify), zoom(Zoom), azure(Microsoft Entra ID), keycloak(Keycloak), workos(WorkOS), twitter(Twitter (OAuth 1.0a)), slack(Slack (legacy)), 또는 직접 등록하는 제공자 custom:<이름>(영문 소문자·숫자·-·_, 40자까지) |
client_id | string | 예 | |
client_secret | string | 예 | 빈 문자열이면 이미 저장된 시크릿을 그대로 둬요. 새 제공자에는 반드시 필요해요. |
enabled | boolean | 아니요 | 기본값은 켜짐이에요. |
label | string | 아니요 | custom: 제공자만. 화면에 보일 이름. |
issuer | string | 아니요 | custom: 제공자만. OpenID Connect issuer(예: https://kauth.kakao.com). 비운 주소를 discovery 문서로 채워요. |
authorize_url | string | 아니요 | custom: 제공자만. 로그인 화면 주소(https). |
token_url | string | 아니요 | custom: 제공자만. code를 토큰으로 바꾸는 주소(https). |
userinfo_url | string | 아니요 | custom: 제공자만. 사용자 정보를 읽는 주소(https). 비우면 id_token에서 읽어요. |
scopes | string | 아니요 | custom: 제공자만. 늘 요청할 scopes, 공백으로 구분. 앱이 보낸 scopes가 더해져요. |
claims | object | 아니요 | custom: 제공자만. 응답 필드 매핑, 예: {"id": "sub", "email": "kakao_account.email", "phone": "phone_number"}. 빼면 OpenID 표준 이름. |
claim_map | object | 아니요 | custom: 제공자만. claims와 같아요. 다른 도구와 같은 이름이에요. |
token_auth | string, body | basic | 아니요 | custom: 제공자만. client_secret을 본문(body, 기본)으로 보낼지 HTTP Basic으로 보낼지. |
pkce | boolean | 아니요 | custom: 제공자만. 기본 켜짐. 제공자가 PKCE를 거절할 때만 꺼요. |
provider_type | string, oidc | oauth2 | 아니요 | custom: 제공자만. oidc면 id_token을 issuer의 키(jwks_uri)로 서명·issuer·대상·만료·nonce까지 확인한 뒤에 읽어요. oauth2(기본)면 claims 매핑으로 읽어요. 빼면 저장된 값을 그대로 둬요. |
discovery_url | string | 아니요 | custom: 제공자만. discovery 문서가 {issuer}/.well-known/openid-configuration이 아닐 때. |
jwks_uri | string | 아니요 | custom: 제공자만. oidc의 서명 키 주소. 비우면 discovery 문서에서 채워요. |
email_optional | boolean | 아니요 | custom: 제공자만. 이메일 주소 없는 사용자도 로그인하게 해요. 빼면 저장된 값을 그대로 둬요(새 제공자는 꺼짐). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"provider": {
"type": "string",
"pattern": "^(google|kakao|naver|apple|github|gitlab|microsoft|facebook|line|discord|x|bitbucket|figma|linkedin_oidc|notion|twitch|slack_oidc|spotify|zoom|azure|keycloak|workos|twitter|slack|custom:[a-z0-9][a-z0-9_-]{0,39})$",
"description": "로그인 제공자. google(구글), kakao(카카오), naver(네이버), apple(애플), github(GitHub), gitlab(GitLab), microsoft(Microsoft), facebook(Facebook), line(LINE), discord(Discord), x(X), bitbucket(Bitbucket), figma(Figma), linkedin_oidc(LinkedIn), notion(Notion), twitch(Twitch), slack_oidc(Slack), spotify(Spotify), zoom(Zoom), azure(Microsoft Entra ID), keycloak(Keycloak), workos(WorkOS), twitter(Twitter (OAuth 1.0a)), slack(Slack (legacy)), 또는 직접 등록하는 제공자 custom:<이름>(영문 소문자·숫자·-·_, 40자까지)"
},
"client_id": {
"type": "string"
},
"client_secret": {
"type": "string",
"description": "빈 문자열이면 이미 저장된 시크릿을 그대로 둬요. 새 제공자에는 반드시 필요해요."
},
"enabled": {
"type": "boolean",
"description": "기본값은 켜짐이에요."
},
"label": {
"type": "string",
"description": "custom: 제공자만. 화면에 보일 이름."
},
"issuer": {
"type": "string",
"description": "custom: 제공자만. OpenID Connect issuer(예: https://kauth.kakao.com). 비운 주소를 discovery 문서로 채워요."
},
"authorize_url": {
"type": "string",
"description": "custom: 제공자만. 로그인 화면 주소(https)."
},
"token_url": {
"type": "string",
"description": "custom: 제공자만. code를 토큰으로 바꾸는 주소(https)."
},
"userinfo_url": {
"type": "string",
"description": "custom: 제공자만. 사용자 정보를 읽는 주소(https). 비우면 id_token에서 읽어요."
},
"scopes": {
"type": "string",
"description": "custom: 제공자만. 늘 요청할 scopes, 공백으로 구분. 앱이 보낸 scopes가 더해져요."
},
"claims": {
"type": "object",
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"description": "custom: 제공자만. 응답 필드 매핑, 예: {\"id\": \"sub\", \"email\": \"kakao_account.email\", \"phone\": \"phone_number\"}. 빼면 OpenID 표준 이름."
},
"claim_map": {
"type": "object",
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"description": "custom: 제공자만. claims와 같아요. 다른 도구와 같은 이름이에요."
},
"token_auth": {
"type": "string",
"enum": [
"body",
"basic"
],
"description": "custom: 제공자만. client_secret을 본문(body, 기본)으로 보낼지 HTTP Basic으로 보낼지."
},
"pkce": {
"type": "boolean",
"description": "custom: 제공자만. 기본 켜짐. 제공자가 PKCE를 거절할 때만 꺼요."
},
"provider_type": {
"type": "string",
"enum": [
"oidc",
"oauth2"
],
"description": "custom: 제공자만. oidc면 id_token을 issuer의 키(jwks_uri)로 서명·issuer·대상·만료·nonce까지 확인한 뒤에 읽어요. oauth2(기본)면 claims 매핑으로 읽어요. 빼면 저장된 값을 그대로 둬요."
},
"discovery_url": {
"type": "string",
"description": "custom: 제공자만. discovery 문서가 {issuer}/.well-known/openid-configuration이 아닐 때."
},
"jwks_uri": {
"type": "string",
"description": "custom: 제공자만. oidc의 서명 키 주소. 비우면 discovery 문서에서 채워요."
},
"email_optional": {
"type": "boolean",
"description": "custom: 제공자만. 이메일 주소 없는 사용자도 로그인하게 해요. 빼면 저장된 값을 그대로 둬요(새 제공자는 꺼짐)."
}
},
"required": [
"ref",
"provider",
"client_id",
"client_secret"
],
"additionalProperties": false
}set_auth_provider_enabled 소셜 로그인 껐다 켜기
파괴적
저장된 자격증명은 두고 제공자만 껐다 켜요. 다시 켤 때 시크릿을 새로 넣지 않아도 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/auth/providers/{provider} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
provider | string, pattern ^(google|kakao|naver|apple|github|gitlab|microsoft|facebook|line|discord|x|bitbucket|figma|linkedin_oidc|notion|twitch|slack_oidc|spotify|zoom|azure|keycloak|workos|twitter|slack|custom:[a-z0-9][a-z0-9_-]{0,39})$ | 예 | 로그인 제공자. google(구글), kakao(카카오), naver(네이버), apple(애플), github(GitHub), gitlab(GitLab), microsoft(Microsoft), facebook(Facebook), line(LINE), discord(Discord), x(X), bitbucket(Bitbucket), figma(Figma), linkedin_oidc(LinkedIn), notion(Notion), twitch(Twitch), slack_oidc(Slack), spotify(Spotify), zoom(Zoom), azure(Microsoft Entra ID), keycloak(Keycloak), workos(WorkOS), twitter(Twitter (OAuth 1.0a)), slack(Slack (legacy)), 또는 직접 등록하는 제공자 custom:<이름>(영문 소문자·숫자·-·_, 40자까지) |
enabled | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"provider": {
"type": "string",
"pattern": "^(google|kakao|naver|apple|github|gitlab|microsoft|facebook|line|discord|x|bitbucket|figma|linkedin_oidc|notion|twitch|slack_oidc|spotify|zoom|azure|keycloak|workos|twitter|slack|custom:[a-z0-9][a-z0-9_-]{0,39})$",
"description": "로그인 제공자. google(구글), kakao(카카오), naver(네이버), apple(애플), github(GitHub), gitlab(GitLab), microsoft(Microsoft), facebook(Facebook), line(LINE), discord(Discord), x(X), bitbucket(Bitbucket), figma(Figma), linkedin_oidc(LinkedIn), notion(Notion), twitch(Twitch), slack_oidc(Slack), spotify(Spotify), zoom(Zoom), azure(Microsoft Entra ID), keycloak(Keycloak), workos(WorkOS), twitter(Twitter (OAuth 1.0a)), slack(Slack (legacy)), 또는 직접 등록하는 제공자 custom:<이름>(영문 소문자·숫자·-·_, 40자까지)"
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"provider",
"enabled"
],
"additionalProperties": false
}remove_auth_provider 소셜 로그인 지우기
파괴적
제공자 설정을 자격증명째로 지워요(다시 쓰려면 시크릿을 새로 받아야 해요). 잠시 끄려면 set_auth_provider_enabled를 쓰세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/auth/providers/{provider} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
provider | string, pattern ^(google|kakao|naver|apple|github|gitlab|microsoft|facebook|line|discord|x|bitbucket|figma|linkedin_oidc|notion|twitch|slack_oidc|spotify|zoom|azure|keycloak|workos|twitter|slack|custom:[a-z0-9][a-z0-9_-]{0,39})$ | 예 | 로그인 제공자. google(구글), kakao(카카오), naver(네이버), apple(애플), github(GitHub), gitlab(GitLab), microsoft(Microsoft), facebook(Facebook), line(LINE), discord(Discord), x(X), bitbucket(Bitbucket), figma(Figma), linkedin_oidc(LinkedIn), notion(Notion), twitch(Twitch), slack_oidc(Slack), spotify(Spotify), zoom(Zoom), azure(Microsoft Entra ID), keycloak(Keycloak), workos(WorkOS), twitter(Twitter (OAuth 1.0a)), slack(Slack (legacy)), 또는 직접 등록하는 제공자 custom:<이름>(영문 소문자·숫자·-·_, 40자까지) |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"provider": {
"type": "string",
"pattern": "^(google|kakao|naver|apple|github|gitlab|microsoft|facebook|line|discord|x|bitbucket|figma|linkedin_oidc|notion|twitch|slack_oidc|spotify|zoom|azure|keycloak|workos|twitter|slack|custom:[a-z0-9][a-z0-9_-]{0,39})$",
"description": "로그인 제공자. google(구글), kakao(카카오), naver(네이버), apple(애플), github(GitHub), gitlab(GitLab), microsoft(Microsoft), facebook(Facebook), line(LINE), discord(Discord), x(X), bitbucket(Bitbucket), figma(Figma), linkedin_oidc(LinkedIn), notion(Notion), twitch(Twitch), slack_oidc(Slack), spotify(Spotify), zoom(Zoom), azure(Microsoft Entra ID), keycloak(Keycloak), workos(WorkOS), twitter(Twitter (OAuth 1.0a)), slack(Slack (legacy)), 또는 직접 등록하는 제공자 custom:<이름>(영문 소문자·숫자·-·_, 40자까지)"
}
},
"required": [
"ref",
"provider"
],
"additionalProperties": false
}get_smtp_settings SMTP 설정 보기
읽기 전용
인증 메일을 보내는 SMTP 서버와 보내는 사람을 봐요. 비밀번호는 password_hint(뒤 네 자리)만 와요. configured가 false거나 last_error가 있으면(그 서버가 거부) 플랫폼 주소로 보내요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/auth/smtp |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_smtp_settings SMTP 설정
파괴적
인증 메일을 이 프로젝트의 SMTP 서버와 보내는 사람으로 보내요. 처음엔 sender_email, host, username, password가 필요하고, 그 뒤엔 바꿀 값만 줘요(password를 비우면 그대로). 공인 주소와 TLS(465 또는 STARTTLS)가 필요해요. 서버가 거부하면 플랫폼 주소로 대신 보내고 last_error에 남겨요. 저장 후 test_smtp_settings로 확인하세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/auth/smtp |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
sender_email | string | 아니요 | 보내는 메일 주소(Sender email). 예: [email protected]. |
sender_name | string | 아니요 | 보내는 사람 이름(Sender name). 예: 우리 가게. |
host | string | 아니요 | SMTP 서버 주소(Host). 예: smtp.sendgrid.net. |
port | integer, 25 | 465 | 587 | 2465 | 2525 | 아니요 | 포트(Port). 기본 587. |
username | string | 아니요 | SMTP 사용자 이름(Username). |
password | string | 아니요 | SMTP 비밀번호(Password). 비우면 저장된 값을 써요. |
minimum_interval_seconds | integer, min 0, max 3600 | 아니요 | 같은 주소로 다시 보내기까지의 최소 간격(초). 기본 60. |
rate_limit_per_hour | integer, min 1, max 10000 | 아니요 | 프로젝트 전체가 한 시간에 보낼 수 있는 메일 수. 기본 100. 넘으면 over_email_send_rate_limit(429)로 거부돼요. |
enabled | boolean | 아니요 | false면 설정은 두고 플랫폼 발신 주소로 보내요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"sender_email": {
"type": "string",
"description": "보내는 메일 주소(Sender email). 예: [email protected]."
},
"sender_name": {
"type": "string",
"description": "보내는 사람 이름(Sender name). 예: 우리 가게."
},
"host": {
"type": "string",
"description": "SMTP 서버 주소(Host). 예: smtp.sendgrid.net."
},
"port": {
"type": "integer",
"enum": [
25,
465,
587,
2465,
2525
],
"description": "포트(Port). 기본 587."
},
"username": {
"type": "string",
"description": "SMTP 사용자 이름(Username)."
},
"password": {
"type": "string",
"description": "SMTP 비밀번호(Password). 비우면 저장된 값을 써요."
},
"minimum_interval_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 3600,
"description": "같은 주소로 다시 보내기까지의 최소 간격(초). 기본 60."
},
"rate_limit_per_hour": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"description": "프로젝트 전체가 한 시간에 보낼 수 있는 메일 수. 기본 100. 넘으면 over_email_send_rate_limit(429)로 거부돼요."
},
"enabled": {
"type": "boolean",
"description": "false면 설정은 두고 플랫폼 발신 주소로 보내요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}test_smtp_settings SMTP 시험 메일 보내기
추가만 함 외부로 나감
저장된 SMTP 서버로 시험 메일 한 통을 보내요. 플랫폼으로 대신 보내지 않아서, 실패하면 그 서버가 준 이유가 그대로 나와요. to를 빼면 호출한 사람의 주소로 보내요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/auth/smtp/test |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
to | string | 아니요 | 받을 주소. 빼면 내 주소. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"to": {
"type": "string",
"description": "받을 주소. 빼면 내 주소."
}
},
"required": [
"ref"
],
"additionalProperties": false
}remove_smtp_settings SMTP 설정 지우기
파괴적
SMTP 설정을 비밀번호째로 지워요. 이후 인증 메일은 플랫폼 발신 주소로 나가요. 잠시 멈추려면 set_smtp_settings에 enabled: false를 주세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/auth/smtp |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_email_templates 이메일 템플릿 보기
읽기 전용
인증 메일 여섯 종류(confirmation, invite, magic_link, recovery, email_change, reauthentication)의 제목과 HTML 본문이에요. custom이 false면 기본 문구(한국어·영어·일본어)를 써요. type을 주면 그 하나만 봐요. 변수는 Supabase와 같아요: {{ .ConfirmationURL }}, {{ .Token }}, {{ .TokenHash }}, {{ .SiteURL }}, {{ .Email }}, {{ .NewEmail }}, {{ .RedirectTo }}, {{ .Data.<key> }}.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/auth/templates, GET /projects/{ref}/auth/templates/{type} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
type | string, confirmation | invite | magic_link | recovery | email_change | reauthentication | password_changed | email_changed | mfa_enrolled | mfa_removed | identity_linked | identity_unlinked | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"type": {
"type": "string",
"enum": [
"confirmation",
"invite",
"magic_link",
"recovery",
"email_change",
"reauthentication",
"password_changed",
"email_changed",
"mfa_enrolled",
"mfa_removed",
"identity_linked",
"identity_unlinked"
]
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_email_template 이메일 템플릿 저장
파괴적
한 종류의 제목과 HTML 본문을 정해요(Supabase 템플릿 그대로 돼요). 제목은 한 줄, {{ if }} 같은 문법은 거부돼요. reauthentication은 아직 보내지 않아요. 저장 전에 preview_email_template로 확인하세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/auth/templates/{type} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
type | string, confirmation | invite | magic_link | recovery | email_change | reauthentication | password_changed | email_changed | mfa_enrolled | mfa_removed | identity_linked | identity_unlinked | 예 | |
subject | string, max length 200 | 예 | |
body | string, max length 50000 | 예 | 본문 HTML. 예: <a href="{{ .ConfirmationURL }}">가입 확인</a> |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"type": {
"type": "string",
"enum": [
"confirmation",
"invite",
"magic_link",
"recovery",
"email_change",
"reauthentication",
"password_changed",
"email_changed",
"mfa_enrolled",
"mfa_removed",
"identity_linked",
"identity_unlinked"
]
},
"subject": {
"type": "string",
"maxLength": 200
},
"body": {
"type": "string",
"maxLength": 50000,
"description": "본문 HTML. 예: <a href=\"{{ .ConfirmationURL }}\">가입 확인</a>"
}
},
"required": [
"ref",
"type",
"subject",
"body"
],
"additionalProperties": false
}preview_email_template 이메일 템플릿 미리보기
추가만 함
예시 값을 넣어 메일이 어떻게 보일지 돌려줘요(제목, HTML, 텍스트). subject와 body를 주면 저장하지 않고 그 내용을, 빼면 저장된 템플릿이나 기본 문구를 보여 줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/auth/templates/{type}/preview |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
type | string, confirmation | invite | magic_link | recovery | email_change | reauthentication | password_changed | email_changed | mfa_enrolled | mfa_removed | identity_linked | identity_unlinked | 예 | |
subject | string | 아니요 | |
body | string | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"type": {
"type": "string",
"enum": [
"confirmation",
"invite",
"magic_link",
"recovery",
"email_change",
"reauthentication",
"password_changed",
"email_changed",
"mfa_enrolled",
"mfa_removed",
"identity_linked",
"identity_unlinked"
]
},
"subject": {
"type": "string"
},
"body": {
"type": "string"
}
},
"required": [
"ref",
"type"
],
"additionalProperties": false
}remove_email_template 이메일 템플릿 되돌리기
파괴적
한 종류의 템플릿을 지우고 기본 문구(한국어·영어·일본어)로 돌아가요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/auth/templates/{type} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
type | string, confirmation | invite | magic_link | recovery | email_change | reauthentication | password_changed | email_changed | mfa_enrolled | mfa_removed | identity_linked | identity_unlinked | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"type": {
"type": "string",
"enum": [
"confirmation",
"invite",
"magic_link",
"recovery",
"email_change",
"reauthentication",
"password_changed",
"email_changed",
"mfa_enrolled",
"mfa_removed",
"identity_linked",
"identity_unlinked"
]
}
},
"required": [
"ref",
"type"
],
"additionalProperties": false
}get_sms_settings 문자 로그인 설정 보기
읽기 전용
전화번호 인증번호 로그인에 쓰는 문자 계정을 봐요: 제공자, 발신 번호, 허용 국가, 인증번호 길이·유효 시간, 시간당 한도. 자격증명은 뒤 네 자리만 보여요. platform_available이면 플랫폼 계정(1건 ₩100, 국내만)도 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/auth/sms |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_sms_settings 문자 로그인 설정
파괴적
문자 계정을 저장하고 켜요. 직접 계약한 제공자면 key·secret·account와 등록한 발신 번호가 필요해요(Solapi: API Key·API Secret, NHN Cloud: App Key·Secret Key, Aligo: API Key·User ID(account), Twilio·Twilio Verify: Account SID(account)·Auth Token(secret), MessageBird·Textlocal: key, Vonage: key·secret. MessageBird·Textlocal·Vonage는 11자 이하 발신자 ID, Twilio Verify는 VA로 시작하는 Verify Service SID도 돼요). 나머지 설정은 update_auth_config의 SMS_* 키로 바꿔요. 비운 자격증명은 그대로예요. allowed_countries는 기본 82(한국)만이고, 모르는 나라를 넣으면 해외 유료 번호 문자 사기에 노출돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/auth/sms |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
provider | string, platform | solapi | nhn | aligo | twilio | messagebird | textlocal | vonage | twilio_verify | 예 | |
key | string | 아니요 | |
secret | string | 아니요 | |
account | string | 아니요 | |
sender | string | 아니요 | 발신 번호. 예: 01012345678. Twilio는 +1… 번호나 MG로 시작하는 Messaging Service SID. |
allowed_countries | array<string> | 아니요 | 국가 번호 목록. 예: ["82"]. |
otp_length | integer, min 6, max 10 | 아니요 | |
otp_ttl_seconds | integer, min 60, max 3600 | 아니요 | |
hourly_limit | integer, min 1, max 100000 | 아니요 | |
template | string | 아니요 | {{code}}나 {{ .Code }}가 들어간 문구. null이면 기본 문구. |
enabled | boolean | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"provider": {
"type": "string",
"enum": [
"platform",
"solapi",
"nhn",
"aligo",
"twilio",
"messagebird",
"textlocal",
"vonage",
"twilio_verify"
]
},
"key": {
"type": "string"
},
"secret": {
"type": "string"
},
"account": {
"type": "string"
},
"sender": {
"type": "string",
"description": "발신 번호. 예: 01012345678. Twilio는 +1… 번호나 MG로 시작하는 Messaging Service SID."
},
"allowed_countries": {
"type": "array",
"items": {
"type": "string"
},
"description": "국가 번호 목록. 예: [\"82\"]."
},
"otp_length": {
"type": "integer",
"minimum": 6,
"maximum": 10
},
"otp_ttl_seconds": {
"type": "integer",
"minimum": 60,
"maximum": 3600
},
"hourly_limit": {
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"template": {
"type": [
"string",
"null"
],
"description": "{{code}}나 {{ .Code }}가 들어간 문구. null이면 기본 문구."
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"provider"
],
"additionalProperties": false
}remove_sms_settings 문자 로그인 지우기
파괴적
문자 계정 설정을 자격증명째로 지워요. 이후 전화번호 로그인은 phone_provider_disabled로 거부돼요. 잠시 끄려면 set_sms_settings에 enabled: false를 주세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/auth/sms |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_sso_providers SAML SSO 보기
읽기 전용
이 프로젝트에 등록된 SAML IdP와 이메일 도메인, 그리고 IdP에 넣어야 하는 두 주소(acs_url, entity_id)를 봐요. 앱에서는 supabase.auth.signInWithSSO({ domain })로 로그인해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/auth/sso |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}remove_sso_provider SAML SSO 지우기
파괴적
IdP 하나를 지워요. 그 IdP로 가입한 사용자 계정은 남지만 더는 SSO로 로그인할 수 없어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/auth/sso/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_sso_providers의 id |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_sso_providers의 id"
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}list_redirect_urls 로그인 후 돌아갈 주소 목록
읽기 전용
로그인이 끝난 사람을 돌려보낼 수 있는 주소예요. 여기 없는 주소로는 돌려보내지 않아요. 로그인은 되는데 아무 데도 안 간다면 여기부터 보세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/auth/redirect-urls |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}add_redirect_url 돌아갈 주소 추가
추가만 함
주소 하나를 허용 목록에 넣어요. 스킴·호스트·포트가 모두 같아야 하고 경로는 보지 않아서 https://app.example.com/callback을 넣으면 https://app.example.com이 저장돼요. 모바일 앱은 자기 스킴(co.example.app://callback)을 넣으면 co.example.app://callback이 저장돼요. 점이 들어간 앱 스킴만 받아요. 응답에 실제로 저장된 목록이 와요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/auth/redirect-urls |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
url | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"url": {
"type": "string"
}
},
"required": [
"ref",
"url"
],
"additionalProperties": false
}remove_redirect_url 돌아갈 주소 제거
파괴적
허용 목록에서 주소 하나를 빼요. list_redirect_urls가 돌려준 그대로 넣으세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/auth/redirect-urls |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
url | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"url": {
"type": "string"
}
},
"required": [
"ref",
"url"
],
"additionalProperties": false
}remove_user 가입자 삭제
파괴적
프로젝트의 가입자 한 명을 지워요. 되돌릴 수 없어요. id는 list_users가 돌려준 값이에요. 사용자가 분명히 요청했을 때만 쓰고, confirm에 그 가입자의 이메일(또는 id)을 그대로 넣어야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/users/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_users의 id(UUID). |
confirm | string | 예 | 지울 가입자의 이메일 또는 id. list_users의 email이나 id와 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_users의 id(UUID)."
},
"confirm": {
"type": "string",
"description": "지울 가입자의 이메일 또는 id. list_users의 email이나 id와 같아야 해요."
}
},
"required": [
"ref",
"id",
"confirm"
],
"additionalProperties": false
}set_anonymous_sign_in 익명 로그인 켜기·끄기
파괴적
이메일 없이 바로 세션을 받는 익명 로그인을 켜거나 꺼요. 지금 상태는 list_auth_providers의 anonymous_sign_in이에요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/auth/anonymous |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"enabled"
],
"additionalProperties": false
}파일 저장소
| 이름 | 설명 |
|---|---|
list_buckets | 버킷 목록 |
create_bucket | 버킷 만들기 |
update_bucket | 버킷 설정 바꾸기 |
empty_bucket | 버킷 비우기 |
delete_bucket | 버킷 삭제 |
list_objects | 파일 목록 |
upload_object | 파일 올리기 |
download_object | 파일 내려받기 |
delete_object | 파일 삭제 |
create_upload_url | 파일 올리기 주소 만들기 |
create_signed_url | 서명 주소 만들기 |
list_buckets 버킷 목록
읽기 전용
파일 저장소의 버킷과 각각의 파일 수·용량을 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/buckets |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_bucket 버킷 만들기
추가만 함
공개 버킷은 누구나 읽을 수 있고, 비공개 버킷은 올린 사람만 읽어요. file_size_limit와 allowed_mime_types로 파일 하나의 크기와 받을 형식을 처음부터 정할 수 있어요(나중에는 update_bucket).
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/buckets |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string, pattern ^[a-z0-9][a-z0-9._-]{1,62}$ | 예 | |
public | boolean | 아니요 | 기본값은 비공개예요. |
file_size_limit | string | 아니요 | 파일 하나의 최대 크기. 바이트 수나 "5MB" 같은 크기. null이면 제한 없음(요금제 한도까지). |
allowed_mime_types | string | 아니요 | 받을 형식. 예: ["image/png", "image/*"]. null이면 모든 형식. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9._-]{1,62}$"
},
"public": {
"type": "boolean",
"description": "기본값은 비공개예요."
},
"file_size_limit": {
"type": [
"integer",
"string",
"null"
],
"description": "파일 하나의 최대 크기. 바이트 수나 \"5MB\" 같은 크기. null이면 제한 없음(요금제 한도까지)."
},
"allowed_mime_types": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "받을 형식. 예: [\"image/png\", \"image/*\"]. null이면 모든 형식."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}update_bucket 버킷 설정 바꾸기
파괴적
버킷의 공개 여부, 파일 하나의 최대 크기, 받을 형식을 바꿔요. 준 것만 바뀌고 나머지는 그대로예요. 공개로 바꾸면 그 안의 파일을 누구나 받을 수 있게 되니 사용자가 분명히 요청했을 때만 쓰세요. 이미 있는 파일은 그대로 둬요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | PATCH /projects/{ref}/buckets/{bucket} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bucket | string | 예 | list_buckets의 버킷 이름. |
public | boolean | 아니요 | true면 공개, false면 비공개. |
file_size_limit | string | 아니요 | 파일 하나의 최대 크기. 바이트 수나 "5MB" 같은 크기. null이면 제한 없음(요금제 한도까지). |
allowed_mime_types | string | 아니요 | 받을 형식. 예: ["image/png", "image/*"]. null이면 모든 형식. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bucket": {
"type": "string",
"description": "list_buckets의 버킷 이름."
},
"public": {
"type": "boolean",
"description": "true면 공개, false면 비공개."
},
"file_size_limit": {
"type": [
"integer",
"string",
"null"
],
"description": "파일 하나의 최대 크기. 바이트 수나 \"5MB\" 같은 크기. null이면 제한 없음(요금제 한도까지)."
},
"allowed_mime_types": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "받을 형식. 예: [\"image/png\", \"image/*\"]. null이면 모든 형식."
}
},
"required": [
"ref",
"bucket"
],
"additionalProperties": false
}empty_bucket 버킷 비우기
파괴적
버킷 안의 파일을 모두 지워요. 버킷은 남아요. 되돌릴 수 없으니 사용자가 분명히 요청했을 때만 쓰고, confirm에 버킷 이름을 그대로 넣어야 해요. removed가 지운 파일 수예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/buckets/{bucket}/empty |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bucket | string | 예 | list_buckets의 버킷 이름. |
confirm | string | 예 | 버킷 이름. bucket과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bucket": {
"type": "string",
"description": "list_buckets의 버킷 이름."
},
"confirm": {
"type": "string",
"description": "버킷 이름. bucket과 정확히 같아야 해요."
}
},
"required": [
"ref",
"bucket",
"confirm"
],
"additionalProperties": false
}delete_bucket 버킷 삭제
파괴적
빈 버킷을 지워요. 파일이 남아 있으면 거절하니 먼저 empty_bucket으로 비우세요. 되돌릴 수 없어요. 사용자가 분명히 요청했을 때만 쓰고, confirm에 버킷 이름을 그대로 넣어야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/buckets/{bucket} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bucket | string | 예 | list_buckets의 버킷 이름. |
confirm | string | 예 | 버킷 이름. bucket과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bucket": {
"type": "string",
"description": "list_buckets의 버킷 이름."
},
"confirm": {
"type": "string",
"description": "버킷 이름. bucket과 정확히 같아야 해요."
}
},
"required": [
"ref",
"bucket",
"confirm"
],
"additionalProperties": false
}list_objects 파일 목록
읽기 전용
버킷 안의 한 폴더를 봐요: 하위 폴더와 파일의 이름, 크기, 형식. prefix로 폴더를 고르고(예: avatars/2024/), search로 이름을 찾아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/buckets/{bucket}/objects |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bucket | string | 예 | list_buckets의 버킷 이름. |
prefix | string | 아니요 | 볼 폴더. 비우면 맨 위. |
search | string | 아니요 | 이름에 이 말이 든 것만. |
limit | integer, min 1, max 1000 | 아니요 | 기본 100. |
offset | integer, min 0 | 아니요 | 건너뛸 개수. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bucket": {
"type": "string",
"description": "list_buckets의 버킷 이름."
},
"prefix": {
"type": "string",
"description": "볼 폴더. 비우면 맨 위."
},
"search": {
"type": "string",
"description": "이름에 이 말이 든 것만."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "기본 100."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "건너뛸 개수."
}
},
"required": [
"ref",
"bucket"
],
"additionalProperties": false
}upload_object 파일 올리기
파괴적
파일 하나를 버킷에 올려요(2MB까지). 바이너리는 encoding: base64로 보내요. 같은 이름은 거절하고 upsert: true면 덮어써요. 버킷의 크기·형식 제한을 따라요. 더 크면 create_upload_url을 쓰세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/buckets/{bucket}/objects |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bucket | string | 예 | list_buckets의 버킷 이름. |
name | string | 예 | 버킷 안의 경로. 예: docs/readme.txt |
content | string | 예 | 파일 내용 (encoding이 base64면 base64). |
encoding | string, utf-8 | base64 | 아니요 | 기본 utf-8. |
content_type | string | 아니요 | 예: image/png. 비우면 텍스트 또는 application/octet-stream. |
upsert | boolean | 아니요 | true면 같은 이름의 파일을 바꿔요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bucket": {
"type": "string",
"description": "list_buckets의 버킷 이름."
},
"name": {
"type": "string",
"description": "버킷 안의 경로. 예: docs/readme.txt"
},
"content": {
"type": "string",
"description": "파일 내용 (encoding이 base64면 base64)."
},
"encoding": {
"type": "string",
"enum": [
"utf-8",
"base64"
],
"description": "기본 utf-8."
},
"content_type": {
"type": "string",
"description": "예: image/png. 비우면 텍스트 또는 application/octet-stream."
},
"upsert": {
"type": "boolean",
"description": "true면 같은 이름의 파일을 바꿔요."
}
},
"required": [
"ref",
"bucket",
"name",
"content"
],
"additionalProperties": false
}download_object 파일 내려받기
읽기 전용
파일 하나의 내용을 돌려줘요(2MB까지). 텍스트는 utf-8로, 바이너리는 base64로 줘요. 더 큰 파일은 create_signed_url로 주소를 만들어 받으세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/buckets/{bucket}/object |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bucket | string | 예 | list_buckets의 버킷 이름. |
name | string | 예 | 버킷 안의 경로. |
encoding | string, utf-8 | base64 | 아니요 | 비우면 내용에 맞게 골라요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bucket": {
"type": "string",
"description": "list_buckets의 버킷 이름."
},
"name": {
"type": "string",
"description": "버킷 안의 경로."
},
"encoding": {
"type": "string",
"enum": [
"utf-8",
"base64"
],
"description": "비우면 내용에 맞게 골라요."
}
},
"required": [
"ref",
"bucket",
"name"
],
"additionalProperties": false
}delete_object 파일 삭제
파괴적
버킷에서 파일 하나를 지워요. 되돌릴 수 없어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/buckets/{bucket}/object |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bucket | string | 예 | list_buckets의 버킷 이름. |
name | string | 예 | 버킷 안의 경로. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bucket": {
"type": "string",
"description": "list_buckets의 버킷 이름."
},
"name": {
"type": "string",
"description": "버킷 안의 경로."
}
},
"required": [
"ref",
"bucket",
"name"
],
"additionalProperties": false
}create_upload_url 파일 올리기 주소 만들기
파괴적
2MB보다 큰 파일 하나를 올릴 주소를 만들어요(내용은 이 도구로 보내지 않아요). 받은 url에 파일 바이트를 그대로 PUT하고 content-type을 넣으세요(example의 curl). 주소는 2시간 동안 그 이름 하나에만 써요. max_bytes를 넘거나 allowed_mime_types에 없으면 거절돼요: 더 크면 blackwall://storage의 이어 올리기(TUS)를 쓰세요. 공개 버킷이면 public_url이 공개 주소예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/buckets/{bucket}/upload-urls |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bucket | string | 예 | list_buckets의 버킷 이름. |
name | string | 예 | 버킷 안의 경로. 예: videos/intro.mp4 |
upsert | boolean | 아니요 | true면 같은 이름의 파일을 바꿔요. 기본은 거절해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bucket": {
"type": "string",
"description": "list_buckets의 버킷 이름."
},
"name": {
"type": "string",
"description": "버킷 안의 경로. 예: videos/intro.mp4"
},
"upsert": {
"type": "boolean",
"description": "true면 같은 이름의 파일을 바꿔요. 기본은 거절해요."
}
},
"required": [
"ref",
"bucket",
"name"
],
"additionalProperties": false
}create_signed_url 서명 주소 만들기
파괴적
비공개 버킷의 파일 하나를 정해진 시간 동안 누구나 받을 수 있는 주소를 만들어요(기본 1시간, 최대 7일). 주소를 가진 사람은 로그인 없이 받으니 필요한 만큼만 쓰세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/buckets/{bucket}/signed-urls |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bucket | string | 예 | list_buckets의 버킷 이름. |
name | string | 예 | 버킷 안의 경로. |
expires_in | integer, min 1, max 604800 | 아니요 | 열려 있는 초. 기본 3600. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bucket": {
"type": "string",
"description": "list_buckets의 버킷 이름."
},
"name": {
"type": "string",
"description": "버킷 안의 경로."
},
"expires_in": {
"type": "integer",
"minimum": 1,
"maximum": 604800,
"description": "열려 있는 초. 기본 3600."
}
},
"required": [
"ref",
"bucket",
"name"
],
"additionalProperties": false
}배포와 저장소
list_deployments 배포 목록
읽기 전용
최근 배포를 최신순으로 봐요: 상태(queued, building, ready, error), 환경, 주소, 브랜치, 커밋, 실패 이유. 삭제한 배포는 빠져요(list_deleted_deployments). next_before가 있으면 before에 넣어 다음 쪽을 봐요. url은 그 배포만의 dpl- 주소, production_url·preview_url은 프로덕션·브랜치 주소예요. preview_protection은 프리뷰를 누가 여는지예요(members 기본, password, off). 프로덕션 주소는 늘 공개지만, 보호가 켜지면 dpl- 주소는 보호돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/deployments |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
limit | integer, min 1, max 100 | 아니요 | 기본 20. |
before | string, pattern ^dpl-[0-9a-f]{16}$ | 아니요 | 이 배포 다음부터(더 오래된 쪽). 앞 쪽 답의 next_before. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "기본 20."
},
"before": {
"type": "string",
"pattern": "^dpl-[0-9a-f]{16}$",
"description": "이 배포 다음부터(더 오래된 쪽). 앞 쪽 답의 next_before."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_deployment 배포 하나와 빌드 로그
읽기 전용
배포 하나의 상태, 주소, 빌드 로그 끝부분을 봐요(실패 이유는 대개 로그 끝). 환경 변수 값은 가려져요. 주소 필드는 list_deployments와 같아요. wait(초)를 주면 빌드가 끝날 때까지 기다려요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/deployments/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | dpl-로 시작하는 배포 이름. |
tail | integer, min 1, max 5000 | 아니요 | 빌드 로그 마지막 몇 줄. 기본 200. |
wait | integer, min 0, max 120 | 아니요 | 빌드가 끝날(ready·error) 때까지 기다릴 초. 기본 0은 바로 답해요. 시간 안에 안 끝나면 still_running: true와 retry_after_seconds가 와요. MCP 클라이언트는 보통 60초쯤에 호출을 포기하니 45 정도가 안전해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "dpl-로 시작하는 배포 이름."
},
"tail": {
"type": "integer",
"minimum": 1,
"maximum": 5000,
"description": "빌드 로그 마지막 몇 줄. 기본 200."
},
"wait": {
"type": "integer",
"minimum": 0,
"maximum": 120,
"description": "빌드가 끝날(ready·error) 때까지 기다릴 초. 기본 0은 바로 답해요. 시간 안에 안 끝나면 still_running: true와 retry_after_seconds가 와요. MCP 클라이언트는 보통 60초쯤에 호출을 포기하니 45 정도가 안전해요."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}redeploy 다시 배포
파괴적
배포와 같은 커밋을 같은 환경에 다시 빌드해요. 환경 변수를 나중에 넣었거나 패키지 저장소가 잠시 죽어 실패한 빌드에 써요. 프로덕션은 소유자·관리자만 돼요. 답에 새 주소와 보안 점검(advisors)이 와요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/deployments/{id}/redeploy |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | dpl-로 시작하는 배포 이름. |
wait | integer, min 0, max 120 | 아니요 | 빌드가 끝날(ready·error) 때까지 기다릴 초. 기본 0은 바로 답해요. 시간 안에 안 끝나면 still_running: true와 retry_after_seconds가 와요. MCP 클라이언트는 보통 60초쯤에 호출을 포기하니 45 정도가 안전해요. |
block_on_advisors | boolean | 아니요 | true면 get_advisors의 심각한 보안 문제(advisors.critical)가 하나라도 있을 때 프로덕션 배포를 하지 않고 거절해요. 기본 false: 배포하고 advisors에 개수와 상위 3개를 알려줘요. 프리뷰는 막지 않아요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "dpl-로 시작하는 배포 이름."
},
"wait": {
"type": "integer",
"minimum": 0,
"maximum": 120,
"description": "빌드가 끝날(ready·error) 때까지 기다릴 초. 기본 0은 바로 답해요. 시간 안에 안 끝나면 still_running: true와 retry_after_seconds가 와요. MCP 클라이언트는 보통 60초쯤에 호출을 포기하니 45 정도가 안전해요."
},
"block_on_advisors": {
"type": "boolean",
"description": "true면 get_advisors의 심각한 보안 문제(advisors.critical)가 하나라도 있을 때 프로덕션 배포를 하지 않고 거절해요. 기본 false: 배포하고 advisors에 개수와 상위 3개를 알려줘요. 프리뷰는 막지 않아요."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}promote_deployment 프리뷰를 프로덕션으로
파괴적
빌드가 끝난 프리뷰 배포를 프로덕션으로 올려요. 같은 커밋을 프로덕션 환경 변수로 다시 빌드하고, 끝나면 프로덕션 주소가 그 결과를 가리켜요. 프리뷰용 키가 프로덕션에 들어가지 않게 프리뷰 빌드를 그대로 쓰지 않아요. 빌드가 끝난 프로덕션 배포를 주면 다시 빌드하지 않고 프로덕션 주소가 바로 그 배포를 가리키고, 되돌리기로 생긴 프로덕션 보류(production_held)가 풀려요. 지금 배포를 주면 보류만 풀려요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자, project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/deployments/{id}/promote |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | 올릴 배포의 dpl- 이름. 보통 프리뷰, 보류를 풀 때는 프로덕션 배포. |
wait | integer, min 0, max 120 | 아니요 | 빌드가 끝날(ready·error) 때까지 기다릴 초. 기본 0은 바로 답해요. 시간 안에 안 끝나면 still_running: true와 retry_after_seconds가 와요. MCP 클라이언트는 보통 60초쯤에 호출을 포기하니 45 정도가 안전해요. |
block_on_advisors | boolean | 아니요 | true면 get_advisors의 심각한 보안 문제(advisors.critical)가 하나라도 있을 때 프로덕션 배포를 하지 않고 거절해요. 기본 false: 배포하고 advisors에 개수와 상위 3개를 알려줘요. 프리뷰는 막지 않아요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "올릴 배포의 dpl- 이름. 보통 프리뷰, 보류를 풀 때는 프로덕션 배포."
},
"wait": {
"type": "integer",
"minimum": 0,
"maximum": 120,
"description": "빌드가 끝날(ready·error) 때까지 기다릴 초. 기본 0은 바로 답해요. 시간 안에 안 끝나면 still_running: true와 retry_after_seconds가 와요. MCP 클라이언트는 보통 60초쯤에 호출을 포기하니 45 정도가 안전해요."
},
"block_on_advisors": {
"type": "boolean",
"description": "true면 get_advisors의 심각한 보안 문제(advisors.critical)가 하나라도 있을 때 프로덕션 배포를 하지 않고 거절해요. 기본 false: 배포하고 advisors에 개수와 상위 3개를 알려줘요. 프리뷰는 막지 않아요."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}rollback_deployment 프로덕션 되돌리기
파괴적
프로덕션 주소를 예전에 서비스했던 프로덕션 배포로 바로 돌려놓아요. 다시 빌드하지 않고, 몇 초 안에 바뀌어요. 커스텀 도메인도 함께 따라가요. 그 뒤 프로덕션은 보류돼요(production_held): 새 프로덕션 빌드는 만들어지지만 promote_deployment로 올리기 전까지 나가지 않아요. 소유자·관리자만 할 수 있어요. 답에 그 배포의 url과 production_url이 와요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/deployments/{id}/rollback |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | 되돌아갈 프로덕션 배포의 dpl- 이름. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "되돌아갈 프로덕션 배포의 dpl- 이름."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}deploy_source 올린 소스 배포
파괴적
이미 올린 압축 파일(POST /deployments/sources 또는 oneend deploy)을 source(SHA-256)로 골라 배포해요. 프리뷰로 확인한 소스를 프로덕션에 다시 낼 때 써요. 나머지 인자는 deploy_files와 같아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/deployments |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
source | string, pattern ^[0-9a-f]{64}$ | 예 | 올릴 때 받은 source (64자리 SHA-256). |
target | string, preview | production | 아니요 | 기본 preview. |
prebuilt | boolean | 아니요 | true면 빌드하지 않고 그대로 서비스해요. |
app | string | 아니요 | 배포할 앱 (list_apps의 name). 앱이 하나면 생략해요. |
branch | string | 아니요 | 프리뷰의 이름. 프리뷰 주소가 돼요. 기본 preview. |
message | string | 아니요 | 배포 목록에 남길 메모 (선택). |
wait | integer, min 0, max 120 | 아니요 | 빌드가 끝날(ready·error) 때까지 기다릴 초. 기본 0은 바로 답해요. 시간 안에 안 끝나면 still_running: true와 retry_after_seconds가 와요. MCP 클라이언트는 보통 60초쯤에 호출을 포기하니 45 정도가 안전해요. |
block_on_advisors | boolean | 아니요 | true면 get_advisors의 심각한 보안 문제(advisors.critical)가 하나라도 있을 때 프로덕션 배포를 하지 않고 거절해요. 기본 false: 배포하고 advisors에 개수와 상위 3개를 알려줘요. 프리뷰는 막지 않아요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"source": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "올릴 때 받은 source (64자리 SHA-256)."
},
"target": {
"type": "string",
"enum": [
"preview",
"production"
],
"description": "기본 preview."
},
"prebuilt": {
"type": "boolean",
"description": "true면 빌드하지 않고 그대로 서비스해요."
},
"app": {
"type": "string",
"description": "배포할 앱 (list_apps의 name). 앱이 하나면 생략해요."
},
"branch": {
"type": "string",
"description": "프리뷰의 이름. 프리뷰 주소가 돼요. 기본 preview."
},
"message": {
"type": "string",
"description": "배포 목록에 남길 메모 (선택)."
},
"wait": {
"type": "integer",
"minimum": 0,
"maximum": 120,
"description": "빌드가 끝날(ready·error) 때까지 기다릴 초. 기본 0은 바로 답해요. 시간 안에 안 끝나면 still_running: true와 retry_after_seconds가 와요. MCP 클라이언트는 보통 60초쯤에 호출을 포기하니 45 정도가 안전해요."
},
"block_on_advisors": {
"type": "boolean",
"description": "true면 get_advisors의 심각한 보안 문제(advisors.critical)가 하나라도 있을 때 프로덕션 배포를 하지 않고 거절해요. 기본 false: 배포하고 advisors에 개수와 상위 3개를 알려줘요. 프리뷰는 막지 않아요."
}
},
"required": [
"ref",
"source"
],
"additionalProperties": false
}create_source_upload_url 배포할 압축 파일 올리기 주소 만들기
추가만 함
3MB 넘는 사이트를 저장소 없이 배포할 때, 압축 파일(.zip, .tar, .tar.gz) 하나를 올릴 주소를 만들어요. url에 그대로 PUT하면(토큰 없이, example의 curl) source가 오니 deploy_source를 부르세요. 주소는 1시간, max_bytes까지예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/deployments/sources/upload-urls |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_deploy_hooks 배포 훅 목록
읽기 전용
배포 훅과 그 주소를 봐요. 주소로 POST하면 그 브랜치의 최신 커밋을 빌드하니 주소 자체가 비밀이에요. 읽기 권한 토큰에는 주소의 끝 네 자리만 보여줘요(secret_hidden). 쓰기 권한 토큰이면 전부 보여요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | secrets.read 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/deploy-hooks |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_deploy_hook 배포 훅 만들기
추가만 함
push 없이 다시 빌드하게 하는 주소를 만들어요. CMS에서 글을 발행하거나 예약 작업이 돌 때 부르게 해요. 프로덕션 브랜치의 훅은 소유자·관리자만 만들 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/deploy-hooks |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
app | string | 예 | |
branch | string | 예 | |
name | string | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"app": {
"type": "string"
},
"branch": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"ref",
"app",
"branch"
],
"additionalProperties": false
}remove_deploy_hook 배포 훅 삭제
파괴적
배포 훅을 지워요. 그 주소를 부르던 곳에서는 더 배포가 일어나지 않아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/deploy-hooks/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string"
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}list_apps 연결된 저장소와 빌드 설정
읽기 전용
배포하는 저장소마다 프로덕션 브랜치, root_directory, framework(null이면 자동 감지), build_command·output_directory·install_command(null이면 프리셋 기본값)를 봐요. detected_framework는 최근 빌드가 쓴 것, frameworks는 고를 수 있는 프리셋이에요. 저장소는 첫 push 때 생겨요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/apps |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}delete_app 앱 삭제
파괴적
프로젝트의 앱 하나를 지워요(모노레포에서 폴더를 없앤 앱). 주소는 바로 내려가고, 진행 중인 빌드는 취소되고, 배포는 복원 없이 지워져 파일이 몇 분 안에 사라져요. 저장소에 폴더가 남아 있어도 다시 빌드하지 않아요. 되돌릴 수 없어요. 프로젝트의 기본 사이트, 도메인이 연결된 앱, 디스크가 있는 앱은 거절하고 먼저 할 일을 알려줘요. 사용자가 분명히 요청했을 때만 쓰고, confirm에 앱 이름을 그대로 넣어야 해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/apps/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | list_apps의 name. |
confirm | string | 예 | 앱 이름. name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "list_apps의 name."
},
"confirm": {
"type": "string",
"description": "앱 이름. name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"name",
"confirm"
],
"additionalProperties": false
}update_app 빌드 설정 바꾸기
파괴적
저장소 하나의 프로덕션 브랜치, 빌드할 폴더, 프리셋, 빌드·출력·설치 명령을 바꿔요. 모노레포면 root_directory에 앱 폴더(예: apps/web)를 넣어요. 뺀 값은 그대로, null은 자동 감지, 빈 문자열 명령은 그 단계를 건너뛰어요. blackwall.json 값이 있으면 그걸 써요. 다음 배포부터 적용되고, port만 1분 안에 서버를 다시 시작해 적용해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/apps/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | list_apps의 name. |
production_branch | string | 아니요 | |
root_directory | string | 아니요 | 저장소 안의 상대 경로. 저장소 전체는 "." |
framework | string, auto | next | vite | astro | sveltekit | nuxt | remix | react-router | angular | create-react-app | gatsby | docusaurus | vitepress | eleventy | hugo | solidstart | qwik | node | static | docker | null | 아니요 | 프레임워크 프리셋. "auto"나 null이면 빌드할 때마다 자동 감지해요. "static"은 기타(정적 파일)예요. |
build_command | string | 아니요 | 빌드 명령 덮어쓰기(한 줄). null이면 프리셋 기본값, 빈 문자열이면 빌드를 건너뛰어요. |
output_directory | string | 아니요 | 출력 디렉터리 덮어쓰기. root_directory 안의 상대 경로(예: dist). null이면 프리셋 기본값. |
install_command | string | 아니요 | 설치 명령 덮어쓰기(한 줄). null이면 잠금 파일에 맞춘 기본값, 빈 문자열이면 설치를 건너뛰어요. |
run_as | string, platform | image | 아니요 | 서버를 누구로 실행할지. platform(기본)은 일반 사용자(10001), image는 이미지에 적힌 사용자(root 포함)로 gVisor 격리 환경에서 실행해요. WordPress 공식 이미지처럼 root로 시작해야 하는 Dockerfile 앱에만 image를 쓰세요. 빌드 없이 1분 안에 서버가 다시 시작해요. |
port | string, min 1, max 65535 | 아니요 | 서버가 컨테이너 안에서 듣는 포트. null이면 이미지의 EXPOSE, 없으면 3000. 바꾸면 1분 안에 서버가 다시 시작해요(다시 배포할 필요 없어요). |
build_machine | string, standard | enhanced | turbo | xl | max | 아니요 | 빌드 머신 크기. standard 2 CPU·6GB, enhanced 4 CPU·12GB(빌드 분 2배), turbo 8 CPU·24GB(4배), xl 16 CPU·48GB(8배), max 32 CPU·96GB(16배). xl과 max는 Enterprise 요금제에서 쓸 수 있어요. 메모리가 모자라 빌드가 죽으면 키우세요. 다음 빌드부터 적용돼요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "list_apps의 name."
},
"production_branch": {
"type": "string"
},
"root_directory": {
"type": "string",
"description": "저장소 안의 상대 경로. 저장소 전체는 \".\""
},
"framework": {
"type": [
"string",
"null"
],
"enum": [
"auto",
"next",
"vite",
"astro",
"sveltekit",
"nuxt",
"remix",
"react-router",
"angular",
"create-react-app",
"gatsby",
"docusaurus",
"vitepress",
"eleventy",
"hugo",
"solidstart",
"qwik",
"node",
"static",
"docker",
null
],
"description": "프레임워크 프리셋. \"auto\"나 null이면 빌드할 때마다 자동 감지해요. \"static\"은 기타(정적 파일)예요."
},
"build_command": {
"type": [
"string",
"null"
],
"description": "빌드 명령 덮어쓰기(한 줄). null이면 프리셋 기본값, 빈 문자열이면 빌드를 건너뛰어요."
},
"output_directory": {
"type": [
"string",
"null"
],
"description": "출력 디렉터리 덮어쓰기. root_directory 안의 상대 경로(예: dist). null이면 프리셋 기본값."
},
"install_command": {
"type": [
"string",
"null"
],
"description": "설치 명령 덮어쓰기(한 줄). null이면 잠금 파일에 맞춘 기본값, 빈 문자열이면 설치를 건너뛰어요."
},
"run_as": {
"type": "string",
"enum": [
"platform",
"image"
],
"description": "서버를 누구로 실행할지. platform(기본)은 일반 사용자(10001), image는 이미지에 적힌 사용자(root 포함)로 gVisor 격리 환경에서 실행해요. WordPress 공식 이미지처럼 root로 시작해야 하는 Dockerfile 앱에만 image를 쓰세요. 빌드 없이 1분 안에 서버가 다시 시작해요."
},
"port": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 65535,
"description": "서버가 컨테이너 안에서 듣는 포트. null이면 이미지의 EXPOSE, 없으면 3000. 바꾸면 1분 안에 서버가 다시 시작해요(다시 배포할 필요 없어요)."
},
"build_machine": {
"type": "string",
"enum": [
"standard",
"enhanced",
"turbo",
"xl",
"max"
],
"description": "빌드 머신 크기. standard 2 CPU·6GB, enhanced 4 CPU·12GB(빌드 분 2배), turbo 8 CPU·24GB(4배), xl 16 CPU·48GB(8배), max 32 CPU·96GB(16배). xl과 max는 Enterprise 요금제에서 쓸 수 있어요. 메모리가 모자라 빌드가 죽으면 키우세요. 다음 빌드부터 적용돼요."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}get_preview_protection 프리뷰 보호 보기
읽기 전용
프로덕션이 아닌 배포(브랜치 프리뷰, 배포마다의 주소)를 누가 열 수 있는지 봐요: off, members(조직 멤버만), password. 보호하는 주소(scope), 로그인 없이 들이는 IP(trusted_ips), 그냥 통과시키는 경로(options_paths), 우회 키(bypass_secrets, 값은 끝 네 글자만), 공유 링크(share_links)도 함께 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/preview-protection |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_preview_protection 프리뷰 보호 바꾸기
파괴적
프리뷰를 누가 여는지 바꿔요: members(로그인한 조직 멤버), password(처음 켤 때 8자 이상 password 필요), off(누구나). 프로덕션 주소와 연결한 도메인은 늘 공개예요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | PUT /projects/{ref}/preview-protection |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
mode | string, off | members | password | 예 | |
password | string | 아니요 | mode가 password일 때. 비우면 이미 있는 비밀번호를 그대로 써요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"mode": {
"type": "string",
"enum": [
"off",
"members",
"password"
]
},
"password": {
"type": "string",
"description": "mode가 password일 때. 비우면 이미 있는 비밀번호를 그대로 써요."
}
},
"required": [
"ref",
"mode"
],
"additionalProperties": false
}get_branch_previews 브랜치 미리보기 보기
읽기 전용
이 프로젝트가 속한 조직에서 프로덕션 브랜치가 아닌 브랜치에 푸시할 때 미리보기를 빌드하는지 봐요(branch_previews). false면 프로덕션 브랜치(보통 main)에 들어온 것만 빌드해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/branch-previews |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_branch_previews 브랜치 미리보기 바꾸기
파괴적
조직 전체에서 브랜치 푸시마다 미리보기를 빌드할지 정해요. false면 프로덕션 브랜치(보통 main)에 들어온 것만 빌드하고, 건너뛴 푸시는 배포 기록에 건너뜀으로 남아요. redeploy, 직접 올린 배포, 배포 훅은 그대로 빌드해요. 이 조직의 모든 프로젝트에 적용돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | team.manage 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/branch-previews |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 예 | true면 브랜치 푸시마다 미리보기를 빌드해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "true면 브랜치 푸시마다 미리보기를 빌드해요."
}
},
"required": [
"ref",
"enabled"
],
"additionalProperties": false
}list_env_vars 환경 변수 보기
읽기 전용
배포한 앱이 빌드·실행 때 받는 환경 변수예요. 같은 이름이 production과 preview에 따로 있을 수 있어요. 민감한 값은 value_hint(뒤 네 자리)만 줘요. readable이 false면 빌드에서 빠지니 다시 저장하세요. automatic은 저장하지 않아도 들어가는 변수예요(SUPABASE_URL, NEXT_PUBLIC_SUPABASE_URL, SUPABASE_ANON_KEY, NEXT_PUBLIC_SUPABASE_ANON_KEY, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY, SUPABASE_SERVICE_ROLE_KEY). available_in은 들어가는 곳으로, SUPABASE_SERVICE_ROLE_KEY는 실행(runtime)에만 들어가요. 같은 이름으로 저장한 값이 먼저이고 빌드에도 들어가요(overridden_in).
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | secrets.read 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/env |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_env_vars 환경 변수 저장
파괴적
환경 변수를 저장해요. variables로 하나씩, 또는 dotenv에 .env 내용을 통째로 줘요. 같은 이름은 덮어쓰고, 하나라도 틀리면 아무것도 저장하지 않아요. 단, dotenv에서 플랫폼이 정하는 이름의 줄은 건너뛰고 skipped에 알려 줘요. PORT, HOST, HOSTNAME, HOME과 BLACKWALL_로 시작하는 이름은 못 써요. CI는 빌드에 기본 1이고, 직접 정하면(CI=false 등) 그 값을 써요. 다음 배포부터 적용돼요. sensitive를 빼면 비밀 같은 이름(API_KEY, STRIPE_SECRET, DATABASE_URL 등)은 민감한 값으로 저장돼 다시 못 읽어요(sensitive_keys). production 값은 소유자·관리자만 바꿔요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/env |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
variables | array<object> | 아니요 | |
dotenv | string | 아니요 | .env 파일 내용. 주석과 빈 줄은 건너뛰어요. |
targets | array<string>, production | preview | development, min items 1 | 예 | preview는 프로덕션 브랜치가 아닌 모든 브랜치의 배포예요. |
sensitive | boolean | 아니요 | true면 저장한 뒤 값을 다시 읽을 수 없어요. 주지 않으면 이름에 SECRET, TOKEN, PASSWORD, PRIVATE, DSN, DATABASE_URL이 들어가거나 _KEY로 끝나거나 KEY_가 든 변수만 민감한 값으로 저장해요. false면 모두 다시 읽을 수 있어요. |
app | string | 아니요 | 이 앱에만 넣을 때 앱 이름(list_apps의 name). 같은 이름의 프로젝트 변수보다 먼저예요. 비우면 프로젝트의 모든 앱. |
branch | string, max length 200 | 아니요 | 이 git 브랜치의 미리보기에만 넣을 때 브랜치 이름. targets는 preview 하나여야 해요. app과 함께 쓰면 그 앱의 그 브랜치에만 들어가요. 비우면 모든 미리보기. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"variables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"key",
"value"
],
"additionalProperties": false
}
},
"dotenv": {
"type": "string",
"description": ".env 파일 내용. 주석과 빈 줄은 건너뛰어요."
},
"targets": {
"type": "array",
"items": {
"type": "string",
"enum": [
"production",
"preview",
"development"
]
},
"minItems": 1,
"description": "preview는 프로덕션 브랜치가 아닌 모든 브랜치의 배포예요."
},
"sensitive": {
"type": "boolean",
"description": "true면 저장한 뒤 값을 다시 읽을 수 없어요. 주지 않으면 이름에 SECRET, TOKEN, PASSWORD, PRIVATE, DSN, DATABASE_URL이 들어가거나 _KEY로 끝나거나 KEY_가 든 변수만 민감한 값으로 저장해요. false면 모두 다시 읽을 수 있어요."
},
"app": {
"type": "string",
"description": "이 앱에만 넣을 때 앱 이름(list_apps의 name). 같은 이름의 프로젝트 변수보다 먼저예요. 비우면 프로젝트의 모든 앱."
},
"branch": {
"type": "string",
"maxLength": 200,
"description": "이 git 브랜치의 미리보기에만 넣을 때 브랜치 이름. targets는 preview 하나여야 해요. app과 함께 쓰면 그 앱의 그 브랜치에만 들어가요. 비우면 모든 미리보기."
}
},
"required": [
"ref",
"targets"
],
"additionalProperties": false
}remove_env_var 환경 변수 삭제
파괴적
환경 변수 하나를 production이나 preview 중 한 곳에서 지워요. 민감한 값이었다면 되살릴 수 없어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/env/{target}/{key} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string | 예 | |
target | string, production | preview | development | 예 | |
app | string | 아니요 | 앱에만 넣은 변수를 지울 때 앱 이름. 비우면 프로젝트의 변수. |
branch | string, max length 200 | 아니요 | 한 git 브랜치의 미리보기에만 넣은 변수를 지울 때 브랜치 이름(list_env_vars의 branch). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string"
},
"target": {
"type": "string",
"enum": [
"production",
"preview",
"development"
]
},
"app": {
"type": "string",
"description": "앱에만 넣은 변수를 지울 때 앱 이름. 비우면 프로젝트의 변수."
},
"branch": {
"type": "string",
"maxLength": 200,
"description": "한 git 브랜치의 미리보기에만 넣은 변수를 지울 때 브랜치 이름(list_env_vars의 branch)."
}
},
"required": [
"ref",
"key",
"target"
],
"additionalProperties": false
}list_git_access Git 연결
읽기 전용
배포하는 저장소(connected), 연결한 GitHub 계정(github_accounts), 비공개 저장소를 받을 방법(토큰 끝 네 글자, GitHub App 설치), GitHub 저장소마다 검사를 One Server에서 실행하는지(checks_on_server: available, enabled, state, permission_url, workflows_using)를 봐요. 비공개 저장소 빌드가 받기에서 실패하면 여기부터 보세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/git |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_repo_token 저장소 토큰 저장
파괴적
비공개 저장소를 받을 접근 토큰을 저장해요(읽기 권한이면 충분해요). 암호화해 저장하고 다시 보여 주지 않아요. 자체 GitLab이면 gitlab_base를 넣으세요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/git/tokens/{provider} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
provider | string, github | gitlab | bitbucket | 예 | |
token | string | 예 | |
gitlab_base | string | 아니요 | 자체 GitLab 주소. gitlab.com이면 비워요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"provider": {
"type": "string",
"enum": [
"github",
"gitlab",
"bitbucket"
]
},
"token": {
"type": "string"
},
"gitlab_base": {
"type": "string",
"description": "자체 GitLab 주소. gitlab.com이면 비워요."
}
},
"required": [
"ref",
"provider",
"token"
],
"additionalProperties": false
}remove_repo_token 저장소 토큰 삭제
파괴적
저장한 토큰을 지워요. 연결한 GitHub App 설치는 그대로 둬요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/git/tokens/{provider} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
provider | string, github | gitlab | bitbucket | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"provider": {
"type": "string",
"enum": [
"github",
"gitlab",
"bitbucket"
]
}
},
"required": [
"ref",
"provider"
],
"additionalProperties": false
}add_repository 저장소 추가
추가만 함 외부로 나감
첫 push 전에 저장소를 이 프로젝트에 붙여요. 그러면 push가 이 프로젝트로 오고 create_deploy_hook도 쓸 수 있어요. repo는 owner/name(GitLab은 group/name)이에요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/git/repos |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
provider | string, github | gitlab | bitbucket | 예 | |
repo | string | 예 | |
branch | string | 아니요 | 프로덕션 브랜치. 비우면 main. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"provider": {
"type": "string",
"enum": [
"github",
"gitlab",
"bitbucket"
]
},
"repo": {
"type": "string"
},
"branch": {
"type": "string",
"description": "프로덕션 브랜치. 비우면 main."
}
},
"required": [
"ref",
"provider",
"repo"
],
"additionalProperties": false
}list_importable_repositories 가져올 저장소 찾기
읽기 전용 외부로 나감
GitHub App이 볼 수 있는 저장소를 최근 푸시 순으로 50개까지 봐요. query를 주면 전체에서 찾고, 방금 추가했다면 refresh: true. 계정이 여럿이면 installation으로 골라요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/git/importable |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
query | string | 아니요 | 저장소 이름의 일부. 비우면 최근에 푸시한 순서. |
installation | integer | 아니요 | 어느 GitHub 계정의 설치인지. 비우면 기본 계정. |
refresh | boolean | 아니요 | GitHub에 다시 묻기(1분 캐시를 건너뜀). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"query": {
"type": "string",
"description": "저장소 이름의 일부. 비우면 최근에 푸시한 순서."
},
"installation": {
"type": "integer",
"description": "어느 GitHub 계정의 설치인지. 비우면 기본 계정."
},
"refresh": {
"type": "boolean",
"description": "GitHub에 다시 묻기(1분 캐시를 건너뜀)."
}
},
"required": [
"ref"
],
"additionalProperties": false
}import_repository 저장소 가져오기
파괴적 외부로 나감
콘솔의 [연결하고 배포]와 같아요. 저장소를 연결하고 프로덕션 브랜치(비우면 기본 브랜치)의 최신 커밋으로 바로 배포해요. 빌드 설정과 환경 변수(dotenv)를 첫 빌드 전에 함께 저장해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/git/import |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
repo | string | 예 | owner/name. list_importable_repositories의 repo. |
branch | string | 아니요 | 프로덕션 브랜치. 비우면 저장소의 기본 브랜치. |
root_directory | string | 아니요 | 모노레포의 앱 폴더(예: apps/web). 비우면 저장소 맨 위. 이미 연결한 저장소에서 다른 폴더를 주면 새 앱으로 추가해요. |
app | string | 아니요 | 앱 이름(콘솔의 "앱 이름"). 비우면 폴더 이름, 없으면 저장소 이름. 같은 이름의 앱이 있으면 그 앱의 설정을 바꿔요. |
installation | integer | 아니요 | 어느 GitHub 계정의 설치로 받을지. 비우면 저장소 주인의 계정. |
framework | string, auto | next | vite | astro | sveltekit | nuxt | remix | react-router | angular | create-react-app | gatsby | docusaurus | vitepress | eleventy | hugo | solidstart | qwik | node | static | docker | null | 아니요 | 프레임워크 프리셋. 비우거나 "auto"면 자동 감지. |
build_command | string | 아니요 | 빌드 명령 덮어쓰기(한 줄). 빈 문자열이면 빌드를 건너뛰어요. |
output_directory | string | 아니요 | 출력 디렉터리 덮어쓰기(예: dist). |
install_command | string | 아니요 | 설치 명령 덮어쓰기(한 줄). |
dotenv | string | 아니요 | .env 파일 내용. 프로덕션과 프리뷰 모두에 저장해요. |
sensitive | boolean | 아니요 | dotenv의 값을 저장한 뒤 다시 보여주지 않아요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"repo": {
"type": "string",
"description": "owner/name. list_importable_repositories의 repo."
},
"branch": {
"type": "string",
"description": "프로덕션 브랜치. 비우면 저장소의 기본 브랜치."
},
"root_directory": {
"type": "string",
"description": "모노레포의 앱 폴더(예: apps/web). 비우면 저장소 맨 위. 이미 연결한 저장소에서 다른 폴더를 주면 새 앱으로 추가해요."
},
"app": {
"type": "string",
"description": "앱 이름(콘솔의 \"앱 이름\"). 비우면 폴더 이름, 없으면 저장소 이름. 같은 이름의 앱이 있으면 그 앱의 설정을 바꿔요."
},
"installation": {
"type": "integer",
"description": "어느 GitHub 계정의 설치로 받을지. 비우면 저장소 주인의 계정."
},
"framework": {
"type": [
"string",
"null"
],
"enum": [
"auto",
"next",
"vite",
"astro",
"sveltekit",
"nuxt",
"remix",
"react-router",
"angular",
"create-react-app",
"gatsby",
"docusaurus",
"vitepress",
"eleventy",
"hugo",
"solidstart",
"qwik",
"node",
"static",
"docker",
null
],
"description": "프레임워크 프리셋. 비우거나 \"auto\"면 자동 감지."
},
"build_command": {
"type": [
"string",
"null"
],
"description": "빌드 명령 덮어쓰기(한 줄). 빈 문자열이면 빌드를 건너뛰어요."
},
"output_directory": {
"type": [
"string",
"null"
],
"description": "출력 디렉터리 덮어쓰기(예: dist)."
},
"install_command": {
"type": [
"string",
"null"
],
"description": "설치 명령 덮어쓰기(한 줄)."
},
"dotenv": {
"type": "string",
"description": ".env 파일 내용. 프로덕션과 프리뷰 모두에 저장해요."
},
"sensitive": {
"type": "boolean",
"description": "dotenv의 값을 저장한 뒤 다시 보여주지 않아요."
}
},
"required": [
"ref",
"repo"
],
"additionalProperties": false
}disconnect_repository 저장소 연결 해제
파괴적
저장소 연결을 해제해 푸시해도 배포하지 않아요. 서비스 중인 배포, 배포 기록, 빌드 설정, 환경 변수는 그대로이고 import_repository로 다시 연결돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | DELETE /projects/{ref}/git/repos/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | list_git_access의 repositories[].name. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "list_git_access의 repositories[].name."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}set_checks_on_server 검사를 One Server에서 실행
파괴적
연결한 GitHub 저장소의 GitHub Actions 검사를 One Server의 머신에서 실행하도록 켜거나 꺼요. 콘솔의 Git 연결 → [검사를 One Server에서 실행]과 같아요. 켜면 저장소 변수 POOL_RUNNER를 저장하고, 작업이 runs-on: ${{ vars.POOL_RUNNER || 'ubuntu-latest' }}를 쓰면 One Server에서 돌아요. 끄면 변수를 지워 GitHub의 머신으로 돌아가요. state가 needs_permission이면 permission_url에서 GitHub App의 새 권한을 승인하면 저절로 켜져요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/git/checks/{repo}/{repo} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
repo | string | 예 | list_git_access의 repositories[].repo (owner/name). |
enabled | boolean | 예 | true면 켜고 false면 꺼요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"repo": {
"type": "string",
"description": "list_git_access의 repositories[].repo (owner/name)."
},
"enabled": {
"type": "boolean",
"description": "true면 켜고 false면 꺼요."
}
},
"required": [
"ref",
"repo",
"enabled"
],
"additionalProperties": false
}unlink_github_app GitHub 계정 연결 해제
파괴적
이 프로젝트와 GitHub 계정(App 설치)의 연결을 해제해요. installation을 주면 그 계정만, 비우면 모두예요. 저장한 토큰과 GitHub의 App 설치는 그대로예요. 다시 연결은 콘솔에서만 돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/git/github-app, DELETE /projects/{ref}/git/github-app/{installation} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
installation | integer | 아니요 | list_git_access의 github_accounts[].installation_id. 비우면 모두. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"installation": {
"type": "integer",
"description": "list_git_access의 github_accounts[].installation_id. 비우면 모두."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_server_memory 서버 메모리
읽기 전용
서버 배포의 메모리(MB)·CPU 수, 요금제 최대값, 1GB·시간 요금과 한 달 금액이에요. 프로덕션과 브랜치 서버는 늘 켜져 있어(최소 1대) 그 금액이 서버 하나의 한 달 요금이에요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/server-memory |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_server_memory 서버 메모리 바꾸기
파괴적
서버 배포(Node 서버, 작업자)의 메모리를 512·1024·2048·4096MB 중에서 골라요(1024MB 넘으면 CPU 2개). 쓴 만큼 runtime_gb_hour로 사용량을 재요. 1분 안에 새 크기로 다시 시작해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | PUT /projects/{ref}/server-memory |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
memory_mb | integer, 512 | 1024 | 2048 | 4096 | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"memory_mb": {
"type": "integer",
"enum": [
512,
1024,
2048,
4096
]
}
},
"required": [
"ref",
"memory_mb"
],
"additionalProperties": false
}get_concurrent_builds 동시 빌드
읽기 전용
이 프로젝트의 빌드가 한꺼번에 몇 개까지 도는지예요. null이면 빌더가 허락하는 만큼 돌아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/concurrent-builds |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_concurrent_builds 동시 빌드 바꾸기
파괴적
이 프로젝트의 빌드가 한꺼번에 몇 개까지 돌지 1~20으로 정하거나, null로 한도를 없애요. 넘는 빌드는 대기열에서 기다리고, 기다리는 동안은 청구되지 않아요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/concurrent-builds |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
concurrent_builds | string, min 1, max 20 | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"concurrent_builds": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 20
}
},
"required": [
"ref",
"concurrent_builds"
],
"additionalProperties": false
}list_gpu GPU 작업과 서버
읽기 전용
GPU 작업(최근 50개), 서버, 저장소, 장비별 시간 요금과 저장소 1GB·월 요금, 고를 수 있는 지역·데이터센터, 조직의 동시 GPU 한도와 지금 쓰는 수예요. 무료 요금제는 GPU를 못 써요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/gpu |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_gpu_job GPU 작업 만들기
파괴적
GPU를 빌려 공개 이미지에서 명령을 끝까지 실행해요. 끝나거나 max_minutes가 지나면 반납하고, 쓴 초만큼(이미지 받는 시간 포함) 청구해요. 결과는 바깥에 올려야 남아요. 이미지에 curl, wget, python3 중 하나가 필요해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/gpu/jobs |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
gpu | string, rtx4090 | l40s | a100 | h100 | 예 | |
image | string | 예 | 공개 이미지, 예: pytorch/pytorch:2.4.0-cuda12.1-cudnn9-runtime |
command | string | 예 | sh로 실행할 명령 |
name | string | 아니요 | |
env | object | 아니요 | 환경 변수. 암호화해 저장해요. |
max_minutes | integer, min 1, max 10080 | 아니요 | 기본 60분 |
region | string, auto | asia | us | eu | 아니요 | 빌릴 지역. 기본 auto(빈 장비가 있는 곳 어디든). asia는 일본·인도예요. 저장소를 고르면 그 저장소의 데이터센터에서 빌려요. |
volume | string | 아니요 | /workspace에 붙일 GPU 저장소 이름(create_gpu_volume으로 만든 것) |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"gpu": {
"type": "string",
"enum": [
"rtx4090",
"l40s",
"a100",
"h100"
]
},
"image": {
"type": "string",
"description": "공개 이미지, 예: pytorch/pytorch:2.4.0-cuda12.1-cudnn9-runtime"
},
"command": {
"type": "string",
"description": "sh로 실행할 명령"
},
"name": {
"type": "string"
},
"env": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "환경 변수. 암호화해 저장해요."
},
"max_minutes": {
"type": "integer",
"minimum": 1,
"maximum": 10080,
"description": "기본 60분"
},
"region": {
"type": "string",
"enum": [
"auto",
"asia",
"us",
"eu"
],
"description": "빌릴 지역. 기본 auto(빈 장비가 있는 곳 어디든). asia는 일본·인도예요. 저장소를 고르면 그 저장소의 데이터센터에서 빌려요."
},
"volume": {
"type": "string",
"description": "/workspace에 붙일 GPU 저장소 이름(create_gpu_volume으로 만든 것)"
}
},
"required": [
"ref",
"gpu",
"image",
"command"
],
"additionalProperties": false
}get_gpu_job GPU 작업 보기
읽기 전용
GPU 작업 하나의 상태, 쓴 시간과 금액, 종료 코드, 출력의 마지막 부분(최대 64KB)을 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/gpu/jobs/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string"
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}cancel_gpu_job GPU 작업 멈추기
파괴적
GPU 작업을 멈춰요. 아직 시작 전이면 시작하지 않고, 실행 중이면 GPU를 돌려줘요. 돌려줄 때까지 쓴 시간은 청구돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/gpu/jobs/{id}/cancel |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string"
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}create_gpu_server GPU 서버 만들기
파괴적
공개 이미지로 모델을 띄울 GPU 서버를 만들어요. https://<ref>.<zone>/gpu/v1/servers/<name>/ 에 secret 키로 부르면 꺼져 있을 땐 켜고(그동안 503) 요청을 넘겨요. idle_minutes 동안 요청이 없으면 꺼요(0은 계속 켬). 켜기 시작부터 꺼질 때까지(이미지 받기 포함) 초 단위로 청구해요. 서버는 x-oneend-gpu-token 헤더 값을 ONEEND_GPU_TOKEN으로 받아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/gpu/servers |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 영문 소문자, 숫자, 하이픈 |
gpu | string, rtx4090 | l40s | a100 | h100 | 예 | |
image | string | 예 | 공개 이미지, 예: vllm/vllm-openai:latest |
command | string | 아니요 | 비우면 이미지의 기본 명령 |
env | object | 아니요 | |
port | integer, min 1, max 65535 | 아니요 | 기본 8000 |
idle_minutes | integer, min 0, max 1440 | 아니요 | 기본 15분, 0은 계속 켜 둠 |
region | string, auto | asia | us | eu | 아니요 | 빌릴 지역. 기본 auto(빈 장비가 있는 곳 어디든). asia는 일본·인도예요. 저장소를 고르면 그 저장소의 데이터센터에서 빌려요. |
volume | string | 아니요 | /workspace에 붙일 GPU 저장소 이름(create_gpu_volume으로 만든 것) |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "영문 소문자, 숫자, 하이픈"
},
"gpu": {
"type": "string",
"enum": [
"rtx4090",
"l40s",
"a100",
"h100"
]
},
"image": {
"type": "string",
"description": "공개 이미지, 예: vllm/vllm-openai:latest"
},
"command": {
"type": "string",
"description": "비우면 이미지의 기본 명령"
},
"env": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"port": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"description": "기본 8000"
},
"idle_minutes": {
"type": "integer",
"minimum": 0,
"maximum": 1440,
"description": "기본 15분, 0은 계속 켜 둠"
},
"region": {
"type": "string",
"enum": [
"auto",
"asia",
"us",
"eu"
],
"description": "빌릴 지역. 기본 auto(빈 장비가 있는 곳 어디든). asia는 일본·인도예요. 저장소를 고르면 그 저장소의 데이터센터에서 빌려요."
},
"volume": {
"type": "string",
"description": "/workspace에 붙일 GPU 저장소 이름(create_gpu_volume으로 만든 것)"
}
},
"required": [
"ref",
"name",
"gpu",
"image"
],
"additionalProperties": false
}stop_gpu_server GPU 서버 멈추기
파괴적
GPU 서버를 지금 멈춰요. 꺼질 때까지 쓴 시간은 청구돼요. 다음 요청 때 다시 켜져요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/gpu/servers/{name}/stop |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}delete_gpu_server GPU 서버 지우기
파괴적
GPU 서버를 지워요. 켜져 있으면 먼저 멈춘 뒤 지워요. 되돌릴 수 없으니 confirm에 GPU 서버 이름을 그대로 넣어야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/gpu/servers/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | |
confirm | string | 예 | GPU 서버 이름. name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
},
"confirm": {
"type": "string",
"description": "GPU 서버 이름. name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"name",
"confirm"
],
"additionalProperties": false
}create_gpu_volume GPU 저장소 만들기
파괴적
모델·데이터를 남길 GPU 저장소를 한 데이터센터에 만들어요(작업·서버의 /workspace에 붙어요). 쓰지 않아도 1GB·월 요금이 청구되고, 이걸 쓰면 그 데이터센터에서만 GPU를 빌려요. 유료 요금제만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/gpu/volumes |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 영문 소문자, 숫자, 하이픈 |
size_gb | integer, min 10, max 4000 | 아니요 | 기본 50GB |
datacenter | string | 예 | 데이터센터, 예: AP-JP-1(일본). 고를 수 있는 목록은 list_gpu에 있어요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "영문 소문자, 숫자, 하이픈"
},
"size_gb": {
"type": "integer",
"minimum": 10,
"maximum": 4000,
"description": "기본 50GB"
},
"datacenter": {
"type": "string",
"description": "데이터센터, 예: AP-JP-1(일본). 고를 수 있는 목록은 list_gpu에 있어요."
}
},
"required": [
"ref",
"name",
"datacenter"
],
"additionalProperties": false
}delete_gpu_volume GPU 저장소 지우기
파괴적
GPU 저장소와 그 안의 파일을 모두 지워요. 쓰는 작업이나 서버가 있으면 지우지 않아요. 되돌릴 수 없어요. 지울 때까지의 저장 요금은 청구돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/gpu/volumes/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}list_deleted_deployments 최근 삭제한 배포
읽기 전용
3일 안에 삭제된 배포(직접 삭제했거나 보관 기간이 지난 것)와 되돌릴 수 있는 마감(restorable_until)을 돌려줘요. 그동안 그 배포의 주소는 410으로 답해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/deployments/deleted |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}delete_deployment 배포 삭제
파괴적
배포 하나를 삭제해요(서비스 중·빌드 중인 배포는 안 돼요). 3일 동안 restore_deployment로 되돌릴 수 있고, 그 뒤 파일과 빌드 로그를 지워요. 프로덕션은 프로젝트 관리자, 나머지는 개발자 이상이 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/deployments/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string, pattern ^dpl-[0-9a-f]{16}$ | 예 | 배포 id(dpl-…). list_deployments나 list_deleted_deployments로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"pattern": "^dpl-[0-9a-f]{16}$",
"description": "배포 id(dpl-…). list_deployments나 list_deleted_deployments로 확인해요."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}restore_deployment 배포 되돌리기
파괴적
3일 안에 삭제된 배포를 되돌려요. 주소가 다시 응답하고 롤백·승격도 할 수 있어요. 프로덕션 배포는 프로젝트 관리자, 나머지는 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/deployments/{id}/restore |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string, pattern ^dpl-[0-9a-f]{16}$ | 예 | 배포 id(dpl-…). list_deployments나 list_deleted_deployments로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"pattern": "^dpl-[0-9a-f]{16}$",
"description": "배포 id(dpl-…). list_deployments나 list_deleted_deployments로 확인해요."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}list_volumes 볼륨 목록
읽기 전용
앱의 볼륨(서버를 다시 시작하거나 새로 배포해도 남는 디스크)과 백업, 요금제가 허용하는 합계(max_gb)와 지금 쓰는 양(used_gb), 앱마다 서버가 듣는 포트(apps[].listens_on)를 돌려줘요. 볼륨은 프로덕션 서버에만 붙어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/volumes |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_volume 볼륨 만들기
추가만 함
앱의 프로덕션 서버 mount_path에 볼륨을 붙여요(WordPress는 /var/www/html). 크기가 상한이고 /etc·/usr 같은 시스템 경로는 안 돼요. 1분 안에 서버가 다시 시작해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/volumes |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
app | string | 예 | list_apps의 name. |
mount_path | string | 예 | 컨테이너 안의 절대 경로. 예: /var/www/html |
size_gb | integer, min 1, max 500 | 아니요 | 크기(GB). 1부터 500까지, 기본 1. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"app": {
"type": "string",
"description": "list_apps의 name."
},
"mount_path": {
"type": "string",
"description": "컨테이너 안의 절대 경로. 예: /var/www/html"
},
"size_gb": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"description": "크기(GB). 1부터 500까지, 기본 1."
}
},
"required": [
"ref",
"app",
"mount_path"
],
"additionalProperties": false
}resize_volume 볼륨 늘리기
파괴적
볼륨을 더 크게 해요. 서버를 멈추지 않고 늘리고, 줄일 수는 없어요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/volumes/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_volumes의 볼륨 id. |
size_gb | integer, min 1, max 500 | 예 | 크기(GB). 1부터 500까지. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_volumes의 볼륨 id."
},
"size_gb": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"description": "크기(GB). 1부터 500까지."
}
},
"required": [
"ref",
"id",
"size_gb"
],
"additionalProperties": false
}delete_volume 볼륨 지우기
파괴적
볼륨과 그 파일, 백업을 모두 지우고 프로덕션 서버를 볼륨 없이 다시 시작해요. 되돌릴 수 없으니 사용자가 요청할 때만 쓰고 confirm에 mount_path를 넣으세요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/volumes/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_volumes의 볼륨 id. |
confirm | string | 예 | 볼륨 경로. list_volumes의 mount_path와 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_volumes의 볼륨 id."
},
"confirm": {
"type": "string",
"description": "볼륨 경로. list_volumes의 mount_path와 정확히 같아야 해요."
}
},
"required": [
"ref",
"id",
"confirm"
],
"additionalProperties": false
}create_volume_backup 볼륨 백업
추가만 함
볼륨의 파일을 지금 묶어 30일 동안 보관해요. 몇 분 안에 끝나고, list_volumes의 backups에 나타나요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/volumes/{id}/backups |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_volumes의 볼륨 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_volumes의 볼륨 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}restore_volume_backup 볼륨 복원
파괴적
볼륨의 지금 파일을 백업의 파일로 바꿔요. 백업 뒤에 바뀐 파일은 사라지지만, 바꾸기 전에 지금 파일을 7일 동안 백업해 두니 그 백업으로 되돌릴 수 있어요. 사용자가 요청했을 때만 쓰고, 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/volumes/{id}/restore |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_volumes의 볼륨 id. |
backup_id | string | 예 | list_volumes의 backups[].id. status가 ready인 것. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_volumes의 볼륨 id."
},
"backup_id": {
"type": "string",
"description": "list_volumes의 backups[].id. status가 ready인 것."
}
},
"required": [
"ref",
"id",
"backup_id"
],
"additionalProperties": false
}함수
| 이름 | 설명 |
|---|---|
list_functions | 함수 목록 |
get_function | 함수 코드 보기 |
deploy_function | 함수 배포 |
set_function_limits | 함수 시간 한도 |
remove_function | 함수 삭제 |
list_function_secrets | 함수 시크릿 목록 |
set_function_secrets | 함수 시크릿 저장 |
copy_function_secrets | 함수 시크릿 복사 |
delete_function_secret | 함수 시크릿 삭제 |
set_function_egress | 함수의 외부 요청 |
list_functions 함수 목록
읽기 전용
배포한 함수와 각 호출 주소, 공개 여부를 봐요. egress는 외부 요청이 켜졌는지, outbound_requests_per_minute은 함수·pg_net·HTTP 작업이 함께 쓰는 분당 외부 요청 한도예요(자기 API 호출은 세지 않아요).
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/functions |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_function 함수 코드 보기
읽기 전용
배포된 함수의 코드와 버전을 봐요. 고치기 전에 먼저 읽으세요. deploy_function이 "building"으로 답했으면 build.status(building·deployed·failed)와 build.error를 확인해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/functions/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}deploy_function 함수 배포
파괴적
함수 하나를 배포해요. 같은 이름이 있으면 통째로 바꾸고 다음 호출부터 새 코드가 돌아요. 코드는 TypeScript 파일 하나로, export default로 (request, { sql }) => 응답 을 내보내요. request에는 method, headers, claims(role: anon·authenticated·service_role, 키 없이 부른 공개 함수는 null), text(), json()이 있어요. sql(text, values)은 service_role 권한으로 한 문장을 실행해 행 배열을 돌려줘요. 응답은 객체(JSON), 문자열, { status, headers, body } 중 하나예요. npm 패키지는 dependencies({"zod":"^3.23.8"})나 package_json(문자열)으로 보내요. 배포할 때 설치해 ESM 파일 하나로 묶어요(5MB까지, 설치 스크립트 실행 안 함, 네이티브 모듈 불가). 40초 안에 안 끝나면 status "building"으로 답하고 이어서 배포해요: get_function으로 build.status가 deployed나 failed가 될 때까지 확인하세요. 여러 파일은 files({"lib/util.ts": "..."})로 보내고 상대 경로로 import해요. 폴더째 보내려면 source를 비우고 files에 index.ts까지 넣으세요. ../_shared/cors.ts 같은 옆 폴더 파일은 files에 "../_shared/cors.ts"로 넣어요. deno.json·import_map.json의 imports와 npm:·jsr:·URL import(npm:zod@3, https://esm.sh/…, https://deno.land/[email protected]/http/server.ts 등)도 돼요. 모두 배포할 때 받아 묶고(주소와 SHA-256은 get_function의 remote_imports, deno.lock이 있으면 맞아야 해요) 실행 중에는 받지 않아요. 호출 하나는 150초까지예요(set_function_limits로 바꿔요). 네트워크는 기본으로 꺼져 있어요(set_function_egress). 호출한 사람의 Authorization 헤더가 그대로 들어오니 createClient(url, anonKey, { global: { headers: { Authorization: req.headers.get('Authorization') } } })가 그 사람으로 동작해요. 번들된 함수를 고칠 때는 get_function의 package_json·files를 그대로 다시 보내세요. 빼면 파일 하나짜리가 돼요. 프로덕션 환경 변수가 process.env로 들어와요. 소유자·관리자만 배포할 수 있어요. 기본은 비공개라 이 프로젝트의 키(공개 키, 사용자 토큰, 비밀 키)가 있어야 해요(Supabase verify_jwt와 같아요). 로그인한 사용자만 받으려면 request.claims.role을 확인하세요. public이 true면 키 없이 누구나 부르니 결제사 웹훅 같은 경우에만 쓰세요. 호출: POST https://<ref>.<zone>/functions/v1/<name>, 헤더 Authorization: Bearer <공개 키, 사용자 토큰 또는 비밀 키>.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/functions/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 영문 소문자로 시작, 소문자·숫자·하이픈. 호출 주소의 끝이 돼요. |
source | string | 아니요 | 함수 코드 전체 (8MB까지). files가 있으면 entry 파일로 저장돼요. files에 entry가 있으면 생략해요. |
public | boolean | 아니요 | 생략하면 기존 값을 유지하고, 새 함수는 비공개예요. |
dependencies | object | 아니요 | 쓸 npm 패키지와 버전. 예: {"zod": "^3.23.8"}. package_json의 dependencies에 합쳐져요. |
package_json | string | 아니요 | package.json 전체 (선택). 있으면 설치 후 하나의 파일로 번들해요. |
package_lock | string | 아니요 | package-lock.json (선택). 있으면 npm ci로 정확히 그 버전을 설치해요. |
files | object | 아니요 | source 옆에 둘 다른 파일들, 상대 경로 → 내용 (최대 200개, 합쳐 8MB). 함수 폴더 옆 폴더는 "../_shared/cors.ts"처럼 써요. |
entry | string | 아니요 | source를 저장할 파일 이름. 기본 index.ts. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "영문 소문자로 시작, 소문자·숫자·하이픈. 호출 주소의 끝이 돼요."
},
"source": {
"type": "string",
"description": "함수 코드 전체 (8MB까지). files가 있으면 entry 파일로 저장돼요. files에 entry가 있으면 생략해요."
},
"public": {
"type": "boolean",
"description": "생략하면 기존 값을 유지하고, 새 함수는 비공개예요."
},
"dependencies": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "쓸 npm 패키지와 버전. 예: {\"zod\": \"^3.23.8\"}. package_json의 dependencies에 합쳐져요."
},
"package_json": {
"type": "string",
"description": "package.json 전체 (선택). 있으면 설치 후 하나의 파일로 번들해요."
},
"package_lock": {
"type": "string",
"description": "package-lock.json (선택). 있으면 npm ci로 정확히 그 버전을 설치해요."
},
"files": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "source 옆에 둘 다른 파일들, 상대 경로 → 내용 (최대 200개, 합쳐 8MB). 함수 폴더 옆 폴더는 \"../_shared/cors.ts\"처럼 써요."
},
"entry": {
"type": "string",
"description": "source를 저장할 파일 이름. 기본 index.ts."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}set_function_limits 함수 시간 한도
파괴적
호출 하나(timeout_seconds)와 SQL 한 문장(sql_timeout_seconds)의 시간 한도를 초로 정해요. 기본 150초·8초, 최대는 get_function의 timeout_cap_seconds예요. null은 기본값, 빼면 그대로예요. 넘긴 호출은 504로 끊겨요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/functions/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | |
timeout_seconds | string, min 1 | 아니요 | 한 번 호출에 쓸 수 있는 초. null이면 기본값(150초). |
sql_timeout_seconds | string, min 1 | 아니요 | SQL 한 문장에 쓸 수 있는 초. null이면 기본값(8초). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
},
"timeout_seconds": {
"type": [
"integer",
"null"
],
"minimum": 1,
"description": "한 번 호출에 쓸 수 있는 초. null이면 기본값(150초)."
},
"sql_timeout_seconds": {
"type": [
"integer",
"null"
],
"minimum": 1,
"description": "SQL 한 문장에 쓸 수 있는 초. null이면 기본값(8초)."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}remove_function 함수 삭제
파괴적
함수를 지워요. 그 주소는 404가 되고, 이 함수를 부르는 예약 작업은 실패해요. 되돌릴 수 없으니 사용자가 분명히 요청했을 때만 쓰고, confirm에 함수 이름을 그대로 넣어야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/functions/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | |
confirm | string | 예 | 함수 이름. name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
},
"confirm": {
"type": "string",
"description": "함수 이름. name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"name",
"confirm"
],
"additionalProperties": false
}list_function_secrets 함수 시크릿 목록
읽기 전용
함수만 보는 시크릿의 이름과 바꾼 때예요. 값은 어떤 도구로도 다시 읽을 수 없어요. readable이 false면 값이 열리지 않아 함수에 들어가지 않으니 다시 저장하세요. 소유자·관리자만 볼 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/function-secrets |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_function_secrets 함수 시크릿 저장
파괴적
함수만 읽는 시크릿을 저장해요(웹훅 서명 키 등). 빌드에는 안 들어가고 같은 이름의 환경 변수보다 먼저 쓰여요. 다음 호출부터 process.env로 읽어요. 하나라도 틀리면 아무것도 저장하지 않고, 저장한 값은 다시 못 봐요. SUPABASE_·BLACKWALL로 시작하는 이름과 NODE_ENV·HOME·PATH·NODE_OPTIONS·TZ는 못 써요. 프로젝트에 100개, 값 하나 32KB까지예요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/function-secrets |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
secrets | object | 아니요 | 이름과 값. 예: {"STRIPE_WEBHOOK_SECRET": "whsec_…"}. 값은 다시 보여 주지 않아요. |
dotenv | string | 아니요 | .env 파일 내용을 통째로. 주석과 빈 줄은 건너뛰어요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"secrets": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "이름과 값. 예: {\"STRIPE_WEBHOOK_SECRET\": \"whsec_…\"}. 값은 다시 보여 주지 않아요."
},
"dotenv": {
"type": "string",
"description": ".env 파일 내용을 통째로. 주석과 빈 줄은 건너뛰어요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}copy_function_secrets 함수 시크릿 복사
파괴적
내 다른 프로젝트(from)에 있는 함수 시크릿을 이 프로젝트(ref)로 이름만 대서 복사해요. 값은 서버 안에서만 옮겨지고 답에는 이름만 와요. 같은 키를 다시 붙여 넣지 않아도 돼요. 이 프로젝트에 이미 있는 이름은 건너뛰고(skipped) overwrite: true면 바꿔요. from에 없는 이름은 missing으로 알려 주고 나머지는 복사해요. 한 번에 50개까지예요. 두 프로젝트 모두에서 소유자·관리자여야 해요(조직이 달라도 돼요).
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/function-secrets/copy |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
from | string | 예 | 복사해 올 프로젝트의 ref. list_projects로 확인해요. |
names | array<string>, min items 1, max items 50 | 예 | 복사할 시크릿 이름. from 프로젝트의 list_function_secrets에 있는 name. 예: ["ANTHROPIC_API_KEY"] |
overwrite | boolean | 아니요 | 이 프로젝트에 같은 이름이 있으면 바꿀지. 기본은 false(건너뜀). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"from": {
"type": "string",
"description": "복사해 올 프로젝트의 ref. list_projects로 확인해요."
},
"names": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 50,
"description": "복사할 시크릿 이름. from 프로젝트의 list_function_secrets에 있는 name. 예: [\"ANTHROPIC_API_KEY\"]"
},
"overwrite": {
"type": "boolean",
"description": "이 프로젝트에 같은 이름이 있으면 바꿀지. 기본은 false(건너뜀)."
}
},
"required": [
"ref",
"from",
"names"
],
"additionalProperties": false
}delete_function_secret 함수 시크릿 삭제
파괴적
함수 시크릿 하나를 지워요. 값은 되살릴 수 없고, 함수는 다음 호출부터 이 값 없이 실행돼요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/function-secrets/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | list_function_secrets의 name |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "list_function_secrets의 name"
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}set_function_egress 함수의 외부 요청
파괴적
함수 안에서 fetch()로 공개 HTTPS 주소를 부를 수 있게 하거나 막아요. 지금 상태는 list_functions의 egress예요. 30초 안에 적용돼요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | PUT /projects/{ref}/function-egress |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"enabled"
],
"additionalProperties": false
}도메인과 엣지
| 이름 | 설명 |
|---|---|
list_domains | 도메인 보기 |
add_domain | 도메인 연결 |
remove_domain | 도메인 연결 해제 |
set_domain_redirect | 도메인 리디렉트 |
get_edge | 방화벽·캐시 보기 |
set_edge | 방화벽 바꾸기 |
purge_edge_cache | 캐시 비우기 |
upload_certificate | 인증서 올리기 |
remove_certificate | 올린 인증서 삭제 |
list_domains 도메인 보기
읽기 전용
이 프로젝트에 연결한 도메인과 각각의 용도(site/api), 따르는 브랜치, 리디렉트 대상, 확인 상태(아직이면 넣어야 할 TXT 레코드), 인증서 상태를 봐요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/domains |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}add_domain 도메인 연결
추가만 함 외부로 나감
도메인을 연결해요. 받은 verification_record(TXT)를 DNS에 넣으면 몇 분 안에 확인돼요. target=api면 프로젝트 API로, branch를 주면 그 프리뷰로 답해요. *.example.com도 돼요. pair_www=true면 www도 연결해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/domains |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
hostname | string | 예 | 예: example.com, api.example.com, *.example.com |
target | string, site | api | 아니요 | |
branch | string | 아니요 | 사이트만. 비우면 프로덕션. |
pair_www | boolean | 아니요 | |
app | string | 아니요 | 앱 이름(list_apps의 name). 비우면 프로젝트의 사이트(project_site가 true인 앱). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"hostname": {
"type": "string",
"description": "예: example.com, api.example.com, *.example.com"
},
"target": {
"type": "string",
"enum": [
"site",
"api"
]
},
"branch": {
"type": "string",
"description": "사이트만. 비우면 프로덕션."
},
"pair_www": {
"type": "boolean"
},
"app": {
"type": "string",
"description": "앱 이름(list_apps의 name). 비우면 프로젝트의 사이트(project_site가 true인 앱)."
}
},
"required": [
"ref",
"hostname"
],
"additionalProperties": false
}remove_domain 도메인 연결 해제
파괴적
도메인 연결을 끊어요. 그 주소는 몇 초 안에 더 이상 답하지 않아요. 사용자가 분명히 요청했을 때만 쓰고, confirm에 도메인을 그대로 넣어야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/domains/{hostname} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
hostname | string | 예 | |
confirm | string | 예 | 도메인. hostname과 같아야 해요(대소문자는 상관없어요). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"hostname": {
"type": "string"
},
"confirm": {
"type": "string",
"description": "도메인. hostname과 같아야 해요(대소문자는 상관없어요)."
}
},
"required": [
"ref",
"hostname",
"confirm"
],
"additionalProperties": false
}set_domain_redirect 도메인 리디렉트
파괴적
이 도메인을 같은 프로젝트의 다른 도메인으로 넘기거나, to를 비워 다시 사이트를 열게 해요. to에 경로를 붙이면(example.com/vision) 방문한 경로가 그 뒤에 붙고 질의 문자열은 그대로 따라가요: vision.example.com/x?y=1 → example.com/vision/x?y=1, 첫 화면은 example.com/vision. to의 도메인은 이 프로젝트에 연결한, 리디렉트가 아닌 도메인이어야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/domains/{hostname}/redirect |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
hostname | string | 예 | 넘길 도메인. |
to | string | 아니요 | 도메인 또는 도메인/경로(예: example.com/vision). 비우면 리디렉트를 꺼요. |
status | integer, 308 | 307 | 301 | 302 | 아니요 | 응답 코드. 기본 308(영구, 메서드 유지). 빼면 지금 값을 그대로 둬요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"hostname": {
"type": "string",
"description": "넘길 도메인."
},
"to": {
"type": "string",
"description": "도메인 또는 도메인/경로(예: example.com/vision). 비우면 리디렉트를 꺼요."
},
"status": {
"type": "integer",
"enum": [
308,
307,
301,
302
],
"description": "응답 코드. 기본 308(영구, 메서드 유지). 빼면 지금 값을 그대로 둬요."
}
},
"required": [
"ref",
"hostname"
],
"additionalProperties": false
}get_edge 방화벽·캐시 보기
읽기 전용
이 프로젝트의 IP 차단·허용 목록, 주소 하나당 분당 요청 한도, 적용 범위, 마지막 캐시 비우기 시각을 봐요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/edge |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_edge 방화벽 바꾸기
파괴적
IP 차단(deny)·허용(allow, 비우면 모두 허용) 목록과 분당 요청 한도(10~100000, null이면 플랫폼 기본값), 적용 범위(all/site/api)를 바꿔요. 준 항목만 바뀌어요. 소유자·관리자만.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/edge |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
deny | array<string> | 아니요 | IP 또는 CIDR |
allow | array<string> | 아니요 | |
rate_per_minute | string | 아니요 | |
scope | string, all | site | api | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"deny": {
"type": "array",
"items": {
"type": "string"
},
"description": "IP 또는 CIDR"
},
"allow": {
"type": "array",
"items": {
"type": "string"
}
},
"rate_per_minute": {
"type": [
"integer",
"null"
]
},
"scope": {
"type": "string",
"enum": [
"all",
"site",
"api"
]
}
},
"required": [
"ref"
],
"additionalProperties": false
}purge_edge_cache 캐시 비우기
파괴적
서버 배포가 s-maxage로 공유를 허락해 엣지에 저장된 응답을 모두 버려요. 다음 요청부터 배포가 다시 답해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/edge/purge |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}upload_certificate 인증서 올리기
파괴적
연결한 도메인에 직접 가진 TLS 인증서를 써요. certificate는 PEM 체인(서버 인증서가 먼저), key는 PEM 개인 키. 도메인 이름이 인증서에 들어 있어야 해요. 1분 안에 적용돼요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/domains/{hostname}/certificate |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
hostname | string | 예 | |
certificate | string | 예 | |
key | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"hostname": {
"type": "string"
},
"certificate": {
"type": "string"
},
"key": {
"type": "string"
}
},
"required": [
"ref",
"hostname",
"certificate",
"key"
],
"additionalProperties": false
}remove_certificate 올린 인증서 삭제
파괴적
올린 인증서를 지우고 자동 발급 인증서로 돌아가요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/domains/{hostname}/certificate |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
hostname | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"hostname": {
"type": "string"
}
},
"required": [
"ref",
"hostname"
],
"additionalProperties": false
}네트워크
| 이름 | 설명 |
|---|---|
get_network | 네트워크 주소 |
set_static_outbound_ip | 고정 아웃바운드 IP |
get_network 네트워크 주소
읽기 전용
요청을 받는 주소(inbound, 커스텀 도메인 A 레코드)와, 고정 아웃바운드 IP를 켰다면 나가는 고정 주소(outbound.addresses)예요. 켜지 않았으면 나가는 주소는 공유라 돌려주지 않으니 허용 목록에 넣지 마세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/network, GET /projects/{ref}/network/ips |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_static_outbound_ip 고정 아웃바운드 IP
파괴적
유료 부가 서비스인 고정 아웃바운드 IP를 켜거나 꺼요. 켜면 서버 배포, 함수 fetch(), 데이터베이스 웹훅이 고정 주소로 나가고 월 요금을 쓴 날만큼 청구해요. Pro 이상, 소유자·관리자·결제 담당자만 돼요. 요금이 드니 사용자가 요청할 때만 쓰세요. 가격·상태는 get_network에 있어요. outcome이 provisioning이면 주소를 만들고 있고(보통 1시간 안) 그 전엔 요금이 없어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | billing.manage 소유자·관리자·결제 담당 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/network/static-outbound-ip, DELETE /projects/{ref}/network/static-outbound-ip |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"enabled"
],
"additionalProperties": false
}예약 작업
| 이름 | 설명 |
|---|---|
list_jobs | 예약 작업 목록 |
save_job | 예약 작업 만들기·바꾸기 |
set_job_enabled | 예약 작업 켜기·끄기 |
run_job | 예약 작업 지금 실행 |
list_job_runs | 예약 작업 실행 기록 |
remove_job | 예약 작업 삭제 |
list_jobs 예약 작업 목록
읽기 전용
예약 작업(cron)과 일정, 다음 실행 시각, 마지막 결과를 봐요. SQL의 cron.schedule로 만든 작업은 source가 sql이에요. limit은 요금제의 작업 수 한도예요. 시각은 모두 UTC예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/jobs |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}save_job 예약 작업 만들기·바꾸기
파괴적
정해진 일정마다 함수를 부르거나 SQL 한 문장을 실행해요. 같은 이름이면 그 작업을 바꿔요. schedule은 다섯 칸 cron(분 시 일 월 요일), UTC 기준이에요(한국 자정 = "0 15 * * *"). kind가 function이면 target은 함수 이름(본문 {}로 POST), sql이면 서비스 역할로 실행할 SQL이에요. 외부 URL은 못 불러요: 함수나 SQL의 net.http_post를 쓰세요. SQL은 timeout_seconds(기본 120초) 안에 끝나야 해요(statement_timeout을 늘리면 그만큼). 최대는 Free 300초, Pro·Enterprise 3600초예요. SQL의 cron.schedule로 만든 작업도 source=sql로 나와요. 프로젝트당 작업 수 한도는 list_jobs의 limit이에요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/jobs/{job} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | |
schedule | string | 예 | 예: "*/5 * * * *" (5분마다), "0 15 * * *" (한국 자정). |
kind | string, function | sql | 예 | |
target | string | 예 | |
enabled | boolean | 아니요 | |
timeout_seconds | number | 아니요 | SQL 작업이 실행될 수 있는 최대 시간(초). 기본 120, 최대는 요금제마다(Free 300, Pro·Enterprise 3600). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
},
"schedule": {
"type": "string",
"description": "예: \"*/5 * * * *\" (5분마다), \"0 15 * * *\" (한국 자정)."
},
"kind": {
"type": "string",
"enum": [
"function",
"sql"
]
},
"target": {
"type": "string"
},
"enabled": {
"type": "boolean"
},
"timeout_seconds": {
"type": "number",
"description": "SQL 작업이 실행될 수 있는 최대 시간(초). 기본 120, 최대는 요금제마다(Free 300, Pro·Enterprise 3600)."
}
},
"required": [
"ref",
"name",
"schedule",
"kind",
"target"
],
"additionalProperties": false
}set_job_enabled 예약 작업 켜기·끄기
파괴적
예약 작업을 끄거나 다시 켜요. 다시 켜면 놓친 실행을 몰아서 하지 않고 다음 일정부터 돌아요. job은 id나 이름이에요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/jobs/{job} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
job | string | 예 | |
enabled | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"job": {
"type": "string"
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"job",
"enabled"
],
"additionalProperties": false
}run_job 예약 작업 지금 실행
파괴적
일정을 기다리지 않고 1분 안에 한 번 실행해요. 결과는 list_job_runs로 봐요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/jobs/{job}/run |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
job | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"job": {
"type": "string"
}
},
"required": [
"ref",
"job"
],
"additionalProperties": false
}list_job_runs 예약 작업 실행 기록
읽기 전용
예약 작업의 최근 실행과 결과, 실패했다면 그 오류를 최신순으로 봐요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/jobs/{job}/runs |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
job | string | 예 | |
limit | number | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"job": {
"type": "string"
},
"limit": {
"type": "number"
}
},
"required": [
"ref",
"job"
],
"additionalProperties": false
}remove_job 예약 작업 삭제
파괴적
예약 작업 하나와 그 실행 기록을 지워요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/jobs/{job} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
job | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"job": {
"type": "string"
}
},
"required": [
"ref",
"job"
],
"additionalProperties": false
}데이터베이스 웹훅
| 이름 | 설명 |
|---|---|
list_db_webhooks | 데이터베이스 웹훅 목록 |
create_db_webhook | 데이터베이스 웹훅 만들기 |
set_db_webhook_enabled | 데이터베이스 웹훅 켜기·끄기 |
list_db_webhook_deliveries | 데이터베이스 웹훅 전달 기록 |
remove_db_webhook | 데이터베이스 웹훅 삭제 |
list_db_webhooks 데이터베이스 웹훅 목록
읽기 전용
표의 변경을 알리는 웹훅과 최근 전달 결과를 봐요. attached가 false면 표가 지워져 멈춘 것이에요. 서명 키(signing_secret)는 만들 때(create_db_webhook) 한 번만 보여주고, 목록에는 signing_secret_set과 끝 네 글자(signing_secret_last4)만 실어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/webhooks |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_db_webhook 데이터베이스 웹훅 만들기
추가만 함 외부로 나감
표에 줄이 추가·수정·삭제되면 커밋 후 몇 초 안에 POST로 알려요. kind가 url이면 target은 공개 https 주소(사설 주소 불가, 리다이렉트 안 따라감), function이면 이 프로젝트의 함수 이름이에요. 본문: { type: "INSERT"|"UPDATE"|"DELETE", table, schema: "public", record, old_record, hook, delivery, occurred_at }. 서명 헤더: x-blackwall-signature: t=<초>,v1=<HMAC-SHA256(signing_secret, "<t>.<본문>") 16진수>. signing_secret은 이 응답에만 실려요. 다시 볼 수 없으니 받는 쪽에 바로 저장하세요. 실패(2xx 아님, 10초 초과)하면 10초·1분·5분·30분 뒤 다시 보내고 다섯 번째에 버려요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/webhooks |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | |
table | string | 예 | list_tables의 표 이름. |
events | array<string>, insert | update | delete | 예 | |
kind | string, url | function | 예 | |
target | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
},
"table": {
"type": "string",
"description": "list_tables의 표 이름."
},
"events": {
"type": "array",
"items": {
"type": "string",
"enum": [
"insert",
"update",
"delete"
]
}
},
"kind": {
"type": "string",
"enum": [
"url",
"function"
]
},
"target": {
"type": "string"
}
},
"required": [
"ref",
"name",
"table",
"events",
"kind",
"target"
],
"additionalProperties": false
}set_db_webhook_enabled 데이터베이스 웹훅 켜기·끄기
파괴적
웹훅을 끄거나 켜요. 꺼진 동안의 변경은 나중에도 보내지 않아요. webhook은 id나 이름이에요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/webhooks/{webhook} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
webhook | string | 예 | |
enabled | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"webhook": {
"type": "string"
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"webhook",
"enabled"
],
"additionalProperties": false
}list_db_webhook_deliveries 데이터베이스 웹훅 전달 기록
읽기 전용
웹훅의 최근 전달과 응답 상태, 실패 이유를 최신순으로 봐요. 7일간 보관해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/webhooks/{webhook}/deliveries |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
webhook | string | 예 | |
limit | number | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"webhook": {
"type": "string"
},
"limit": {
"type": "number"
}
},
"required": [
"ref",
"webhook"
],
"additionalProperties": false
}remove_db_webhook 데이터베이스 웹훅 삭제
파괴적
웹훅과 그 전달 기록, 아직 보내지 못한 변경을 지워요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/webhooks/{webhook} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
webhook | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"webhook": {
"type": "string"
}
},
"required": [
"ref",
"webhook"
],
"additionalProperties": false
}백업과 복원
| 이름 | 설명 |
|---|---|
list_backups | 백업 목록 |
create_backup | 지금 백업 |
restore_backup | 백업으로 복원 |
list_backups 백업 목록
읽기 전용
프로젝트 백업(매일 밤 프로젝트 리전 시각 03:00~05:00에 자동, 직접 만든 것, 복원 직전 것)과 복원 기록을 봐요. 보관 기간은 retention_days예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/backups |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_backup 지금 백업
추가만 함
표·가입자·파일을 지금 백업해요. 큰 변경(마이그레이션, 대량 삭제) 전에 만드세요. 7일 보관돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/backups |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}restore_backup 백업으로 복원
파괴적
표·가입자·파일을 백업 시점으로 되돌려요. backup_id 대신 at(ISO 시각)을 주면 초 단위로 되돌려요(Pro 이상, list_backups의 point_in_time 안. 파일은 파일 버킷 서버에서만, 지난 14일 안에 지운 것까지). 그 뒤 변경은 모두 사라지니 사용자가 요청할 때만 쓰세요. 직전 상태를 백업하니 undo_backup_id로 되돌릴 수 있어요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/backups/{backup_id}/restore, POST /projects/{ref}/backups/restore-to-time |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
backup_id | string | 아니요 | |
at | string | 아니요 | 예: 2026-10-01T14:59:00+09:00 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"backup_id": {
"type": "string"
},
"at": {
"type": "string",
"description": "예: 2026-10-01T14:59:00+09:00"
}
},
"required": [
"ref"
],
"additionalProperties": false
}로그와 관측
| 이름 | 설명 |
|---|---|
get_logs | 로그 보기 |
list_log_drains | 로그 내보내기 목록 |
create_log_drain | 로그 내보내기 추가 |
set_log_drain_enabled | 로그 내보내기 끄기·켜기 |
remove_log_drain | 로그 내보내기 삭제 |
get_metrics | 지표 |
get_audit_log | 감사 기록 |
get_logs 로그 보기
읽기 전용
로그를 최신순으로 봐요: 사이트·API·인증·함수 요청(메서드, 경로, 상태, 시간)과 서버·함수 출력. 500이 나면 level: error로 먼저 보세요. 다음 쪽은 next_before를 before로 넘겨요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/logs |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
source | string, site | server | api | auth | functions | build | 아니요 | |
level | string, warn | error | 아니요 | warn은 경고와 오류, error는 오류만이에요. |
search | string | 아니요 | 내용에 들어 있는 글자. 대소문자는 가리지 않아요. |
before | string | 아니요 | 이 시각보다 오래된 줄만. 이전 응답의 next_before. |
deployment_id | string | 아니요 | |
limit | integer, min 1, max 500 | 아니요 | 기본 100. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"source": {
"type": "string",
"enum": [
"site",
"server",
"api",
"auth",
"functions",
"build"
]
},
"level": {
"type": "string",
"enum": [
"warn",
"error"
],
"description": "warn은 경고와 오류, error는 오류만이에요."
},
"search": {
"type": "string",
"description": "내용에 들어 있는 글자. 대소문자는 가리지 않아요."
},
"before": {
"type": "string",
"description": "이 시각보다 오래된 줄만. 이전 응답의 next_before."
},
"deployment_id": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"description": "기본 100."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_log_drains 로그 내보내기 목록
읽기 전용
로그를 보내는 곳(https 또는 datadog), 보내는 출처, 마지막 전송과 오류. 서명 키(signing_secret)는 만들 때(create_log_drain) 한 번만 보여주고, 목록에는 signing_secret_set과 소유자·관리자에게 끝 네 글자(signing_secret_last4)만 실어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/log-drains |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_log_drain 로그 내보내기 추가
추가만 함 외부로 나감
이 프로젝트의 로그를 외부로 보내요. 만든 뒤에 쌓이는 로그부터 보내요. kind=https는 서명한 JSON을 POST하고, kind=datadog는 secret에 API 키가 필요해요. https 드레인의 signing_secret은 이 응답에만 실리니 받는 쪽에 바로 저장하세요. 프로젝트마다 5개까지. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/log-drains |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | |
kind | string, https | datadog | 예 | |
url | string | 예 | 공개된 https 주소. |
secret | string | 아니요 | Datadog API 키, 또는 https로 보낼 때 Authorization 헤더에 넣을 값. |
sources | array<string>, site | server | api | auth | functions | build | 아니요 | 비우면 전부. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"https",
"datadog"
]
},
"url": {
"type": "string",
"description": "공개된 https 주소."
},
"secret": {
"type": "string",
"description": "Datadog API 키, 또는 https로 보낼 때 Authorization 헤더에 넣을 값."
},
"sources": {
"type": "array",
"items": {
"type": "string",
"enum": [
"site",
"server",
"api",
"auth",
"functions",
"build"
]
},
"description": "비우면 전부."
}
},
"required": [
"ref",
"name",
"kind",
"url"
],
"additionalProperties": false
}set_log_drain_enabled 로그 내보내기 끄기·켜기
파괴적
설정은 두고 보내기만 멈추거나 다시 시작해요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/log-drains/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | |
enabled | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string"
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"id",
"enabled"
],
"additionalProperties": false
}remove_log_drain 로그 내보내기 삭제
파괴적
로그 내보내기를 지워요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/log-drains/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string"
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}get_metrics 지표
읽기 전용
요청 수·실패 수·지연(p50/p95/p99)을 표면별·시간대별로, 그리고 데이터베이스 크기·연결·캐시 적중률을 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/metrics |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
range | string, 1h | 24h | 7d | 아니요 | 비우면 24h. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"range": {
"type": "string",
"enum": [
"1h",
"24h",
"7d"
],
"description": "비우면 24h."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_audit_log 감사 기록
읽기 전용
tab=activity는 누가 무엇을 바꿨는지, tab=access는 누가 개인정보에 접근했는지예요. 최신순 200개씩, has_more면 offset을 늘려요. from·to는 YYYY-MM-DD(한국 날짜). 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | audit.read 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/audit |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
tab | string, activity | access | 아니요 | |
from | string | 아니요 | |
to | string | 아니요 | |
actor | string | 아니요 | 이메일 일부. |
action | string | 아니요 | 이 말로 시작하는 동작. 예: member. |
limit | integer, min 1, max 200 | 아니요 | |
offset | integer, min 0 | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"tab": {
"type": "string",
"enum": [
"activity",
"access"
]
},
"from": {
"type": "string"
},
"to": {
"type": "string"
},
"actor": {
"type": "string",
"description": "이메일 일부."
},
"action": {
"type": "string",
"description": "이 말로 시작하는 동작. 예: member."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"type": "integer",
"minimum": 0
}
},
"required": [
"ref"
],
"additionalProperties": false
}팀과 알림
| 이름 | 설명 |
|---|---|
list_team | 팀 구성원 |
invite_member | 구성원 초대 |
cancel_invitation | 초대 취소 |
set_member_role | 구성원 역할 바꾸기 |
remove_member | 구성원 내보내기 |
set_mfa_required | 2단계 인증 요구 |
list_channels | 알림 채널 목록 |
create_channel | 알림 채널 추가 |
test_channel | 알림 채널 시험 |
set_channel_enabled | 알림 채널 끄기·켜기 |
remove_channel | 알림 채널 삭제 |
list_team 팀 구성원
읽기 전용
이 프로젝트를 가진 조직의 구성원과 역할, 2단계 인증 여부, 아직 수락하지 않은 초대.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/team |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}invite_member 구성원 초대
추가만 함 외부로 나감
이메일로 초대 링크를 보내요. 받은 사람이 링크를 열어야 참여해요. 이미 구성원인 주소는 역할만 바뀌어요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | team.manage 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/team/invitations |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
email | string | 예 | |
role | string, admin | developer | billing | viewer | 아니요 | 비우면 developer. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"email": {
"type": "string"
},
"role": {
"type": "string",
"enum": [
"admin",
"developer",
"billing",
"viewer"
],
"description": "비우면 developer."
}
},
"required": [
"ref",
"email"
],
"additionalProperties": false
}cancel_invitation 초대 취소
파괴적
보낸 초대를 취소해요. 그 링크는 바로 열리지 않게 돼요. id는 list_team의 invitations에 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | team.manage 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/team/invitations/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string"
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}set_member_role 구성원 역할 바꾸기
파괴적
이미 구성원인 사람의 역할을 바꿔요. 소유자의 역할은 바꿀 수 없어요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | team.manage 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | PATCH /projects/{ref}/team/members/{email} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
email | string | 예 | |
role | string, admin | developer | billing | viewer | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"email": {
"type": "string"
},
"role": {
"type": "string",
"enum": [
"admin",
"developer",
"billing",
"viewer"
]
}
},
"required": [
"ref",
"email",
"role"
],
"additionalProperties": false
}remove_member 구성원 내보내기
파괴적
조직에서 내보내요. 소유자는 내보낼 수 없어요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | team.manage 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/team/members/{email} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
email | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"email": {
"type": "string"
}
},
"required": [
"ref",
"email"
],
"additionalProperties": false
}set_mfa_required 2단계 인증 요구
파괴적
조직의 모든 구성원에게 2단계 인증을 요구하거나 그만둬요. 켜려면 이 토큰의 주인이 먼저 2단계 인증을 켜야 해요. 켜지 않은 구성원은 켤 때까지 이 조직을 열 수 없고 응답의 without_mfa에 나와요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | team.manage 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | PUT /projects/{ref}/team/mfa |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
required | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"required": {
"type": "boolean"
}
},
"required": [
"ref",
"required"
],
"additionalProperties": false
}list_channels 알림 채널 목록
읽기 전용
배포·도메인·사용량·결제 소식을 받는 채널(Slack·카카오워크·웹훅)과 마지막 전송 결과예요(조직 단위). 웹훅 채널의 서명 키(signing_secret)는 만들 때(create_channel) 한 번만 보여주고, 목록에는 signing_secret_set과 끝 네 글자(signing_secret_last4)만 실어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/channels |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_channel 알림 채널 추가
추가만 함 외부로 나감
Slack·카카오워크(웹훅 주소)·서명 웹훅·메일(emails에 1~10개)로 알림을 보내요. 메일은 확인 링크를 연 주소에만 보내요. notices를 비우면 모든 종류를 받아요. 웹훅 채널의 signing_secret은 이 응답에만 실리니 받는 쪽에 바로 저장하세요. 만든 뒤 test_channel로 확인하세요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | team.manage 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/channels |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
kind | string, slack | kakaowork | webhook | email | 예 | |
name | string | 예 | |
url | string | 아니요 | Slack·카카오워크·웹훅의 주소. 메일 채널에는 쓰지 않아요. |
emails | array<string>, max items 10 | 아니요 | 메일 채널의 받는 주소. 예: ["[email protected]"]. |
notices | array<string>, deployments | domains | usage | billing | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"kind": {
"type": "string",
"enum": [
"slack",
"kakaowork",
"webhook",
"email"
]
},
"name": {
"type": "string"
},
"url": {
"type": "string",
"description": "Slack·카카오워크·웹훅의 주소. 메일 채널에는 쓰지 않아요."
},
"emails": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"description": "메일 채널의 받는 주소. 예: [\"[email protected]\"]."
},
"notices": {
"type": "array",
"items": {
"type": "string",
"enum": [
"deployments",
"domains",
"usage",
"billing"
]
}
}
},
"required": [
"ref",
"kind",
"name"
],
"additionalProperties": false
}test_channel 알림 채널 시험
추가만 함 외부로 나감
그 채널 하나에만 시험 메시지를 보내요. 메일 채널이면 확인된 주소에만 보내고, 확인을 기다리는 주소에는 확인 메일을 다시 보내요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | team.manage 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/channels/{id}/test |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string"
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}set_channel_enabled 알림 채널 끄기·켜기
파괴적
설정은 두고 알림만 멈추거나 다시 받아요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | team.manage 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/channels/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | |
enabled | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string"
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"id",
"enabled"
],
"additionalProperties": false
}remove_channel 알림 채널 삭제
파괴적
알림 채널을 지워요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | team.manage 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/channels/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string"
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}요금과 사용량
| 이름 | 설명 |
|---|---|
usage | 사용량 |
get_billing | 청구서와 사용량 |
get_plan | 요금제 |
get_spend_controls | 지출 한도 |
set_spend_cap | 지출 상한 켜기·끄기 |
set_spend_limit | 월 지출 한도 |
usage 사용량
읽기 전용
표·줄·가입자·파일 수와 저장 용량, 이번 달 사용량, 그리고 분당 한도(limits.outbound_requests_per_minute: 함수·pg_net·HTTP 작업이 함께 쓰는 외부 요청 수, 자기 API 호출은 세지 않음)를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/usage |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_billing 청구서와 사용량
읽기 전용
한 달 청구서(항목별 사용량·포함량·금액)와 날짜별 사용량이에요. period를 비우면 이번 달(UTC). 금액은 currency의 가장 작은 단위예요(KRW는 원, USD는 센트). amount_minor·total_minor는 청구액, list_amount_minor·list_total_minor는 정가(Pro 기준)예요. included는 이번 달 실제로 쓴 요금제의 포함량(바꾼 날까지 날짜로 나눔), list_included는 Pro 포함량이에요. billing_exempt면 청구액이 0이에요. 카드·결제 내역은 콘솔에만 있어요. 소유자·관리자·결제 담당만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | billing.manage 소유자·관리자·결제 담당 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/billing |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
period | string | 아니요 | YYYY-MM |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"period": {
"type": "string",
"description": "YYYY-MM"
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_plan 요금제
읽기 전용
조직의 요금제, 예약된 변경, 고를 수 있는 요금제와 월 요금, 켜 둔 부가 서비스(addons)예요. 무료면 free에 한도와 Pro 전용 기능이 있어요. 요금제 변경은 콘솔에서만 돼요. 소유자·관리자·결제 담당만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | billing.manage 소유자·관리자·결제 담당 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/billing/plan |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_spend_controls 지출 한도
읽기 전용
지출 상한(spend cap: 켜면 포함량을 넘는 사용을 막고 초과 요금을 받지 않음), 월 초과 요금 한도와 알림 웹훅, 이번 달 사용량을 봐요. 소유자·관리자·결제 담당만 볼 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | billing.manage 소유자·관리자·결제 담당 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/billing/spend |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_spend_cap 지출 상한 켜기·끄기
파괴적
유료 요금제의 지출 상한을 켜고 꺼요. 켜면 포함량에서 멈춰 초과 요금이 없어요. 끄면 넘는 만큼 청구되니 끌 때 confirm에 프로젝트 이름(list_projects의 name)이 필요해요. 소유자·관리자·결제 담당만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | billing.manage 소유자·관리자·결제 담당 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | PUT /projects/{ref}/billing/spend-cap |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 예 | true면 켜요. |
confirm | string | 아니요 | 끌 때(enabled: false)만: 프로젝트 이름. list_projects의 name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "true면 켜요."
},
"confirm": {
"type": "string",
"description": "끌 때(enabled: false)만: 프로젝트 이름. list_projects의 name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"enabled"
],
"additionalProperties": false
}set_spend_limit 월 지출 한도
파괴적
지출 상한이 꺼졌을 때 한 달 초과 요금 한도(원 단위)와 알림 웹훅을 정해요. spend_limit_minor가 null이면 무제한, webhook_url을 빼면 그대로예요. 알림은 create_channel이 더 좋아요. 소유자·관리자·결제 담당만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | billing.manage 소유자·관리자·결제 담당 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | PUT /projects/{ref}/billing/spend-limit |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
spend_limit_minor | string, min 0 | 예 | 한도. null이면 없음. |
webhook_url | string | 아니요 | 알림을 받을 https 주소. 빈 문자열이면 지워요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"spend_limit_minor": {
"type": [
"integer",
"null"
],
"minimum": 0,
"description": "한도. null이면 없음."
},
"webhook_url": {
"type": [
"string",
"null"
],
"description": "알림을 받을 https 주소. 빈 문자열이면 지워요."
}
},
"required": [
"ref",
"spend_limit_minor"
],
"additionalProperties": false
}기타
list_s3_keys S3 접근 키 목록
읽기 전용
S3 엔드포인트(endpoint, region, force_path_style)와 TUS 이어 올리기 주소, 그리고 S3 접근 키의 이름·접근 키 ID·마지막 사용 시각·폐기 여부예요. 비밀 접근 키는 돌려주지 않아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/s3-keys |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_s3_key S3 접근 키 만들기
추가만 함
AWS SDK·aws CLI·rclone이 /storage/v1/s3에 쓸 접근 키를 만들어요. 접근 규칙을 무시하니 서버에만 두세요. 비밀 접근 키는 이 응답에서만 보여요. 소유자·관리자만, 프로젝트마다 20개까지예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/s3-keys |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string, min length 1, max length 60 | 예 | 어디에 쓰는 키인지. 예: 백업 서버 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "어디에 쓰는 키인지. 예: 백업 서버"
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}revoke_s3_key S3 접근 키 폐기
파괴적
S3 접근 키 하나를 폐기해요. 30초 안에 그 키로 서명한 요청이 거부돼요. 다른 키는 그대로예요. 되돌릴 수 없어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/s3-keys/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_s3_keys의 keys[].id |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_s3_keys의 keys[].id"
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}deploy_commit 커밋 지정 배포
파괴적 외부로 나감
저장소의 커밋 하나를 배포해요. 프로덕션 브랜치면 프로덕션, 아니면 프리뷰예요. 커밋은 40자리 전체 해시, app은 list_apps의 name이에요. 답에 주소와 보안 점검(advisors)이 와요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
app | string | 예 | |
branch | string | 예 | |
commit | string | 예 | 40자리 커밋 해시. |
wait | integer, min 0, max 120 | 아니요 | 빌드가 끝날(ready·error) 때까지 기다릴 초. 기본 0은 바로 답해요. 시간 안에 안 끝나면 still_running: true와 retry_after_seconds가 와요. MCP 클라이언트는 보통 60초쯤에 호출을 포기하니 45 정도가 안전해요. |
block_on_advisors | boolean | 아니요 | true면 get_advisors의 심각한 보안 문제(advisors.critical)가 하나라도 있을 때 프로덕션 배포를 하지 않고 거절해요. 기본 false: 배포하고 advisors에 개수와 상위 3개를 알려줘요. 프리뷰는 막지 않아요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"app": {
"type": "string"
},
"branch": {
"type": "string"
},
"commit": {
"type": "string",
"description": "40자리 커밋 해시."
},
"wait": {
"type": "integer",
"minimum": 0,
"maximum": 120,
"description": "빌드가 끝날(ready·error) 때까지 기다릴 초. 기본 0은 바로 답해요. 시간 안에 안 끝나면 still_running: true와 retry_after_seconds가 와요. MCP 클라이언트는 보통 60초쯤에 호출을 포기하니 45 정도가 안전해요."
},
"block_on_advisors": {
"type": "boolean",
"description": "true면 get_advisors의 심각한 보안 문제(advisors.critical)가 하나라도 있을 때 프로덕션 배포를 하지 않고 거절해요. 기본 false: 배포하고 advisors에 개수와 상위 3개를 알려줘요. 프리뷰는 막지 않아요."
}
},
"required": [
"ref",
"app",
"branch",
"commit"
],
"additionalProperties": false
}deploy_files 파일로 배포
파괴적
저장소 없이 파일을 보내 배포해요(Vercel 파일 배포와 같아요). files는 경로 → 텍스트, 바이너리는 files_base64에 base64로 넣고 합쳐 3MB까지예요. 더 크면 create_source_upload_url → deploy_source(50MB까지)를 쓰세요. push와 똑같이 빌드해요: package.json이 있으면 설치·빌드하고, index.html만 있으면 그대로 서비스해요. prebuilt가 true면 빌드 없이 그대로 서비스해요. target은 preview(기본)나 production(소유자·관리자만)이고, 프리뷰 주소는 branch(기본 preview)로 정해요. 앱이 없으면 site 앱이 생겨요. wait(초)를 주면 빌드가 끝날 때까지 기다려요. 아니면 get_deployment로 확인하세요. advisors.critical은 심각한 보안 문제 수예요(상위 3개는 advisors.top). block_on_advisors가 true면 그런 문제가 있을 때 프로덕션 배포를 거절해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
files | object | 아니요 | 경로 → 텍스트 내용. 예: {"index.html": "<h1>안녕</h1>"} |
files_base64 | object | 아니요 | 경로 → base64 내용 (바이너리 파일). |
target | string, preview | production | 아니요 | 기본 preview. |
prebuilt | boolean | 아니요 | true면 빌드하지 않고 그대로 서비스해요. |
app | string | 아니요 | 배포할 앱 (list_apps의 name). 앱이 하나면 생략해요. |
branch | string | 아니요 | 프리뷰의 이름. 프리뷰 주소가 돼요. 기본 preview. |
message | string | 아니요 | 배포 목록에 남길 메모 (선택). |
wait | integer, min 0, max 120 | 아니요 | 빌드가 끝날(ready·error) 때까지 기다릴 초. 기본 0은 바로 답해요. 시간 안에 안 끝나면 still_running: true와 retry_after_seconds가 와요. MCP 클라이언트는 보통 60초쯤에 호출을 포기하니 45 정도가 안전해요. |
block_on_advisors | boolean | 아니요 | true면 get_advisors의 심각한 보안 문제(advisors.critical)가 하나라도 있을 때 프로덕션 배포를 하지 않고 거절해요. 기본 false: 배포하고 advisors에 개수와 상위 3개를 알려줘요. 프리뷰는 막지 않아요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"files": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "경로 → 텍스트 내용. 예: {\"index.html\": \"<h1>안녕</h1>\"}"
},
"files_base64": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "경로 → base64 내용 (바이너리 파일)."
},
"target": {
"type": "string",
"enum": [
"preview",
"production"
],
"description": "기본 preview."
},
"prebuilt": {
"type": "boolean",
"description": "true면 빌드하지 않고 그대로 서비스해요."
},
"app": {
"type": "string",
"description": "배포할 앱 (list_apps의 name). 앱이 하나면 생략해요."
},
"branch": {
"type": "string",
"description": "프리뷰의 이름. 프리뷰 주소가 돼요. 기본 preview."
},
"message": {
"type": "string",
"description": "배포 목록에 남길 메모 (선택)."
},
"wait": {
"type": "integer",
"minimum": 0,
"maximum": 120,
"description": "빌드가 끝날(ready·error) 때까지 기다릴 초. 기본 0은 바로 답해요. 시간 안에 안 끝나면 still_running: true와 retry_after_seconds가 와요. MCP 클라이언트는 보통 60초쯤에 호출을 포기하니 45 정도가 안전해요."
},
"block_on_advisors": {
"type": "boolean",
"description": "true면 get_advisors의 심각한 보안 문제(advisors.critical)가 하나라도 있을 때 프로덕션 배포를 하지 않고 거절해요. 기본 false: 배포하고 advisors에 개수와 상위 3개를 알려줘요. 프리뷰는 막지 않아요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_function_public 함수 공개 여부
파괴적
다시 배포하지 않고 함수를 공개(키 없이 누구나 호출)하거나 비공개(이 프로젝트의 키가 있어야 호출: 공개 키·사용자 토큰·비밀 키)로 바꿔요. 다음 호출부터 적용돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | |
public | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string"
},
"public": {
"type": "boolean"
}
},
"required": [
"ref",
"name",
"public"
],
"additionalProperties": false
}add_sso_provider SAML SSO 추가
추가만 함 외부로 나감
IdP 메타데이터(https 주소나 XML)로 SAML IdP를 등록해요(HTTP-Redirect 로그인 주소와 서명 인증서 필요). domains의 이메일로 signInWithSSO를 부르면 이 IdP로 가요(도메인 하나에 IdP 하나). 새 IdP는 엔터프라이즈 요금제에서만 추가돼요(new_providers_allowed). 이미 등록한 IdP는 그대로 동작해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/{param0}/{param1}, PUT /projects/{ref}/{param0}/{param1}/{param2} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
metadata_url | string | 아니요 | https 주소. metadata_xml과 둘 중 하나. |
metadata_xml | string | 아니요 | |
domains | array<string> | 아니요 | 예: ["example.com"] |
attribute_mapping | object | 아니요 | GoTrue 형식: {"keys": {"email": {"name": "mail"}}} |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"metadata_url": {
"type": "string",
"description": "https 주소. metadata_xml과 둘 중 하나."
},
"metadata_xml": {
"type": "string"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "예: [\"example.com\"]"
},
"attribute_mapping": {
"type": "object",
"description": "GoTrue 형식: {\"keys\": {\"email\": {\"name\": \"mail\"}}}"
}
},
"required": [
"ref"
],
"additionalProperties": false
}update_sso_provider SAML SSO 바꾸기
파괴적 외부로 나감
IdP 하나의 도메인, 메타데이터(인증서를 바꿨을 때), 속성 매핑을 바꿔요. 준 것만 바뀌어요. domains를 주면 그 목록으로 통째로 바뀌어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_sso_providers의 id |
metadata_url | string | 아니요 | |
metadata_xml | string | 아니요 | |
domains | array<string> | 아니요 | |
attribute_mapping | object | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_sso_providers의 id"
},
"metadata_url": {
"type": "string"
},
"metadata_xml": {
"type": "string"
},
"domains": {
"type": "array",
"items": {
"type": "string"
}
},
"attribute_mapping": {
"type": "object"
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}get_auth_config 로그인 설정 전체 보기
읽기 전용
로그인 설정 전체를 Supabase auth config와 같은 소문자 키로 돌려줘요: 가입(disable_signup, mailer_autoconfirm 등), 이메일·비밀번호 규칙, 전화·문자(sms_*), SAML(saml_*), Web3, 소셜 제공자별 external_<제공자>_*. 비밀 값은 ••••abcd처럼 뒤 네 자리만 오고, 그대로 update_auth_config에 돌려주면 바뀌지 않아요. callback_url은 제공자 콘솔에 붙여 넣을 주소예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/config/auth |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}update_auth_config 로그인 설정 바꾸기
파괴적
준 키만 바꿔요(대문자 GoTrue 이름도 돼요). 콘솔 로그인 화면과 같은 규칙으로 확인해요: 켠 제공자는 필요한 값이 다 있어야 하고(예: external_google_client_id), Apple 시크릿은 7일 넘게 남은 ES256 JWT, 문자 내용엔 {{ .Code }}가 있어야 해요. 하나라도 틀리면 아무것도 저장하지 않고 키마다 이유를 줘요. 카카오 동의 항목은 external_kakao_scopes(쉼표로), 네이버는 external_naver_scopes, Google·GitHub 추가 스코프는 external_<제공자>_additional_scopes예요. 비밀 값을 빈 문자열로 주면 지워요. 소유자·관리자·개발자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/config/auth |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
config | object | 예 | 바꿀 키와 값. 예: {"external_google_enabled": true, "external_google_client_id": "web.apps.googleusercontent.com"} |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"config": {
"type": "object",
"description": "바꿀 키와 값. 예: {\"external_google_enabled\": true, \"external_google_client_id\": \"web.apps.googleusercontent.com\"}",
"additionalProperties": true
}
},
"required": [
"ref",
"config"
],
"additionalProperties": false
}list_custom_providers 사용자 정의 로그인 제공자 보기
읽기 전용
프로젝트가 직접 정의한 OAuth·OIDC 제공자(custom:<ID>)와 요금제 한도(max_providers), 스위치(enabled)를 봐요. 앱에서는 signInWithOAuth({ provider: "custom:<ID>" })로 불러요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/config/auth/custom-providers |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_custom_provider 사용자 정의 로그인 제공자 만들기
추가만 함
OAuth·OIDC 제공자(custom:<ID>)를 만들고 켜요(set_auth_provider와 같은 저장소). oidc는 issuer만 주면 {issuer}/.well-known/openid-configuration에서 주소와 jwks_uri를 읽고, id_token의 서명·issuer·대상·만료·nonce를 확인해요. oauth2는 issuer나 authorization_url·token_url이 필요하고, 빈 주소는 {issuer}/oauth/authorize, /oauth/token, /oauth/userinfo예요. claim_map은 id·email·email_verified·name·avatar·phone이 응답의 어느 필드인지(점 경로)예요. PKCE는 기본으로 켜져요. 요금제 한도를 넘으면 거부돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/config/auth/custom-providers |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
identifier | string | 예 | 영문 소문자·숫자·하이픈. custom: 은 붙여도 되고 안 붙여도 돼요. |
name | string | 예 | |
provider_type | string, oidc | oauth2 | 예 | |
issuer | string | 아니요 | |
discovery_url | string | 아니요 | |
authorization_url | string | 아니요 | |
token_url | string | 아니요 | |
userinfo_url | string | 아니요 | |
jwks_uri | string | 아니요 | |
client_id | string | 예 | |
client_secret | string | 예 | |
scopes | array<string> | 아니요 | |
email_optional | boolean | 아니요 | |
claim_map | object | 아니요 | |
token_auth | string, body | basic | 아니요 | |
pkce | boolean | 아니요 | |
enabled | boolean | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"identifier": {
"type": "string",
"description": "영문 소문자·숫자·하이픈. custom: 은 붙여도 되고 안 붙여도 돼요."
},
"name": {
"type": "string"
},
"provider_type": {
"type": "string",
"enum": [
"oidc",
"oauth2"
]
},
"issuer": {
"type": "string"
},
"discovery_url": {
"type": "string"
},
"authorization_url": {
"type": "string"
},
"token_url": {
"type": "string"
},
"userinfo_url": {
"type": "string"
},
"jwks_uri": {
"type": "string"
},
"client_id": {
"type": "string"
},
"client_secret": {
"type": "string"
},
"scopes": {
"type": "array",
"items": {
"type": "string"
}
},
"email_optional": {
"type": "boolean"
},
"claim_map": {
"type": "object",
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
}
},
"token_auth": {
"type": "string",
"enum": [
"body",
"basic"
]
},
"pkce": {
"type": "boolean"
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"identifier",
"name",
"provider_type",
"client_id",
"client_secret"
],
"additionalProperties": false
}update_custom_provider 사용자 정의 로그인 제공자 수정
파괴적
사용자 정의 제공자 하나를 고쳐요. ID는 바꿀 수 없어요. client_secret을 빈 문자열로 두면 저장된 시크릿을 그대로 써요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/config/auth/custom-providers/{identifier} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
identifier | string | 예 | list_custom_providers의 identifier |
name | string | 예 | |
provider_type | string, oidc | oauth2 | 예 | |
issuer | string | 아니요 | |
discovery_url | string | 아니요 | |
authorization_url | string | 아니요 | |
token_url | string | 아니요 | |
userinfo_url | string | 아니요 | |
jwks_uri | string | 아니요 | |
client_id | string | 예 | |
client_secret | string | 아니요 | |
scopes | array<string> | 아니요 | |
email_optional | boolean | 아니요 | |
claim_map | object | 아니요 | |
token_auth | string, body | basic | 아니요 | |
pkce | boolean | 아니요 | |
enabled | boolean | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"identifier": {
"type": "string",
"description": "list_custom_providers의 identifier"
},
"name": {
"type": "string"
},
"provider_type": {
"type": "string",
"enum": [
"oidc",
"oauth2"
]
},
"issuer": {
"type": "string"
},
"discovery_url": {
"type": "string"
},
"authorization_url": {
"type": "string"
},
"token_url": {
"type": "string"
},
"userinfo_url": {
"type": "string"
},
"jwks_uri": {
"type": "string"
},
"client_id": {
"type": "string"
},
"client_secret": {
"type": "string"
},
"scopes": {
"type": "array",
"items": {
"type": "string"
}
},
"email_optional": {
"type": "boolean"
},
"claim_map": {
"type": "object",
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
}
},
"token_auth": {
"type": "string",
"enum": [
"body",
"basic"
]
},
"pkce": {
"type": "boolean"
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"identifier",
"name",
"provider_type",
"client_id"
],
"additionalProperties": false
}set_custom_provider_enabled 사용자 정의 로그인 제공자 껐다 켜기
파괴적
사용자 정의 제공자 하나를 끄거나 켜요. 끄면 지금 세션은 그대로지만 새 로그인은 다시 켤 때까지 실패해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/config/auth/custom-providers/{identifier} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
identifier | string | 예 | |
enabled | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"identifier": {
"type": "string"
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"identifier",
"enabled"
],
"additionalProperties": false
}remove_custom_provider 사용자 정의 로그인 제공자 삭제
파괴적
사용자 정의 제공자 하나를 지워요. 되돌릴 수 없고, 이 제공자로 로그인하던 사용자는 들어올 수 없어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/config/auth/custom-providers/{identifier} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
identifier | string | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"identifier": {
"type": "string"
}
},
"required": [
"ref",
"identifier"
],
"additionalProperties": false
}list_third_party_auth 서드파티 인증 보기
읽기 전용
Data API가 받는 다른 인증 서비스(Firebase, Clerk, WorkOS, Auth0, Amazon Cognito, OIDC issuer)의 토큰 목록이에요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/config/auth/third-party-auth |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}add_third_party_auth 서드파티 인증 추가
추가만 함
다른 인증 서비스의 JWT로 로그인하게 해요. value는 type마다 달라요: firebase는 프로젝트 ID, clerk는 https://clerk.<도메인>이나 https://<이름>.clerk.accounts.dev, workos·oidc는 issuer URL, auth0은 테넌트 이름(<이름>.auth0.com의 앞부분), cognito는 사용자 풀 ID(region도 함께). Auth0·Cognito는 audiences도 넣으세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/config/auth/third-party-auth |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
type | string, firebase | clerk | workos | auth0 | cognito | oidc | 예 | |
value | string | 예 | |
region | string | 아니요 | cognito의 AWS 리전. 예: ap-northeast-2 |
audiences | array<string> | 아니요 | |
jwks_url | string | 아니요 | oidc에서 디스커버리 대신 쓸 JWKS 주소 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"type": {
"type": "string",
"enum": [
"firebase",
"clerk",
"workos",
"auth0",
"cognito",
"oidc"
]
},
"value": {
"type": "string"
},
"region": {
"type": "string",
"description": "cognito의 AWS 리전. 예: ap-northeast-2"
},
"audiences": {
"type": "array",
"items": {
"type": "string"
}
},
"jwks_url": {
"type": "string",
"description": "oidc에서 디스커버리 대신 쓸 JWKS 주소"
}
},
"required": [
"ref",
"type",
"value"
],
"additionalProperties": false
}remove_third_party_auth 서드파티 인증 삭제
파괴적
서드파티 인증 하나를 지워요. 그 서비스로 로그인한 사용자의 요청은 30초 안에 401로 거부돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/config/auth/third-party-auth/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_third_party_auth의 id |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_third_party_auth의 id"
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}copy_auth_from_import 로그인 설정 가져오기
파괴적 외부로 나감
import_sources에 연결한 Supabase 계정으로 그 프로젝트의 로그인 설정을 이 서버의 프로젝트(ref)에 복사해요: 켜 둔 소셜 제공자(Client ID·시크릿 등, update_auth_config와 같은 확인), 돌아갈 주소 목록(uri_allow_list, add_redirect_url과 같아요), 비어 있을 때만 site_url. 시크릿은 대화에 나오지 않아요. 답은 제공자마다 copied와 이유예요. 답의 callback_url을 각 제공자 콘솔에 등록하기 전에는 로그인이 실패해요. dry_run이면 아무것도 바꾸지 않고 보여만 줘요. 소유자·관리자·개발자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/config/auth/copy-from-import |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
org | string | 아니요 | 조직의 id나 이름. 비우면 ref 프로젝트의 조직. |
connection | string | 예 | Supabase 계정(import_sources의 connection, source가 supabase). |
project | string | 예 | Supabase 프로젝트 ref(import_sources의 projects[].id). |
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
providers | array<string> | 아니요 | 복사할 제공자(google, kakao, apple, x…). 비우면 Supabase에서 켜 둔 것 모두. |
dry_run | boolean | 아니요 | true면 바꾸지 않고 무엇을 복사할지만 보여줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"org": {
"type": "string",
"description": "조직의 id나 이름. 비우면 ref 프로젝트의 조직."
},
"connection": {
"type": "string",
"description": "Supabase 계정(import_sources의 connection, source가 supabase)."
},
"project": {
"type": "string",
"description": "Supabase 프로젝트 ref(import_sources의 projects[].id)."
},
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"providers": {
"type": "array",
"items": {
"type": "string"
},
"description": "복사할 제공자(google, kakao, apple, x…). 비우면 Supabase에서 켜 둔 것 모두."
},
"dry_run": {
"type": "boolean",
"description": "true면 바꾸지 않고 무엇을 복사할지만 보여줘요."
}
},
"required": [
"connection",
"project",
"ref"
],
"additionalProperties": false
}copy_schema_from_project 다른 프로젝트의 구조 복사
파괴적
같은 계정의 다른 프로젝트(from)의 표와 구조(타입, 시퀀스, 제약, 외래 키, 인덱스, 함수, 뷰, 트리거, RLS, 정책)를 이 프로젝트(ref)에 만들어요. 데이터 스키마(public)와 프로젝트가 만든 스키마(allfic 같은) 각각이에요. 문장 하나씩 실행하고, 다른 것이 먼저 있어야 만들어지는 것(함수를 부르는 생성 열, 뷰 위의 뷰)은 뒤에 다시 시도해요. 이미 있는 것은 건너뛰고 아무것도 지우거나 바꾸지 않으니 실패하면 원인을 고치고 다시 불러도 돼요. 행은 옮기지 않고(copy_data_from_project), 권한과 확장은 따로 정해요. 원래 프로젝트 이름이 든 SQL은 이 프로젝트 것으로 바꿔요. dry_run이면 만들 개수만 보여줘요. 두 프로젝트 모두 소유자·관리자여야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
from | string | 예 | 복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요. |
schemas | array<string> | 아니요 | 복사할 스키마(public, allfic …). 비우면 모두. |
dry_run | boolean | 아니요 | true면 만들지 않고 종류별 개수만 보여줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"from": {
"type": "string",
"description": "복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요."
},
"schemas": {
"type": "array",
"items": {
"type": "string"
},
"description": "복사할 스키마(public, allfic …). 비우면 모두."
},
"dry_run": {
"type": "boolean",
"description": "true면 만들지 않고 종류별 개수만 보여줘요."
}
},
"required": [
"ref",
"from"
],
"additionalProperties": false
}copy_data_from_project 다른 프로젝트의 행 복사
파괴적
같은 계정의 다른 프로젝트(from)의 표 행을 이 프로젝트(ref)의 같은 표로 서버 안에서 복사해요. 표는 copy_schema_from_project로 먼저 만들어 두세요. 외래 키가 허용하는 순서로, 기본 키 순서대로 나눠서 옮기고 지연 키가 있는 표도 막히지 않아요. mode가 missing(기본)이면 없는 행만 더하고 있는 행은 그대로 둬요. upsert면 값이 다른 행도 원본 값으로 맞춰요. 전환 직전에 변경분만 다시 맞출 때 써요. 원본에서 지운 행은 지우지 않아요. 기본 키가 없는 표는 비어 있을 때만 복사해요. 시간이 40초를 넘으면 멈추고 next를 줘요. 그 값을 넘겨 다시 부르면 이어서 해요. 시퀀스는 복사한 최대 값 뒤로 맞춰요. dry_run이면 읽기만 하고 쓰지 않아요. 맞는지는 compare_projects_data로 확인해요. 두 프로젝트 모두 소유자·관리자여야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
from | string | 예 | 복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요. |
schemas | array<string> | 아니요 | 복사할 스키마(public, allfic …). 비우면 모두. |
tables | array<string> | 아니요 | 복사할 표(allfic.profiles 또는 notes). 비우면 모두. |
mode | string, missing | upsert | 아니요 | missing은 없는 행만, upsert는 다른 행도 원본 값으로. |
dry_run | boolean | 아니요 | true면 쓰지 않고 읽기만 해요. |
next | string | 아니요 | 앞의 답에 있던 next. 이어서 할 때만. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"from": {
"type": "string",
"description": "복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요."
},
"schemas": {
"type": "array",
"items": {
"type": "string"
},
"description": "복사할 스키마(public, allfic …). 비우면 모두."
},
"tables": {
"type": "array",
"items": {
"type": "string"
},
"description": "복사할 표(allfic.profiles 또는 notes). 비우면 모두."
},
"mode": {
"type": "string",
"enum": [
"missing",
"upsert"
],
"description": "missing은 없는 행만, upsert는 다른 행도 원본 값으로."
},
"dry_run": {
"type": "boolean",
"description": "true면 쓰지 않고 읽기만 해요."
},
"next": {
"type": "string",
"description": "앞의 답에 있던 next. 이어서 할 때만."
}
},
"required": [
"ref",
"from"
],
"additionalProperties": false
}move_domain 도메인 옮기기
파괴적
같은 조직의 다른 프로젝트(to)로 도메인(hostnames)을 소유 확인과 인증서 그대로 옮겨요. 프로젝트를 나눈 뒤 사이트 도메인을 새 프로젝트가 받게 할 때 써요. remove_domain 뒤 add_domain을 하면 DNS에 TXT 레코드를 새로 넣어야 하고 그동안 사이트가 끊기지만, 이건 둘 다 필요 없어요. 소유 확인이 끝난 도메인만 옮기고, 브랜치 미리보기에 연결된 도메인은 옮기지 않아요. 같이 쓰는 www 도메인은 함께 적어요. 옮기지 않고 남는 도메인이 옮긴 도메인으로 넘기고 있었다면 그 넘기기는 꺼지고 답에 나와요. app은 받는 프로젝트의 앱 이름(비우면 그 프로젝트의 사이트). 두 프로젝트 모두 소유자·관리자여야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
to | string | 예 | 받는 프로젝트의 ref(list_projects). 같은 조직이어야 하고 ref와 달라야 해요. |
hostnames | array<string> | 예 | 옮길 도메인(allfic.io, www.allfic.io …). |
app | string | 아니요 | 받는 프로젝트에서 이 도메인이 보여 줄 앱 이름(list_apps). 비우면 그 프로젝트의 사이트. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"to": {
"type": "string",
"description": "받는 프로젝트의 ref(list_projects). 같은 조직이어야 하고 ref와 달라야 해요."
},
"hostnames": {
"type": "array",
"items": {
"type": "string"
},
"description": "옮길 도메인(allfic.io, www.allfic.io …)."
},
"app": {
"type": "string",
"description": "받는 프로젝트에서 이 도메인이 보여 줄 앱 이름(list_apps). 비우면 그 프로젝트의 사이트."
}
},
"required": [
"ref",
"to",
"hostnames"
],
"additionalProperties": false
}copy_users_from_project 다른 프로젝트의 사용자 복사
파괴적
같은 계정의 다른 프로젝트(from)의 로그인 사용자(계정과 소셜 로그인 연결, 비밀번호는 저장된 해시 그대로)를 이 프로젝트(ref)로 서버 안에서 복사해요. referenced_by_schemas를 주면 그 스키마의 표가 사용자를 가리키는(auth.users로의 외래 키) 사용자만 옮겨요. 로그인 서버를 둘이 같이 쓰던 프로젝트를 나눌 때 원래 프로젝트의 다른 사용자까지 딸려 오지 않게 해요. 이미 있는 계정(같은 id·이메일·제공자 계정)은 그대로 두고, 해시와 토큰은 답에 나오지 않아요. dry_run이면 옮길 수만 보여줘요. 제공자 설정은 copy_auth_from_project로 옮겨요. 두 프로젝트 모두 소유자·관리자여야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
from | string | 예 | 복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요. |
referenced_by_schemas | array<string> | 아니요 | 이 스키마의 표가 가리키는 사용자만(public, allfic …). 비우면 모든 사용자. |
dry_run | boolean | 아니요 | true면 바꾸지 않고 옮길 수만 보여줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"from": {
"type": "string",
"description": "복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요."
},
"referenced_by_schemas": {
"type": "array",
"items": {
"type": "string"
},
"description": "이 스키마의 표가 가리키는 사용자만(public, allfic …). 비우면 모든 사용자."
},
"dry_run": {
"type": "boolean",
"description": "true면 바꾸지 않고 옮길 수만 보여줘요."
}
},
"required": [
"ref",
"from"
],
"additionalProperties": false
}compare_projects_data 두 프로젝트의 데이터 비교
읽기 전용
두 프로젝트(ref, with)의 표를 서버 안에서 나란히 놓고 같은지 봐요. 표마다 행 수와, hash가 꺼져 있지 않으면 모든 행의 MD5를 비교해요(프로젝트를 나눈 복사가 빠짐없이 됐는지 전환 전에 확인하는 데 써요). 스키마는 이름으로 짝지어요(데이터 스키마는 public, 나머지는 app_<ref>_ 뒤의 이름). 읽기만 하고, 40초 안에 못 끝낸 표는 not_checked로 알려 주니 큰 프로젝트는 schemas로 나눠 부르세요. 두 프로젝트 모두 소유자·관리자여야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
with | string | 예 | 비교할 프로젝트의 ref(list_projects). ref와 달라야 해요. |
schemas | array<string> | 아니요 | 비교할 스키마 이름(public, allfic …). 비우면 모두. |
hash | boolean | 아니요 | false면 행 수만 비교해요(빨라요). 기본은 true. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"with": {
"type": "string",
"description": "비교할 프로젝트의 ref(list_projects). ref와 달라야 해요."
},
"schemas": {
"type": "array",
"items": {
"type": "string"
},
"description": "비교할 스키마 이름(public, allfic …). 비우면 모두."
},
"hash": {
"type": "boolean",
"description": "false면 행 수만 비교해요(빨라요). 기본은 true."
}
},
"required": [
"ref",
"with"
],
"additionalProperties": false
}get_project_forward 공개 함수 넘기기 보기
읽기 전용
이 프로젝트(ref)의 공개 함수 호출을 다른 프로젝트가 대신 받고 있는지 보여줘요. 받는 프로젝트의 ref 또는 null이에요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_project_forward 공개 함수 넘기기
파괴적
이 프로젝트(ref)의 공개 함수 호출을 다른 프로젝트(to)가 대신 받게 해요. 프로젝트를 나눈 뒤에도 옛 주소로 오는 결제 웹훅이나 옛 앱의 공개 함수 호출이 끊기지 않아요. 호출은 to 프로젝트의 같은 이름 함수가, 그 프로젝트의 환경과 요금으로 답해요. 비공개 함수, REST API, 로그인, 파일은 넘기지 않아요(그 호출자가 쥔 키와 세션은 옛 프로젝트 것이에요). to를 비우면 꺼요. 한 단계만 넘길 수 있고, 두 프로젝트 모두 소유자·관리자여야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
to | string | 아니요 | 대신 받을 프로젝트의 ref(list_projects). 비우면 넘기기를 꺼요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"to": {
"type": "string",
"description": "대신 받을 프로젝트의 ref(list_projects). 비우면 넘기기를 꺼요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_project_write_lock 쓰기 잠금 보기
읽기 전용
이 프로젝트(ref)가 지금 읽기 전용으로 잠겨 있는지 보여줘요. 잠겨 있으면 끝나는 시각과 사유가 나와요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_project_write_lock 쓰기 잠금
파괴적
이 프로젝트(ref)를 잠시 읽기 전용으로 잠가요. 프로젝트를 나눌 때 마지막 복사(copy_data_from_project의 upsert) 직전에 걸면 그 복사가 전부가 돼요. REST API·함수·예약 작업의 쓰기는 몇 초 안에 막히고, 읽기·로그인·파일은 그대로예요. 잠금은 minutes(기본 30, 최대 1440)가 지나면 저절로 풀려서 잊어도 프로젝트가 막힌 채 남지 않아요. locked: false로 바로 풀어요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
locked | boolean | 예 | true면 잠그고 false면 풀어요. |
minutes | integer | 아니요 | 잠금 시간(분). 기본 30, 1부터 1440까지. |
reason | string | 아니요 | 사유(200자까지). 감사 기록에 남아요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"locked": {
"type": "boolean",
"description": "true면 잠그고 false면 풀어요."
},
"minutes": {
"type": "integer",
"description": "잠금 시간(분). 기본 30, 1부터 1440까지."
},
"reason": {
"type": "string",
"description": "사유(200자까지). 감사 기록에 남아요."
}
},
"required": [
"ref",
"locked"
],
"additionalProperties": false
}copy_functions_from_project 다른 프로젝트의 함수 복사
파괴적
같은 계정의 다른 프로젝트(from)에 배포된 함수를 이 프로젝트(ref)에 그대로 배포해요(코드, 파일, package.json). 이름을 비우면 전부예요. 비공개로 복사하고(keep_public: true면 원래 공개였던 것만 공개), 제한 시간·메모리와 외부 요청 설정은 옮기지 않아요. 같은 이름이 있으면 건너뛰고(overwrite: true면 바꿔요), dry_run이면 보기만 해요. 시크릿은 copy_function_secrets로 따로 옮겨요. 두 프로젝트 모두 소유자·관리자여야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
from | string | 예 | 복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요. |
names | array<string> | 아니요 | 복사할 함수 이름. 비우면 전부. |
keep_public | boolean | 아니요 | true면 원래 공개였던 함수는 공개로 둬요. 기본은 모두 비공개. |
overwrite | boolean | 아니요 | true면 같은 이름의 함수를 바꿔요. 기본은 false(건너뜀). |
dry_run | boolean | 아니요 | true면 바꾸지 않고 무엇을 복사할지만 보여줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"from": {
"type": "string",
"description": "복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요."
},
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "복사할 함수 이름. 비우면 전부."
},
"keep_public": {
"type": "boolean",
"description": "true면 원래 공개였던 함수는 공개로 둬요. 기본은 모두 비공개."
},
"overwrite": {
"type": "boolean",
"description": "true면 같은 이름의 함수를 바꿔요. 기본은 false(건너뜀)."
},
"dry_run": {
"type": "boolean",
"description": "true면 바꾸지 않고 무엇을 복사할지만 보여줘요."
}
},
"required": [
"ref",
"from"
],
"additionalProperties": false
}set_vault_project_keys 프로젝트 자기 주소·키를 Vault에 넣기
파괴적
이 프로젝트(ref) 자신의 주소와 비밀 키를 이 프로젝트의 Vault에 supabase_url, service_role_key라는 이름으로 넣어요(있으면 바꿔요). 값은 서버 안에서만 옮겨지고 답에는 이름만 나와요. 다른 프로젝트에서 복사한 예약 작업의 SQL이 이 두 이름을 읽기 때문에, 프로젝트를 나눌 때 필요해요. 옛 프로젝트의 두 값을 복사하면 안 돼요(작업이 옛 프로젝트를 불러요). 키를 바꾼(rotate_signing_key) 뒤에는 다시 불러요. Vault가 꺼져 있으면 켜요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}copy_vault_secrets_from_project 다른 프로젝트의 Vault 비밀 복사
파괴적
같은 계정의 다른 프로젝트(from)의 Vault 비밀을 값째 이 프로젝트(ref)로 복사해요. 값은 서버 안에서만 읽고 써서 답에는 이름만 나와요. 이미 있는 이름은 건너뛰고(overwrite: true면 바꿔요), from에 없는 이름은 missing으로 알려요. 이 프로젝트에서 Vault가 꺼져 있으면 켜요. dry_run이면 복사할 이름만 보여줘요. 두 프로젝트 모두 소유자·관리자여야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
from | string | 예 | 복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요. |
names | array<string> | 아니요 | 복사할 비밀 이름. 비우면 from의 Vault 전부. |
overwrite | boolean | 아니요 | true면 같은 이름을 바꿔요. 기본은 false(건너뜀). |
dry_run | boolean | 아니요 | true면 바꾸지 않고 무엇을 복사할지만 보여줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"from": {
"type": "string",
"description": "복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요."
},
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "복사할 비밀 이름. 비우면 from의 Vault 전부."
},
"overwrite": {
"type": "boolean",
"description": "true면 같은 이름을 바꿔요. 기본은 false(건너뜀)."
},
"dry_run": {
"type": "boolean",
"description": "true면 바꾸지 않고 무엇을 복사할지만 보여줘요."
}
},
"required": [
"ref",
"from"
],
"additionalProperties": false
}copy_jobs_from_project 다른 프로젝트의 예약 작업 복사
파괴적
같은 계정의 다른 프로젝트(from)의 예약 작업을 이 프로젝트(ref)로 복사해요. enabled: true가 아니면 꺼진 채로 복사해서 같은 작업이 두 곳에서 돌지 않아요. 원래 작업을 끈 뒤 set_job_enabled로 하나씩 켜세요. SQL에 적힌 원래 프로젝트의 이름(net_·app_·cron_ 스키마, 주소)은 이 프로젝트의 것으로 바꿔서 복사하고, 답의 retargeted가 바꾼 횟수예요. cron.schedule로 만든 작업(scheduled_in_sql)과 헤더가 봉인된 주소 작업(headers_sealed)은 복사되지 않으니 다시 만드세요. 함수 작업은 이 프로젝트에 함수를 먼저 배포해야 해요. dry_run이면 아무것도 바꾸지 않아요. 두 프로젝트 모두 소유자·관리자여야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
from | string | 예 | 복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요. |
names | array<string> | 아니요 | 복사할 작업 이름. 비우면 전부. |
enabled | boolean | 아니요 | true면 복사본을 켜요. 기본은 false. |
overwrite | boolean | 아니요 | true면 같은 이름의 작업을 바꿔요. 기본은 false(건너뜀). |
dry_run | boolean | 아니요 | true면 바꾸지 않고 무엇을 복사할지만 보여줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"from": {
"type": "string",
"description": "복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요."
},
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "복사할 작업 이름. 비우면 전부."
},
"enabled": {
"type": "boolean",
"description": "true면 복사본을 켜요. 기본은 false."
},
"overwrite": {
"type": "boolean",
"description": "true면 같은 이름의 작업을 바꿔요. 기본은 false(건너뜀)."
},
"dry_run": {
"type": "boolean",
"description": "true면 바꾸지 않고 무엇을 복사할지만 보여줘요."
}
},
"required": [
"ref",
"from"
],
"additionalProperties": false
}copy_auth_from_project 다른 프로젝트의 로그인 설정 복사
파괴적
같은 계정의 다른 프로젝트(from)가 켜 둔 로그인 설정을 이 프로젝트(ref)에 복사해요: 소셜 제공자(Client ID·시크릿 등, update_auth_config와 같은 검사와 감사 기록), 돌아갈 주소 목록(add_redirect_url과 같아요), 비어 있을 때만 site_url. 프로젝트를 둘로 나눌 때 시크릿을 붙여 넣지 않게 해요. 시크릿은 서버 안에서만 옮겨지고 답에 나오지 않아요. 답은 제공자마다 copied와 이유예요. 답의 callback_url을 각 제공자 콘솔에 등록하기 전에는 로그인이 실패해요. 이미 켜 둔 제공자는 덮어써요. dry_run이면 아무것도 바꾸지 않고 보여만 줘요. 두 프로젝트 모두 소유자·관리자여야 해요(다른 조직이어도 돼요).
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
from | string | 예 | 복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요. |
providers | array<string> | 아니요 | 복사할 제공자(google, kakao, apple, x…). 비우면 from에서 켜 둔 것 모두. |
dry_run | boolean | 아니요 | true면 바꾸지 않고 무엇을 복사할지만 보여줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"from": {
"type": "string",
"description": "복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요."
},
"providers": {
"type": "array",
"items": {
"type": "string"
},
"description": "복사할 제공자(google, kakao, apple, x…). 비우면 from에서 켜 둔 것 모두."
},
"dry_run": {
"type": "boolean",
"description": "true면 바꾸지 않고 무엇을 복사할지만 보여줘요."
}
},
"required": [
"ref",
"from"
],
"additionalProperties": false
}copy_storage_from_project 다른 프로젝트의 파일 복사
파괴적
같은 계정의 다른 프로젝트(from)의 버킷과 파일을 이 프로젝트(ref)에 복사해요. 서버 안에서 옮기고 복사하는 방식은 copy_storage_from_import와 같아요: 여기 없는 버킷은 원본과 같은 공개 여부·크기 한도·파일 형식으로 만들고, 크기가 같은 파일은 건너뛰어서 다시 불러도 돼요. 한 번에 파일 200개(max_files)·45초까지 옮기고, 남으면 답의 next를 넘겨 다시 불러요(done이 true가 될 때까지). 버킷의 접근 규칙은 옮기지 않아요. dry_run이면 보기만 해요. 두 프로젝트 모두 소유자·관리자여야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자, project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
from | string | 예 | 복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요. |
buckets | array<string> | 아니요 | 복사할 버킷 이름. 비우면 모두. |
rename | object | 아니요 | 버킷 이름 바꾸기 {"원본 버킷": "여기 버킷"}. |
dry_run | boolean | 아니요 | true면 바꾸지 않고 만들 버킷과 옮길 파일 수만 보여줘요. |
next | string | 아니요 | 앞의 답에 있던 next. 넘기면 거기서부터 이어서 옮겨요. |
max_files | integer, min 1, max 1000 | 아니요 | 이번에 옮길 파일 수의 상한(기본 200, 최대 1000). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"from": {
"type": "string",
"description": "복사해 올 프로젝트의 ref(list_projects). ref와 달라야 해요."
},
"buckets": {
"type": "array",
"items": {
"type": "string"
},
"description": "복사할 버킷 이름. 비우면 모두."
},
"rename": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "버킷 이름 바꾸기 {\"원본 버킷\": \"여기 버킷\"}."
},
"dry_run": {
"type": "boolean",
"description": "true면 바꾸지 않고 만들 버킷과 옮길 파일 수만 보여줘요."
},
"next": {
"type": "string",
"description": "앞의 답에 있던 next. 넘기면 거기서부터 이어서 옮겨요."
},
"max_files": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "이번에 옮길 파일 수의 상한(기본 200, 최대 1000)."
}
},
"required": [
"ref",
"from"
],
"additionalProperties": false
}copy_storage_from_import 파일 가져오기
파괴적 외부로 나감
import_sources에 연결한 Supabase 계정으로 그 프로젝트의 버킷과 파일을 이 서버의 프로젝트(ref)에 복사해요. 여기 없는 버킷은 Supabase와 같은 공개 여부·크기 한도·형식으로 만들고, 파일은 upload_object와 같은 저장소에 같은 한도로 올려요. 여기 있는 파일과 크기가 같으면 건너뛰어서 다시 불러도 돼요. 한 번에 파일 200개(max_files)·45초까지 옮기고, 남으면 답의 next를 넘겨 다시 불러요(done이 true가 될 때까지). 답은 버킷마다 created, copied, skipped, failed, bytes와 실패한 파일 몇 개예요. Supabase 키는 대화에 나오지 않아요. 버킷의 접근 규칙은 옮기지 않아요. dry_run이면 아무것도 바꾸지 않고 수만 보여줘요. 소유자·관리자·개발자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 입력에 따라 물어요 (읽기 SQL이나 dry_run이면 안 물음) |
| REST | POST /projects/{ref}/storage/copy-from-import |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
org | string | 아니요 | 조직의 id나 이름. 비우면 ref 프로젝트의 조직. |
connection | string | 예 | Supabase 계정(import_sources의 connection, source가 supabase). |
project | string | 예 | Supabase 프로젝트 ref(import_sources의 projects[].id). |
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
buckets | array<string> | 아니요 | 복사할 Supabase 버킷 이름. 비우면 모두. |
rename | object | 아니요 | 버킷 이름 바꾸기 {"Supabase 버킷": "여기 버킷"}. 없으면 소문자로, 공백은 -로 바꿔요(My Files → my-files). |
dry_run | boolean | 아니요 | true면 바꾸지 않고 만들 버킷과 옮길 파일 수만 보여줘요. |
next | string | 아니요 | 앞의 답에 있던 next. 넘기면 거기서부터 이어서 옮겨요. |
max_files | integer, min 1, max 1000 | 아니요 | 이번에 옮길 파일 수의 상한(기본 200, 최대 1000). |
JSON 스키마
{
"type": "object",
"properties": {
"org": {
"type": "string",
"description": "조직의 id나 이름. 비우면 ref 프로젝트의 조직."
},
"connection": {
"type": "string",
"description": "Supabase 계정(import_sources의 connection, source가 supabase)."
},
"project": {
"type": "string",
"description": "Supabase 프로젝트 ref(import_sources의 projects[].id)."
},
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"buckets": {
"type": "array",
"items": {
"type": "string"
},
"description": "복사할 Supabase 버킷 이름. 비우면 모두."
},
"rename": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "버킷 이름 바꾸기 {\"Supabase 버킷\": \"여기 버킷\"}. 없으면 소문자로, 공백은 -로 바꿔요(My Files → my-files)."
},
"dry_run": {
"type": "boolean",
"description": "true면 바꾸지 않고 만들 버킷과 옮길 파일 수만 보여줘요."
},
"next": {
"type": "string",
"description": "앞의 답에 있던 next. 넘기면 거기서부터 이어서 옮겨요."
},
"max_files": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "이번에 옮길 파일 수의 상한(기본 200, 최대 1000)."
}
},
"required": [
"connection",
"project",
"ref"
],
"additionalProperties": false
}link_github_app GitHub 계정 연결
파괴적
같은 조직의 다른 프로젝트에 이미 연결된 GitHub 계정(App 설치)을 이 프로젝트에도 연결해요. 콘솔의 [GitHub 연결하기]과 같아요. 조직에 연결된 계정이 하나도 없으면 409예요(처음 한 번은 콘솔에서 GitHub 확인이 필요해요). 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_schemas 프로젝트 스키마
읽기 전용
프로젝트가 SQL로 만든 스키마(public 제외)와 데이터 API 노출 여부(exposed)를 봐요. 데이터베이스 안 이름은 app_<ref>_이름이지만 SQL과 클라이언트에선 만든 이름을 그대로 써요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/schemas |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_exposed_schemas 노출 스키마 정하기
파괴적
데이터 API가 public 말고도 답할 스키마 목록을 통째로 정해요(빈 목록은 public만). Accept-Profile 헤더나 supabase-js의 .schema()로 써요. RLS와 권한은 public과 같아요. 30초 안에 적용돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/schemas/exposed |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
exposed | array<string> | 예 | 노출할 스키마 이름들(list_schemas의 name). public은 늘 노출돼요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"exposed": {
"type": "array",
"items": {
"type": "string"
},
"description": "노출할 스키마 이름들(list_schemas의 name). public은 늘 노출돼요."
}
},
"required": [
"ref",
"exposed"
],
"additionalProperties": false
}get_data_api_settings 데이터 API 설정 보기
읽기 전용
데이터 API(/rest/v1)가 켜졌는지, 최대 행 수(max_rows, null은 제한 없음), 노출 스키마, search_path를 봐요. search_path_choices는 넣을 수 있는 스키마예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/data-api |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_data_api_settings 데이터 API 설정 바꾸기
파괴적
데이터 API(/rest/v1)를 켜고 끄고, 최대 행 수와 search_path를 정해요. 준 것만 바꿔요. search_path의 스키마는 요청 스키마 뒤에 붙어 이름 없이 찾을 수 있어요. 30초 안에 적용돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/data-api |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 아니요 | false면 /rest/v1이 모두 404로 답해요. |
max_rows | string, min 1, max 1000000 | 아니요 | 한 번에 돌려주는 최대 행 수. null이면 제한 없음. |
search_path | array<string>, max items 20 | 아니요 | 검색 경로에 넣을 스키마(get_data_api_settings의 search_path_choices의 name). 빈 목록이면 넣지 않아요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "false면 /rest/v1이 모두 404로 답해요."
},
"max_rows": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 1000000,
"description": "한 번에 돌려주는 최대 행 수. null이면 제한 없음."
},
"search_path": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "검색 경로에 넣을 스키마(get_data_api_settings의 search_path_choices의 name). 빈 목록이면 넣지 않아요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_database_settings 데이터베이스 연결 설정 보기
읽기 전용
데이터베이스의 풀 크기(pool_size), 직접 로그인의 최대 연결 수(max_connections), API 로그인의 연결 수(api_connections)를 봐요. 고른 값(null은 기본값)과 지금 Postgres가 지키는 값(enforced), 서버에서 줄 수 있는 최대(limits)를 같이 돌려줘요. 예약 작업이나 함수가 "too many connections for role"로 실패하면 여기서 enforced.api_connections와 limits.api_connections를 먼저 봐요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_database_settings 데이터베이스 연결 설정 바꾸기
파괴적
풀 크기, 직접 로그인의 최대 연결 수, API 로그인의 연결 수를 정해요. 준 것만 바꾸고 null이면 기본값으로 돌려요. 연결 수는 바로 Postgres에 적용되고(열린 연결은 끊지 않아요), 풀 크기는 1분 안에 적용돼요. API 로그인은 API 요청과 예약 작업이 함께 쓰는 연결이라 20에 막혀 있으면 한도(limits.api_connections)까지 올려요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
pool_size | string, min 1, max 20 | 아니요 | 연결 풀 크기. null이면 기본값. |
max_connections | string, min 1, max 500 | 아니요 | 직접 로그인(<ref>_db)의 최대 연결 수. null이면 기본값. |
api_connections | string, min 1, max 500 | 아니요 | API 로그인(<ref>_authenticator)의 연결 수. get_database_settings의 limits.api_connections까지예요. null이면 서버가 줄 수 있는 기본값. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"pool_size": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 20,
"description": "연결 풀 크기. null이면 기본값."
},
"max_connections": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 500,
"description": "직접 로그인(<ref>_db)의 최대 연결 수. null이면 기본값."
},
"api_connections": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 500,
"description": "API 로그인(<ref>_authenticator)의 연결 수. get_database_settings의 limits.api_connections까지예요. null이면 서버가 줄 수 있는 기본값."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_branches DB 브랜치 목록
읽기 전용
데이터베이스 브랜치 목록이에요: 이름, 브랜치의 ref(다른 도구에 그대로 써요), git 브랜치, 상태(creating·ready·merging·resetting·failed·deleting), 크기, 만료 시각. 자동 브랜치 설정도 와요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/branches |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_branch DB 브랜치 만들기
추가만 함
마이그레이션(apply_migrations 기록)을 다시 실행하고 시드를 넣어 미리보기 데이터베이스를 만들어요. 데이터는 with_data일 때만 복사해요. 브랜치는 ref가 따로 있어 모든 도구에 그 ref를 써요. git_branch를 주면 그 프리뷰 배포가 이걸 써요. Pro부터 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/branches |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 아니요 | 브랜치 이름(영문 소문자·숫자·-, 30자까지). 없으면 git_branch에서 만들어요. |
git_branch | string | 아니요 | 연결할 git 브랜치. 그 브랜치의 미리보기 배포에 이 데이터베이스의 주소·키·연결 문자열이 들어가요. |
with_seed | boolean | 아니요 | false면 시드를 넣지 않아요. |
with_data | boolean | 아니요 | true면 프로젝트의 행까지 복사해요(마이그레이션 다시 실행과 시드 대신). 파일과 그 행은 복사하지 않아요. 데이터가 512MB를 넘으면 거절해요. 진행 상황은 list_branches의 copy에 나와요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "브랜치 이름(영문 소문자·숫자·-, 30자까지). 없으면 git_branch에서 만들어요."
},
"git_branch": {
"type": "string",
"description": "연결할 git 브랜치. 그 브랜치의 미리보기 배포에 이 데이터베이스의 주소·키·연결 문자열이 들어가요."
},
"with_seed": {
"type": "boolean",
"description": "false면 시드를 넣지 않아요."
},
"with_data": {
"type": "boolean",
"description": "true면 프로젝트의 행까지 복사해요(마이그레이션 다시 실행과 시드 대신). 파일과 그 행은 복사하지 않아요. 데이터가 512MB를 넘으면 거절해요. 진행 상황은 list_branches의 copy에 나와요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}merge_branch DB 브랜치 병합
파괴적
브랜치에만 있는 마이그레이션을 버전 순으로 운영 프로젝트에 적용해요. 하나씩 트랜잭션으로 실행하고 실패하면 그것만 되돌리고 멈춰요. 데이터는 안 옮겨요. 브랜치 스키마는 apply_migrations로 바꿔야 병합돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/branches/{name}/merge |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 브랜치 이름(list_branches의 name). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "브랜치 이름(list_branches의 name)."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}reset_branch DB 브랜치 초기화
파괴적
브랜치의 데이터베이스를 지우고 프로젝트의 마이그레이션과 시드로 다시 만들어요. 브랜치의 데이터와 사용자는 모두 사라지고 백업은 남지 않아요. confirm에 브랜치 이름을 그대로 넣어야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/branches/{name}/reset |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 브랜치 이름. |
confirm | string | 예 | 브랜치 이름. name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "브랜치 이름."
},
"confirm": {
"type": "string",
"description": "브랜치 이름. name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"name",
"confirm"
],
"additionalProperties": false
}delete_branch DB 브랜치 삭제
파괴적
브랜치와 그 데이터베이스·키를 지워요. 되돌릴 수 없으니 confirm에 브랜치 이름을 그대로 넣어야 해요. git 브랜치를 지우거나 풀 리퀘스트를 닫으면 자동으로 지워져요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/branches/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 브랜치 이름. |
confirm | string | 예 | 브랜치 이름. name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "브랜치 이름."
},
"confirm": {
"type": "string",
"description": "브랜치 이름. name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"name",
"confirm"
],
"additionalProperties": false
}set_branching 자동 DB 브랜치 설정
파괴적
미리보기로 배포되는 git 브랜치마다 DB 브랜치를 자동으로 만들지, 모든 브랜치에 넣을 시드 SQL, 쓰지 않는 브랜치를 남겨 둘 날짜(1~90일, 배포할 때마다 연장). 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/branching |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
automatic | boolean | 아니요 | true면 미리보기 브랜치마다 자동으로 만들어요. |
seed_sql | string | 아니요 | 새 브랜치마다 마이그레이션 뒤에 실행할 SQL(1MB까지). 빈 문자열이면 지워요. |
lifetime_days | integer, min 1, max 90 | 아니요 | 마지막 배포 뒤 브랜치를 남겨 둘 날짜. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"automatic": {
"type": "boolean",
"description": "true면 미리보기 브랜치마다 자동으로 만들어요."
},
"seed_sql": {
"type": "string",
"description": "새 브랜치마다 마이그레이션 뒤에 실행할 SQL(1MB까지). 빈 문자열이면 지워요."
},
"lifetime_days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"description": "마지막 배포 뒤 브랜치를 남겨 둘 날짜."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_queues 대기열 목록
읽기 전용
대기열마다 메시지 수, 지금 읽을 수 있는 수, 보관된 수, 가장 오래된 메시지 나이예요. enabled는 pgmq 설치 여부, exposed는 데이터 API(pgmq_public)로 부를 수 있는지예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/queues |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_queue 대기열 만들기
추가만 함
대기열을 만들어요(pgmq.create, 처음이면 pgmq도 설치). 메시지는 pgmq.q_<이름> 표에 있고, SQL에서 pgmq.send(이름, 메시지)로 넣고 pgmq.read(이름, 초, 개수)로 읽어요. 전용 데이터베이스에서만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/queues |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 대기열 이름(영문 소문자·숫자·_, 47자까지). |
unlogged | boolean | 아니요 | true면 WAL을 쓰지 않는 빠른 표로 만들어요(서버가 비정상 종료되면 메시지를 잃어요). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "대기열 이름(영문 소문자·숫자·_, 47자까지)."
},
"unlogged": {
"type": "boolean",
"description": "true면 WAL을 쓰지 않는 빠른 표로 만들어요(서버가 비정상 종료되면 메시지를 잃어요)."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}delete_queue 대기열 삭제
파괴적
대기열과 그 메시지, 보관함을 지워요(pgmq.drop_queue). 되돌릴 수 없으니 confirm에 대기열 이름을 그대로 넣어야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/queues/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 대기열 이름. |
confirm | string | 예 | 대기열 이름. name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "대기열 이름."
},
"confirm": {
"type": "string",
"description": "대기열 이름. name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"name",
"confirm"
],
"additionalProperties": false
}purge_queue 대기열 비우기
파괴적
대기열의 메시지를 모두 지워요(pgmq.purge_queue). 보관함은 그대로 둬요. 되돌릴 수 없으니 confirm에 대기열 이름을 그대로 넣어야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/queues/{name}/purge |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 대기열 이름. |
confirm | string | 예 | 대기열 이름. name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "대기열 이름."
},
"confirm": {
"type": "string",
"description": "대기열 이름. name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"name",
"confirm"
],
"additionalProperties": false
}send_queue_message 대기열에 메시지 넣기
추가만 함
메시지(JSON) 하나를 대기열에 넣어요(pgmq.send). delay초 동안은 읽히지 않아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/queues/{name}/messages |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 대기열 이름. |
message | string | 예 | 넣을 메시지. JSON 값이면 무엇이든 돼요. |
delay | integer, min 0 | 아니요 | 이 초만큼 지난 뒤에 읽을 수 있게 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "대기열 이름."
},
"message": {
"description": "넣을 메시지. JSON 값이면 무엇이든 돼요."
},
"delay": {
"type": "integer",
"minimum": 0,
"description": "이 초만큼 지난 뒤에 읽을 수 있게 해요."
}
},
"required": [
"ref",
"name",
"message"
],
"additionalProperties": false
}peek_queue 대기열 메시지 보기
읽기 전용
대기열의 앞쪽 메시지를 가져가지 않고 봐요. 읽음 횟수도 가시성 시간도 바꾸지 않아서 작업자가 받을 메시지를 가로채지 않아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/queues/{name}/messages |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 대기열 이름. |
limit | integer, min 1, max 100 | 아니요 | 볼 메시지 수(기본 20). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "대기열 이름."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "볼 메시지 수(기본 20)."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}set_queues_api 대기열을 데이터 API로 열기
파괴적
true면 pgmq_public 스키마를 만들어 supabase.schema("pgmq_public").rpc("send", …)로 부르게 해요. 부른 사람 권한으로 실행되니 대기열 표에 권한과 접근 규칙을 주세요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/queues/api |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
exposed | boolean | 예 | true면 열고 false면 닫아요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"exposed": {
"type": "boolean",
"description": "true면 열고 false면 닫아요."
}
},
"required": [
"ref",
"exposed"
],
"additionalProperties": false
}list_vault_secrets Vault 비밀 목록
읽기 전용
Vault에 저장한 비밀의 이름과 설명. 값은 돌려주지 않아요. 프로젝트의 코드는 비밀 키로 select decrypted_secret from vault.decrypted_secrets where name = …로 읽어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | secrets.read 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/vault |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_vault_secret Vault 비밀 저장
추가만 함
비밀 하나를 암호화해 프로젝트 데이터베이스의 vault.secrets에 저장해요(vault.create_secret). 키는 플랫폼이 갖고 있어 덤프·백업에는 암호문만 남아요. 처음이면 Vault를 켜요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/vault |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 비밀 이름(영문자나 _로 시작, 128자까지). |
value | string | 예 | 저장할 값(64KB까지). 다시 보여 주지 않아요. |
description | string | 아니요 | 설명(500자까지). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "비밀 이름(영문자나 _로 시작, 128자까지)."
},
"value": {
"type": "string",
"description": "저장할 값(64KB까지). 다시 보여 주지 않아요."
},
"description": {
"type": "string",
"description": "설명(500자까지)."
}
},
"required": [
"ref",
"name",
"value"
],
"additionalProperties": false
}update_vault_secret Vault 비밀 바꾸기
파괴적
비밀의 값이나 설명을 바꿔요(vault.update_secret). 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/vault/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 비밀 이름. |
value | string | 아니요 | 새 값. |
description | string | 아니요 | 새 설명. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "비밀 이름."
},
"value": {
"type": "string",
"description": "새 값."
},
"description": {
"type": "string",
"description": "새 설명."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}delete_vault_secret Vault 비밀 삭제
파괴적
비밀 하나를 지워요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/vault/{name} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | 비밀 이름. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "비밀 이름."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}get_network_restrictions DB 접속 제한 보기
읽기 전용
데이터베이스 직접 연결(5432·6543)에 접속할 수 있는 주소와 TLS 강제 여부. restricted가 false면 모든 주소가 접속할 수 있어요. your_address_allowed는 이 요청을 보낸 주소가 허용되는지예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/network-restrictions |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}update_network_restrictions DB 접속 제한 바꾸기
파괴적
직접 연결을 허용할 주소(CIDR, 100개까지)와 TLS 강제를 바꿔요. allow_all이면 모두 허용해요. 지금 요청한 주소가 목록에 없으면 confirm이 필요해요(콘솔·API는 영향 없어요). 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/network-restrictions |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
allowed_cidrs | array<string> | 아니요 | 허용할 주소나 CIDR(예: 203.0.113.0/24). 빈 배열이면 제한을 풀어요. |
allow_all | boolean | 아니요 | true면 제한을 풀고 모든 주소를 허용해요. |
enforce_ssl | boolean | 아니요 | true면 TLS(sslmode=require) 연결만 받아요. 기본값은 true예요. |
confirm | boolean | 아니요 | 이 요청을 보낸 주소가 목록에 없어도 저장해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"allowed_cidrs": {
"type": "array",
"items": {
"type": "string"
},
"description": "허용할 주소나 CIDR(예: 203.0.113.0/24). 빈 배열이면 제한을 풀어요."
},
"allow_all": {
"type": "boolean",
"description": "true면 제한을 풀고 모든 주소를 허용해요."
},
"enforce_ssl": {
"type": "boolean",
"description": "true면 TLS(sslmode=require) 연결만 받아요. 기본값은 true예요."
},
"confirm": {
"type": "boolean",
"description": "이 요청을 보낸 주소가 목록에 없어도 저장해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_transfer_targets 옮길 수 있는 조직
읽기 전용
이 프로젝트를 옮길 수 있는 다른 조직(내가 소유자나 관리자인 조직)의 id·이름·요금제예요. can_transfer는 내가 지금 조직의 소유자라서 옮길 수 있는지예요. transfer_project의 organisation에 id를 넣어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/transfer |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}transfer_project 프로젝트 옮기기
파괴적
프로젝트를 다른 조직으로 옮겨요. 지금 조직의 소유자이면서 받는 조직의 소유자나 관리자여야 하고, 받는 조직의 요금제에 프로젝트 자리가 있어야 해요. 옮긴 뒤 사용량은 받는 조직에 청구되고 이번 달 청구는 옮긴 시점에서 나뉘어요. 원래 조직 구성원에게 따로 준 접근은 사라지고, 되돌리려면 받는 조직의 소유자가 다시 옮겨야 해요. 주소·키·데이터·배포는 그대로예요. 사용자가 분명히 요청했을 때만 쓰고 confirm에 프로젝트 이름을 그대로 넣으세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | POST /projects/{ref}/transfer |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
organisation | string | 예 | 받을 조직의 id. list_transfer_targets가 알려줘요. 이름이 하나뿐이면 이름도 돼요. |
confirm | string | 예 | 프로젝트 이름. list_projects의 name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"organisation": {
"type": "string",
"description": "받을 조직의 id. list_transfer_targets가 알려줘요. 이름이 하나뿐이면 이름도 돼요."
},
"confirm": {
"type": "string",
"description": "프로젝트 이름. list_projects의 name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"organisation",
"confirm"
],
"additionalProperties": false
}get_analytics 웹 분석
읽기 전용
페이지뷰와 방문자를 날짜별로, 많이 본 페이지·유입 경로·국가·기기·브라우저·운영체제와 함께 돌려줘요. 개인을 알아볼 수 있는 값은 저장하지 않아서 합계만 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/analytics |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
days | integer, 1 | 7 | 30 | 90 | 아니요 | 기간. 기본 7. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"days": {
"type": "integer",
"enum": [
1,
7,
30,
90
],
"description": "기간. 기본 7."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_speed_insights 속도 인사이트
읽기 전용
실제 방문자의 브라우저가 잰 Core Web Vitals(LCP, INP, CLS, FCP, TTFB)의 75번째 백분위와 평가, 느린 페이지를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/speed-insights |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
days | integer, 1 | 7 | 30 | 90 | 아니요 | 기간. 기본 7. |
device | string, all | desktop | mobile | 아니요 | 기기. 기본 all. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"days": {
"type": "integer",
"enum": [
1,
7,
30,
90
],
"description": "기간. 기본 7."
},
"device": {
"type": "string",
"enum": [
"all",
"desktop",
"mobile"
],
"description": "기기. 기본 all."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_insights 분석 켜기·끄기
파괴적
웹 분석과 속도 인사이트를 켜고 꺼요. 켜면 HTML에 /_oneend/insights/script.js가 들어가고, @vercel/analytics·@vercel/speed-insights도 그대로 집계돼요. 쿠키와 IP는 저장하지 않아요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/insights |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
analytics | boolean | 아니요 | 웹 분석. |
speed_insights | boolean | 아니요 | 속도 인사이트. |
vitals_sample_percent | integer, min 1, max 100 | 아니요 | 속도를 재는 방문 비율. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"analytics": {
"type": "boolean",
"description": "웹 분석."
},
"speed_insights": {
"type": "boolean",
"description": "속도 인사이트."
},
"vitals_sample_percent": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "속도를 재는 방문 비율."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_edge_config 엣지 설정 읽기
읽기 전용
프로젝트의 엣지 설정(배포 없이 바꾸는 값과 기능 플래그) 전체와 버전, 크기, 한도를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/edge-config |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_edge_config 엣지 설정 바꾸기
파괴적
키를 저장하거나 지워요. 몇 초 안에 모든 서버에 적용돼요. 플래그는 true/false, {"enabled": true, "percent": 20}, {"enabled": true, "allow": ["user-1"]} 모양이에요. 개발자 이상만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/edge-config |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
set | object | 아니요 | 저장할 키와 값 (값은 JSON). |
delete | array<string> | 아니요 | 지울 키. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"set": {
"type": "object",
"additionalProperties": true,
"description": "저장할 키와 값 (값은 JSON)."
},
"delete": {
"type": "array",
"items": {
"type": "string"
},
"description": "지울 키."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_edge_config_history 엣지 설정 변경 기록
읽기 전용
누가 언제 어떤 키를 무엇에서 무엇으로 바꿨는지, 최근 것부터 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/edge-config/history |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
limit | integer, min 1, max 500 | 아니요 | 몇 개. 기본 50. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"description": "몇 개. 기본 50."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_rolling_releases 점진적 배포 상태
읽기 전용
점진적 배포 설정과, 진행 중인 배포(새 배포가 받는 방문자 비율)와 최근 기록을 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/rolling-releases |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_rolling_releases 점진적 배포 설정
파괴적
새 프로덕션 배포를 단계별 비율(stages, 예: [10, 50])로 내보낼지 정해요. auto_advance가 false면 단계마다 승인해요. abort_error_rate(0.05 = 5%)를 넘으면 자동으로 되돌려요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/rolling-releases |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 아니요 | 켜기. |
stages | array<integer> | 아니요 | 단계별 비율(%). |
stage_minutes | integer, min 1, max 1440 | 아니요 | 단계 길이(분). |
auto_advance | boolean | 아니요 | 시간이 지나면 자동 진행. |
abort_error_rate | string, min 0.001, max 1 | 아니요 | 자동 중단 5xx 비율. null이면 끄기. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "켜기."
},
"stages": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 99
},
"description": "단계별 비율(%)."
},
"stage_minutes": {
"type": "integer",
"minimum": 1,
"maximum": 1440,
"description": "단계 길이(분)."
},
"auto_advance": {
"type": "boolean",
"description": "시간이 지나면 자동 진행."
},
"abort_error_rate": {
"type": [
"number",
"null"
],
"minimum": 0.001,
"maximum": 1,
"description": "자동 중단 5xx 비율. null이면 끄기."
}
},
"required": [
"ref"
],
"additionalProperties": false
}advance_rolling_release 점진적 배포 다음 단계로
파괴적
진행 중인 배포를 다음 단계 비율로 올려요. 마지막 단계였다면 모두에게 배포해요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/rolling-releases/{action} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}promote_rolling_release 점진적 배포 완료
파괴적
진행 중인 배포를 지금 모든 방문자에게 보내요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}abort_rolling_release 점진적 배포 중단
파괴적
진행 중인 배포를 멈추고 이전 프로덕션 배포로 되돌려요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
reason | string, max length 300 | 아니요 | 기록에 남길 이유. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"reason": {
"type": "string",
"maxLength": 300,
"description": "기록에 남길 이유."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_kv_keys KV 키 목록
읽기 전용
KV 저장소의 키를 접두어로, 50개씩 돌려줘요. 사용량과 한도, REST 주소도 함께예요. 비밀을 볼 수 있는 역할만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | secrets.read 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/kv |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
prefix | string | 아니요 | 접두어. |
cursor | string | 아니요 | 이전 응답의 cursor. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"prefix": {
"type": "string",
"description": "접두어."
},
"cursor": {
"type": "string",
"description": "이전 응답의 cursor."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_kv KV 값 읽기
읽기 전용
키 하나의 값과 남은 초(ttl, -1은 만료 없음)를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | secrets.read 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/kv/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string | 예 | 키. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"description": "키."
}
},
"required": [
"ref",
"key"
],
"additionalProperties": false
}set_kv KV 값 저장
파괴적
키에 JSON 값을 저장해요. ttl은 만료까지 초예요. 개발자 이상만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/kv/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string | 예 | 키. |
value | string | 예 | 값 (JSON). |
ttl | integer, min 1 | 아니요 | 만료까지 초. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"description": "키."
},
"value": {
"description": "값 (JSON)."
},
"ttl": {
"type": "integer",
"minimum": 1,
"description": "만료까지 초."
}
},
"required": [
"ref",
"key",
"value"
],
"additionalProperties": false
}delete_kv KV 키 삭제
파괴적
키를 지워요. 개발자 이상만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/kv/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string | 예 | 키. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"description": "키."
}
},
"required": [
"ref",
"key"
],
"additionalProperties": false
}get_ai_gateway AI 게이트웨이
읽기 전용
AI 게이트웨이 주소(OpenAI 호환), 설정, 공급자(키는 끝 네 자리만), 최근 30일 사용량을 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/ai-gateway |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_ai_gateway AI 게이트웨이 설정
파괴적
AI 게이트웨이의 켜기, 로그인 사용자 허용, 캐시, 분당 한도, 플랫폼 공급자 대체(토큰 요금), 사용자별 하루 한도를 정해요. 사용자는 로그인한 id나 x-oneend-user 헤더예요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/ai-gateway |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 아니요 | 켜기. |
allow_users | boolean | 아니요 | 로그인한 사용자 허용. |
cache_seconds | integer, min 0, max 86400 | 아니요 | 캐시 초. |
rate_per_minute | integer, min 1 | 아니요 | 분당 요청 한도. |
platform_fallback | boolean | 아니요 | 플랫폼 공급자로 대체. |
user_daily_requests | string, min 1 | 아니요 | 앱 사용자 한 명의 하루 요청 한도. null은 없음. |
user_daily_tokens | string, min 1 | 아니요 | 앱 사용자 한 명의 하루 토큰 한도. null은 없음. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "켜기."
},
"allow_users": {
"type": "boolean",
"description": "로그인한 사용자 허용."
},
"cache_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 86400,
"description": "캐시 초."
},
"rate_per_minute": {
"type": "integer",
"minimum": 1,
"description": "분당 요청 한도."
},
"platform_fallback": {
"type": "boolean",
"description": "플랫폼 공급자로 대체."
},
"user_daily_requests": {
"type": [
"integer",
"null"
],
"minimum": 1,
"description": "앱 사용자 한 명의 하루 요청 한도. null은 없음."
},
"user_daily_tokens": {
"type": [
"integer",
"null"
],
"minimum": 1,
"description": "앱 사용자 한 명의 하루 토큰 한도. null은 없음."
}
},
"required": [
"ref"
],
"additionalProperties": false
}add_ai_provider AI 공급자 추가
추가만 함
공급자를 키와 함께 추가해요: OpenAI 호환, Anthropic(Messages API로 바꿔 줌), Google Gemini. 주소는 공개 https만 돼요. 키는 암호화해 저장하고 다시 보여 주지 않아요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/ai-gateway/providers |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string, pattern ^[a-z][a-z0-9-]{0,39}$ | 예 | 이름. 모델을 이름/모델로 부를 때 써요. |
kind | string, openai | anthropic | google | deepseek | openai-compatible | 예 | 종류. |
base_url | string | 아니요 | 주소. openai, anthropic, google, deepseek는 비워도 돼요. |
key | string | 아니요 | API 키. |
models | array<string> | 아니요 | 받는 모델. 비우면 모두. |
priority | integer, min 0, max 1000 | 아니요 | 우선순위. 낮은 것부터. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]{0,39}$",
"description": "이름. 모델을 이름/모델로 부를 때 써요."
},
"kind": {
"type": "string",
"enum": [
"openai",
"anthropic",
"google",
"deepseek",
"openai-compatible"
],
"description": "종류."
},
"base_url": {
"type": "string",
"description": "주소. openai, anthropic, google, deepseek는 비워도 돼요."
},
"key": {
"type": "string",
"description": "API 키."
},
"models": {
"type": "array",
"items": {
"type": "string"
},
"description": "받는 모델. 비우면 모두."
},
"priority": {
"type": "integer",
"minimum": 0,
"maximum": 1000,
"description": "우선순위. 낮은 것부터."
}
},
"required": [
"ref",
"name",
"kind"
],
"additionalProperties": false
}set_ai_provider_enabled AI 공급자 끄기·켜기
파괴적
설정과 키는 두고 공급자를 쓰지 않거나 다시 써요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/ai-gateway/providers/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | get_ai_gateway가 돌려준 id. |
enabled | boolean | 예 | 쓰기. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "get_ai_gateway가 돌려준 id."
},
"enabled": {
"type": "boolean",
"description": "쓰기."
}
},
"required": [
"ref",
"id",
"enabled"
],
"additionalProperties": false
}remove_ai_provider AI 공급자 삭제
파괴적
공급자와 저장한 키를 지워요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/ai-gateway/providers/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | get_ai_gateway가 돌려준 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "get_ai_gateway가 돌려준 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}get_ai_gateway_logs AI 게이트웨이 호출 기록
읽기 전용
최근 호출의 공급자, 모델, 상태, 토큰, 지연, 대체 여부를 돌려줘요. 대화 내용은 저장하지 않아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/ai-gateway/logs |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
limit | integer, min 1, max 500 | 아니요 | 몇 개. 기본 50. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"description": "몇 개. 기본 50."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_middleware 미들웨어 설정
읽기 전용
사이트 미들웨어(middleware.ts)를 실행하는지와 시간 한도를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/middleware |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_middleware 미들웨어 설정 바꾸기
파괴적
사이트 미들웨어를 끄거나 켜고, 시간 한도(100~5000ms)를 정해요. 끄면 다시 배포하지 않아도 미들웨어 없이 서빙해요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/middleware |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 아니요 | 실행. |
timeout_ms | integer, min 100, max 5000 | 아니요 | 시간 한도(ms). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "실행."
},
"timeout_ms": {
"type": "integer",
"minimum": 100,
"maximum": 5000,
"description": "시간 한도(ms)."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_ai_budgets AI 게이트웨이 예산
파괴적
프로젝트의 AI 게이트웨이 예산을 달러로 정해요(하루·주·달, UTC). 다 쓰면 다음 기간까지 호출을 거절해요. 적지 않은 값은 그대로 둬요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/ai-gateway/budgets |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
daily_usd | string, min 0, max 1000000 | 아니요 | 하루(UTC) 예산, 달러. null이면 없음. |
weekly_usd | string, min 0, max 1000000 | 아니요 | 한 주(월요일부터, UTC) 예산, 달러. null이면 없음. |
monthly_usd | string, min 0, max 1000000 | 아니요 | 한 달(UTC) 예산, 달러. null이면 없음. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"daily_usd": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1000000,
"description": "하루(UTC) 예산, 달러. null이면 없음."
},
"weekly_usd": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1000000,
"description": "한 주(월요일부터, UTC) 예산, 달러. null이면 없음."
},
"monthly_usd": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1000000,
"description": "한 달(UTC) 예산, 달러. null이면 없음."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_ai_gateway_keys AI 게이트웨이 키 목록
읽기 전용
게이트웨이 키의 이름, 앞부분, 예산, 이번 달 지출, 마지막 사용 시각을 돌려줘요. 키 자체는 돌려주지 않아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/ai-gateway/keys |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_ai_gateway_key AI 게이트웨이 키 만들기
추가만 함
앱 하나, 또는 프로젝트가 AI를 되파는 고객 한 명에게 줄 게이트웨이 키(bwai_…)를 예산·꼬리표·분당 한도와 함께 만들어요. 키는 이 응답에서 한 번만 보여요. 꼬리표(external_ref)를 단 키는 프로젝트당 50개 제한에 들지 않아요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/ai-gateway/keys |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string, min length 1, max length 60 | 예 | 키 이름. |
daily_usd | string, min 0, max 1000000 | 아니요 | 하루(UTC) 예산, 달러. null이면 없음. |
weekly_usd | string, min 0, max 1000000 | 아니요 | 한 주(월요일부터, UTC) 예산, 달러. null이면 없음. |
monthly_usd | string, min 0, max 1000000 | 아니요 | 한 달(UTC) 예산, 달러. null이면 없음. |
external_ref | string, max length 200 | 아니요 | 이 키가 프로젝트 장부에서 누구인지(예: 고객의 사용자 ID). 훅에 같이 보내요. |
labels | object | 아니요 | 자유 라벨 20개까지. 예: {"tier": "1"}. 훅에 같이 보내요. |
rate_per_minute | string, min 1, max 100000 | 아니요 | 분당 요청 수 한도. null이면 없음. |
tokens_per_minute | string, min 1, max 100000000 | 아니요 | 분당 토큰(입력+출력) 한도. null이면 없음. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "키 이름."
},
"daily_usd": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1000000,
"description": "하루(UTC) 예산, 달러. null이면 없음."
},
"weekly_usd": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1000000,
"description": "한 주(월요일부터, UTC) 예산, 달러. null이면 없음."
},
"monthly_usd": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1000000,
"description": "한 달(UTC) 예산, 달러. null이면 없음."
},
"external_ref": {
"type": [
"string",
"null"
],
"maxLength": 200,
"description": "이 키가 프로젝트 장부에서 누구인지(예: 고객의 사용자 ID). 훅에 같이 보내요."
},
"labels": {
"type": "object",
"additionalProperties": {
"type": "string",
"maxLength": 100
},
"description": "자유 라벨 20개까지. 예: {\"tier\": \"1\"}. 훅에 같이 보내요."
},
"rate_per_minute": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 100000,
"description": "분당 요청 수 한도. null이면 없음."
},
"tokens_per_minute": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 100000000,
"description": "분당 토큰(입력+출력) 한도. null이면 없음."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}set_ai_gateway_key_budgets AI 게이트웨이 키 예산
파괴적
게이트웨이 키 하나의 예산을 바꿔요. 적지 않은 값은 그대로 둬요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/ai-gateway/keys/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_ai_gateway_keys가 돌려준 id. |
daily_usd | string, min 0, max 1000000 | 아니요 | 하루(UTC) 예산, 달러. null이면 없음. |
weekly_usd | string, min 0, max 1000000 | 아니요 | 한 주(월요일부터, UTC) 예산, 달러. null이면 없음. |
monthly_usd | string, min 0, max 1000000 | 아니요 | 한 달(UTC) 예산, 달러. null이면 없음. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_ai_gateway_keys가 돌려준 id."
},
"daily_usd": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1000000,
"description": "하루(UTC) 예산, 달러. null이면 없음."
},
"weekly_usd": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1000000,
"description": "한 주(월요일부터, UTC) 예산, 달러. null이면 없음."
},
"monthly_usd": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1000000,
"description": "한 달(UTC) 예산, 달러. null이면 없음."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}set_ai_gateway_key_limits AI 게이트웨이 키 한도
파괴적
게이트웨이 키 하나의 분당 요청 수와 분당 토큰 수 한도를 바꿔요. 모든 서버가 같은 수를 세요. 적지 않은 값은 그대로 두고, null이면 한도를 없애요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/ai-gateway/keys/{id}/limits |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_ai_gateway_keys가 돌려준 id. |
rate_per_minute | string, min 1, max 100000 | 아니요 | 분당 요청 수 한도. null이면 없음. |
tokens_per_minute | string, min 1, max 100000000 | 아니요 | 분당 토큰(입력+출력) 한도. null이면 없음. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_ai_gateway_keys가 돌려준 id."
},
"rate_per_minute": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 100000,
"description": "분당 요청 수 한도. null이면 없음."
},
"tokens_per_minute": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 100000000,
"description": "분당 토큰(입력+출력) 한도. null이면 없음."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}set_ai_model_aliases AI 모델 별칭
파괴적
부르는 사람이 쓰는 모델 이름(별칭)과 실제로 보낼 모델을 정해요. 별칭마다 맨 앞에 넣을 시스템 지침을 둘 수 있어요. 응답의 model은 별칭으로 나가요. 보낸 목록이 지금 목록을 통째로 바꿔요. aliases_only를 켜면 별칭 말고는 부를 수 없고 /models도 별칭만 보여요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/ai-gateway/aliases |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
aliases | array<object>, max items 50 | 예 | 별칭 전체 목록. 빈 배열이면 모두 지워요. |
aliases_only | boolean | 아니요 | 별칭만 부를 수 있게 해요. 적지 않으면 그대로 둬요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"aliases": {
"type": "array",
"maxItems": 50,
"description": "별칭 전체 목록. 빈 배열이면 모두 지워요.",
"items": {
"type": "object",
"properties": {
"alias": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9._-]{0,63}$",
"description": "부르는 이름. 예: blackall-air"
},
"target": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "실제로 보낼 모델. 예: deepseek/deepseek-flash"
},
"system_prompt": {
"type": [
"string",
"null"
],
"maxLength": 20000,
"description": "맨 앞에 넣을 시스템 지침. 부르는 사람의 지침은 그 뒤에 와요."
}
},
"required": [
"alias",
"target"
],
"additionalProperties": false
}
},
"aliases_only": {
"type": "boolean",
"description": "별칭만 부를 수 있게 해요. 적지 않으면 그대로 둬요."
}
},
"required": [
"ref",
"aliases"
],
"additionalProperties": false
}set_ai_gateway_hooks AI 게이트웨이 훅
파괴적
게이트웨이 키로 부른 호출마다 물어보고 알려 줄 https 주소를 정해요. ai.before에 2xx가 아니거나 timeout_ms 안에 답이 없으면 호출을 거절해요(402는 잔액 부족으로 그대로 전해요). ai.after에는 사용량·비용·상태를 보내고, 받지 못하면 하루 동안 다시 보내요. 응답에 서명 비밀이 있어요. url을 null로 하면 꺼요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/ai-gateway/hooks |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
url | string, max length 500 | 아니요 | 훅 주소(https). null이면 꺼요. |
timeout_ms | integer, min 200, max 10000 | 아니요 | ai.before가 답할 시간(밀리초). 기본 2000. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"url": {
"type": [
"string",
"null"
],
"maxLength": 500,
"description": "훅 주소(https). null이면 꺼요."
},
"timeout_ms": {
"type": "integer",
"minimum": 200,
"maximum": 10000,
"description": "ai.before가 답할 시간(밀리초). 기본 2000."
}
},
"required": [
"ref"
],
"additionalProperties": false
}revoke_ai_gateway_key AI 게이트웨이 키 폐기
파괴적
게이트웨이 키를 폐기해요. 30초 안에 모든 서버에서 거절돼요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/ai-gateway/keys/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_ai_gateway_keys가 돌려준 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_ai_gateway_keys가 돌려준 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}get_ai_spend AI 게이트웨이 지출
읽기 전용
오늘·이번 주·이번 달 지출과 예산, 하루별·모델별·키별 지출을 달러로 돌려줘요. 자기 키로 부른 공급자는 정가로 계산한 추정이에요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/ai-gateway/spend |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
days | integer, min 1, max 400 | 아니요 | 며칠. 기본 30. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 400,
"description": "며칠. 기본 30."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_analytics_breakdown 웹 분석 세부
읽기 전용
캠페인(utm_source·utm_medium·utm_campaign), 라우트, 사용자 정의 이벤트와 걸러낸 봇의 수를 돌려줘요. event를 주면 그 이벤트의 속성별 값을 함께 돌려줘요. 합계만 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/analytics/breakdown |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
days | integer, 1 | 7 | 30 | 90 | 아니요 | 기간. 기본 7. |
event | string, max length 100 | 아니요 | 속성을 볼 이벤트 이름. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"days": {
"type": "integer",
"enum": [
1,
7,
30,
90
],
"description": "기간. 기본 7."
},
"event": {
"type": "string",
"maxLength": 100,
"description": "속성을 볼 이벤트 이름."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_analytics_previews 프리뷰 방문 세기
파괴적
프리뷰 배포와 dpl- 주소의 방문을 웹 분석에 셀지 정해요. 끄면(기본) 프리뷰에는 스크립트를 넣지 않고 보내온 것도 버려요. 소유자·관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/analytics/previews |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
include_previews | boolean | 예 | 프리뷰도 세기. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"include_previews": {
"type": "boolean",
"description": "프리뷰도 세기."
}
},
"required": [
"ref",
"include_previews"
],
"additionalProperties": false
}export_analytics 웹 분석 내보내기
읽기 전용
기간의 합계를 날짜·항목·값별 CSV 문자열로 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/analytics/export |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
days | integer, 1 | 7 | 30 | 90 | 아니요 | 기간. 기본 7. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"days": {
"type": "integer",
"enum": [
1,
7,
30,
90
],
"description": "기간. 기본 7."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_analytics_reports 맞춤 리포트 목록
읽기 전용
저장한 웹 분석 리포트와 넣을 수 있는 차트 이름을 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/analytics/reports |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_analytics_report 맞춤 리포트 보기
읽기 전용
저장한 리포트 하나를 그 기간의 합계, 세부, 속도와 함께 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/analytics/reports/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_analytics_reports가 돌려준 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_analytics_reports가 돌려준 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}save_analytics_report 맞춤 리포트 저장
파괴적
리포트를 만들거나, id를 주면 그 리포트를 바꿔요. 개발자 이상만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/analytics/reports, PATCH /projects/{ref}/analytics/reports |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 아니요 | 바꿀 리포트의 id. 비우면 새로 만들어요. |
name | string, min length 1, max length 80 | 예 | 이름. |
days | integer, 1 | 7 | 30 | 90 | 아니요 | 기간. 기본 7. |
widgets | array<string>, views | visitors | path | referrer | country | device | browser | os | utm_source | utm_medium | utm_campaign | route | event | bot | vitals, min items 1, max items 16 | 예 | 넣을 차트와 표. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "바꿀 리포트의 id. 비우면 새로 만들어요."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "이름."
},
"days": {
"type": "integer",
"enum": [
1,
7,
30,
90
],
"description": "기간. 기본 7."
},
"widgets": {
"type": "array",
"items": {
"type": "string",
"enum": [
"views",
"visitors",
"path",
"referrer",
"country",
"device",
"browser",
"os",
"utm_source",
"utm_medium",
"utm_campaign",
"route",
"event",
"bot",
"vitals"
]
},
"minItems": 1,
"maxItems": 16,
"description": "넣을 차트와 표."
}
},
"required": [
"ref",
"name",
"widgets"
],
"additionalProperties": false
}remove_analytics_report 맞춤 리포트 삭제
파괴적
리포트만 지워요. 분석 기록은 그대로예요. 개발자 이상만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/analytics/reports/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_analytics_reports가 돌려준 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_analytics_reports가 돌려준 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}list_flags 기능 플래그 목록
읽기 전용
기능 플래그와, 엣지 설정에 둔 플래그 모양의 값을 함께 돌려줘요. source는 어디에 있는지, shadows는 같은 키의 엣지 설정 값을 가리는지 알려 줘요. 키가 같으면 플래그를 따라요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/flags |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}evaluate_flag 기능 플래그 값 보기
읽기 전용
앱이 받을 값을 돌려줘요. 컨텍스트(예: {"user": {"id": "u1"}})와 환경을 주면 플래그 규칙을, 플래그가 없으면 엣지 설정 값을 따라요. source가 어느 쪽인지 알려 줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/flags/evaluate |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 256 | 예 | 플래그 키. |
environment | string | 아니요 | 환경. 기본 production. |
context | object | 아니요 | 평가할 컨텍스트(JSON 객체). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 256,
"description": "플래그 키."
},
"environment": {
"type": "string",
"description": "환경. 기본 production."
},
"context": {
"type": "object",
"description": "평가할 컨텍스트(JSON 객체)."
}
},
"required": [
"ref",
"key"
],
"additionalProperties": false
}set_flag_enabled 기능 플래그 켜기·끄기
파괴적
한 환경에서 플래그를 켜거나 꺼요. 프로덕션은 소유자·관리자, 그 밖의 환경은 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/flags/{key}/environments/{environment} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 64 | 예 | 플래그 키. |
environment | string | 예 | 환경. |
enabled | boolean | 예 | 켜기. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 64,
"description": "플래그 키."
},
"environment": {
"type": "string",
"description": "환경."
},
"enabled": {
"type": "boolean",
"description": "켜기."
}
},
"required": [
"ref",
"key",
"environment",
"enabled"
],
"additionalProperties": false
}get_remote_cache 원격 캐시
읽기 전용
Turborepo 원격 캐시의 주소, 저장된 결과 수와 용량, 최근 30일 적중·업로드, 이번 달 저장 사용량(remote_cache_gb_hour)과 단가를 돌려줘요. 내려받은 데이터는 egress_gb로 세요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/remote-cache |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}clear_remote_cache 원격 캐시 비우기
파괴적
저장된 결과를 모두 지워요. 다음 빌드부터 다시 채워지고, 지운 만큼 저장 용량 사용량이 줄어요. 개발자 이상만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | data.write 소유자·관리자·개발자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | DELETE /projects/{ref}/remote-cache/artifacts |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_queue_metrics 큐 지표
읽기 전용
5분마다 잰 기록으로 큐마다 지금 대기 수·읽을 수 있는 메시지·가장 오래 기다린 시간·보관 수와, 전체의 시간별 대기·보낸·처리된 수를 돌려줘요. 기본 24시간, 최대 168시간.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/queues/metrics |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
hours | integer, min 1, max 168 | 아니요 | 기간(시간). 기본 24. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"hours": {
"type": "integer",
"minimum": 1,
"maximum": 168,
"description": "기간(시간). 기본 24."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_edge_config_tokens 엣지 설정 읽기 토큰
읽기 전용
다른 프로젝트가 이 프로젝트의 엣지 설정을 읽는 읽기 토큰과 연결된 프로젝트(변수 이름, 환경), 이 프로젝트에 연결된 다른 프로젝트의 엣지 설정을 돌려줘요. 토큰 값은 돌려주지 않아요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/edge-config/tokens |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_edge_config_token 엣지 설정 읽기 토큰 만들기
추가만 함
읽기 토큰을 만들어요. connect를 주면 같은 조직의 프로젝트에 연결해, 다음 배포부터 연결 문자열(https://<ref>.<zone>/config/v1?token=…)을 변수로 받아요. 토큰은 이때만 보여요. 프로젝트 관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/edge-config/tokens |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string, min length 1, max length 60 | 예 | 토큰 이름. |
connect | object | 아니요 | 바로 연결할 같은 조직의 프로젝트: ref, 변수 이름 variable(기본 GLOBAL_CONFIG), 환경 targets(기본 셋 다, 프로덕션은 그 프로젝트의 소유자·관리자만). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "토큰 이름."
},
"connect": {
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$"
},
"variable": {
"type": "string",
"pattern": "^[A-Za-z_][A-Za-z0-9_]{0,63}$"
},
"targets": {
"type": "array",
"items": {
"type": "string",
"enum": [
"production",
"preview",
"development"
]
},
"minItems": 1,
"uniqueItems": true
}
},
"required": [
"ref"
],
"additionalProperties": false,
"description": "바로 연결할 같은 조직의 프로젝트: ref, 변수 이름 variable(기본 GLOBAL_CONFIG), 환경 targets(기본 셋 다, 프로덕션은 그 프로젝트의 소유자·관리자만)."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}connect_edge_config_token 읽기 토큰을 프로젝트에 연결
파괴적
읽기 토큰을 같은 조직의 다른 프로젝트 배포에 변수로 연결해요. 이미 연결돼 있으면 변수 이름과 환경을 바꿔요. 그 프로젝트의 개발자 이상(프로덕션은 소유자·관리자)이어야 해요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/edge-config/tokens/{id}/connections/{ref} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | 읽기 토큰 id. list_edge_config_tokens로 확인해요. |
target | string, pattern ^[a-z]{20}$ | 예 | 연결할 같은 조직의 프로젝트. |
variable | string, pattern ^[A-Za-z_][A-Za-z0-9_]{0,63}$ | 아니요 | 배포에서 읽을 변수 이름. 기본 GLOBAL_CONFIG. |
targets | array<string>, production | preview | development, min items 1 | 아니요 | 변수가 들어갈 환경. 기본은 셋 다. 프로덕션은 그 프로젝트의 소유자·관리자만. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "읽기 토큰 id. list_edge_config_tokens로 확인해요."
},
"target": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "연결할 같은 조직의 프로젝트."
},
"variable": {
"type": "string",
"pattern": "^[A-Za-z_][A-Za-z0-9_]{0,63}$",
"description": "배포에서 읽을 변수 이름. 기본 GLOBAL_CONFIG."
},
"targets": {
"type": "array",
"items": {
"type": "string",
"enum": [
"production",
"preview",
"development"
]
},
"minItems": 1,
"uniqueItems": true,
"description": "변수가 들어갈 환경. 기본은 셋 다. 프로덕션은 그 프로젝트의 소유자·관리자만."
}
},
"required": [
"ref",
"id",
"target"
],
"additionalProperties": false
}disconnect_edge_config_token 읽기 토큰 연결 끊기
파괴적
읽기 토큰을 한 프로젝트에서 떼요. 그 프로젝트의 다음 배포부터 변수가 빠져요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | DELETE /projects/{ref}/edge-config/tokens/{id}/connections/{ref} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | 읽기 토큰 id. list_edge_config_tokens로 확인해요. |
target | string, pattern ^[a-z]{20}$ | 예 | 연결할 같은 조직의 프로젝트. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "읽기 토큰 id. list_edge_config_tokens로 확인해요."
},
"target": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "연결할 같은 조직의 프로젝트."
}
},
"required": [
"ref",
"id",
"target"
],
"additionalProperties": false
}revoke_edge_config_token 읽기 토큰 폐기
파괴적
읽기 토큰을 폐기해요. 바로 읽지 못하고, 연결된 프로젝트의 다음 배포부터 변수가 빠져요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 항상 물어요 |
| REST | DELETE /projects/{ref}/edge-config/tokens/{id} |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | 읽기 토큰 id. list_edge_config_tokens로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "읽기 토큰 id. list_edge_config_tokens로 확인해요."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}get_deployment_retention 배포 보관 기간
읽기 전용
배포를 종류별로 며칠 남기는지예요: days(적용 값), project_days(null은 요금제), plan_days. 늘 남기는 배포(always_kept)와 삭제 후 되돌릴 수 있는 날(restore_days)도 와요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/deployment-retention |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_deployment_retention 배포 보관 기간 바꾸기
파괴적
배포 종류별 보관 기간을 바꿔요. 기간이 지난 배포는 삭제되고 3일 동안 restore_deployment로 되돌릴 수 있어요. 최근 배포와 서비스 중인 배포는 기간과 상관없이 남아요. 프로젝트 관리자만 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/deployment-retention |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
canceled_days | string, min 1, max 3650 | 아니요 | 취소·건너뛴 배포를 남기는 날 수(1~3650). null이면 요금제 기본값. 적지 않으면 그대로. |
error_days | string, min 1, max 3650 | 아니요 | 실패한 배포를 남기는 날 수(1~3650). null이면 요금제 기본값. 적지 않으면 그대로. |
preview_days | string, min 1, max 3650 | 아니요 | 프리뷰 배포를 남기는 날 수(1~3650). null이면 요금제 기본값. 적지 않으면 그대로. |
production_days | string, min 1, max 3650 | 아니요 | 프로덕션 배포를 남기는 날 수(1~3650). null이면 요금제 기본값. 적지 않으면 그대로. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"canceled_days": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 3650,
"description": "취소·건너뛴 배포를 남기는 날 수(1~3650). null이면 요금제 기본값. 적지 않으면 그대로."
},
"error_days": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 3650,
"description": "실패한 배포를 남기는 날 수(1~3650). null이면 요금제 기본값. 적지 않으면 그대로."
},
"preview_days": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 3650,
"description": "프리뷰 배포를 남기는 날 수(1~3650). null이면 요금제 기본값. 적지 않으면 그대로."
},
"production_days": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 3650,
"description": "프로덕션 배포를 남기는 날 수(1~3650). null이면 요금제 기본값. 적지 않으면 그대로."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_protection_scope 프리뷰 보호 범위
파괴적
보호할 주소와 예외를 정해요. scope: previews(브랜치 프리뷰와 배포마다의 주소), generated(프로덕션의 기본 주소까지), all(연결한 도메인까지). trusted_ips는 로그인 없이 들이는 IP·CIDR(100개까지), options_paths는 그냥 통과시키는 경로(예: /api/:path*, 50개까지)예요. 빠진 항목은 그대로예요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
scope | string, previews | generated | all | 아니요 | |
trusted_ips | array<string> | 아니요 | IP나 CIDR. 예: ["203.0.113.4", "10.0.0.0/8"]. []이면 모두 지워요. |
options_paths | array<string> | 아니요 | /로 시작하는 경로. 예: ["/api/:path*"]. []이면 모두 지워요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"scope": {
"type": "string",
"enum": [
"previews",
"generated",
"all"
]
},
"trusted_ips": {
"type": "array",
"items": {
"type": "string"
},
"description": "IP나 CIDR. 예: [\"203.0.113.4\", \"10.0.0.0/8\"]. []이면 모두 지워요."
},
"options_paths": {
"type": "array",
"items": {
"type": "string"
},
"description": "/로 시작하는 경로. 예: [\"/api/:path*\"]. []이면 모두 지워요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_bypass_secret 보호 우회 키 만들기
추가만 함
보호된 주소를 로그인 없이 여는 키를 만들어요. E2E 테스트나 AI가 자기가 배포한 프리뷰를 확인할 때 x-blackwall-protection-bypass 헤더에 넣어요. 값은 이 응답에서만 보여요. 프로젝트마다 20개까지이고 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string, max length 60 | 아니요 | 어디에 쓰는 키인지. 비우면 automation. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"maxLength": 60,
"description": "어디에 쓰는 키인지. 비우면 automation."
}
},
"required": [
"ref"
],
"additionalProperties": false
}revoke_bypass_secret 보호 우회 키 폐기
파괴적
우회 키를 지워요. 그 키로 오는 요청은 바로 막혀요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | get_preview_protection의 bypass_secrets[].id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "get_preview_protection의 bypass_secrets[].id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}list_environments 환경 목록
읽기 전용
프로덕션과 직접 만든 환경(staging, qa 같은)을 돌려줘요: 따라가는 브랜치, 자동으로 받는지(auto_assign), 주소, 연결된 도메인, 지금 보여 주는 배포. 연결할 수 있는 도메인(domains)과 시스템 환경 변수를 넣는지(expose_system_env)도 함께 와요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_environment 환경 만들기
추가만 함
스테이징 같은 환경을 만들어요. 자기 주소, 도메인, 환경 변수(set_env_vars의 target에 이름)를 따로 가져요. 이름은 영문 소문자·숫자·-로 40자까지이고 production·preview·development는 안 돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string, pattern ^[a-z0-9]([a-z0-9-]{0,38}[a-z0-9])?$ | 예 | 환경 이름. 예: staging |
branch | string | 아니요 | 이 환경이 따라갈 브랜치. 정확한 이름(예: staging)이나 *로 끝나는 접두사(예: release/*). 비우거나 null이면 promote_deployment로만 받아요. |
auto_assign | boolean | 아니요 | true(기본)면 빌드가 끝나는 대로 이 환경에 나가요. false면 promote_deployment를 기다려요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"pattern": "^[a-z0-9]([a-z0-9-]{0,38}[a-z0-9])?$",
"description": "환경 이름. 예: staging"
},
"branch": {
"type": [
"string",
"null"
],
"description": "이 환경이 따라갈 브랜치. 정확한 이름(예: staging)이나 *로 끝나는 접두사(예: release/*). 비우거나 null이면 promote_deployment로만 받아요."
},
"auto_assign": {
"type": "boolean",
"description": "true(기본)면 빌드가 끝나는 대로 이 환경에 나가요. false면 promote_deployment를 기다려요."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}update_environment 환경 바꾸기
파괴적
환경이 따라가는 브랜치와 자동으로 받는지를 바꿔요. 프로덕션은 auto_assign만 바뀌어요(브랜치는 update_app의 production_branch). 빠진 항목은 그대로예요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | list_environments의 name. |
branch | string | 아니요 | 이 환경이 따라갈 브랜치. 정확한 이름(예: staging)이나 *로 끝나는 접두사(예: release/*). 비우거나 null이면 promote_deployment로만 받아요. |
auto_assign | boolean | 아니요 | true(기본)면 빌드가 끝나는 대로 이 환경에 나가요. false면 promote_deployment를 기다려요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "list_environments의 name."
},
"branch": {
"type": [
"string",
"null"
],
"description": "이 환경이 따라갈 브랜치. 정확한 이름(예: staging)이나 *로 끝나는 접두사(예: release/*). 비우거나 null이면 promote_deployment로만 받아요."
},
"auto_assign": {
"type": "boolean",
"description": "true(기본)면 빌드가 끝나는 대로 이 환경에 나가요. false면 promote_deployment를 기다려요."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}remove_environment 환경 지우기
파괴적
직접 만든 환경을 지워요. 배포 기록은 남고, 환경의 주소·도메인 연결·환경 변수가 사라져요. 프로덕션은 지울 수 없어요. 사용자가 요청할 때만 쓰고 confirm에 환경 이름을 넣으세요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string | 예 | list_environments의 name. |
confirm | string | 예 | 환경 이름. name과 정확히 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"description": "list_environments의 name."
},
"confirm": {
"type": "string",
"description": "환경 이름. name과 정확히 같아야 해요."
}
},
"required": [
"ref",
"name",
"confirm"
],
"additionalProperties": false
}set_domain_environment 도메인을 환경에 연결
파괴적
확인된 도메인 하나가 어느 환경(production이나 직접 만든 환경)의 배포를 보여 줄지 정해요. 예: staging.example.com을 staging에. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
hostname | string | 예 | list_environments의 domains[].hostname. |
environment | string | 예 | list_environments의 name. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"hostname": {
"type": "string",
"description": "list_environments의 domains[].hostname."
},
"environment": {
"type": "string",
"description": "list_environments의 name."
}
},
"required": [
"ref",
"hostname",
"environment"
],
"additionalProperties": false
}get_flag 기능 플래그 보기
읽기 전용
플래그 하나의 전부를 돌려줘요: 종류, 변형, 환경마다 켜졌는지·꺼졌을 때 값(off_variant)·기본으로 내보내는 것(fallthrough)·규칙(rules, 위에서부터 처음 맞는 것). 고칠 수 있는 환경 이름도 함께 와요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 64 | 예 | 플래그 키. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 64,
"description": "플래그 키."
}
},
"required": [
"ref",
"key"
],
"additionalProperties": false
}create_flag 기능 플래그 만들기
추가만 함
플래그를 만들어요. 모든 환경에서 꺼진 채로 시작하고, boolean은 변형 on(true)·off(false)를 가져요. 키는 영문 소문자·숫자로 시작하고 끝나며 점·밑줄·하이픈을 넣어 64자까지예요. 프로젝트마다 500개까지이고 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 64 | 예 | 플래그 키. |
kind | string, boolean | string | number | json | 예 | |
description | string, max length 500 | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 64,
"description": "플래그 키."
},
"kind": {
"type": "string",
"enum": [
"boolean",
"string",
"number",
"json"
]
},
"description": {
"type": "string",
"maxLength": 500
}
},
"required": [
"ref",
"key",
"kind"
],
"additionalProperties": false
}update_flag 기능 플래그 바꾸기
파괴적
설명과 변형을 바꿔요. variants는 전체 목록이고, 어느 환경이 쓰고 있는 변형은 지울 수 없어요. 값의 모양은 플래그 종류를 따라요. 빠진 항목은 그대로예요. 변형은 모든 환경에 나가니 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 64 | 예 | 플래그 키. |
description | string, max length 500 | 아니요 | |
variants | array<object> | 아니요 | 예: [{"id": "control", "value": "blue"}, {"id": "test", "value": "green"}] |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 64,
"description": "플래그 키."
},
"description": {
"type": "string",
"maxLength": 500
},
"variants": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"value": {}
},
"required": [
"id",
"value"
]
},
"description": "예: [{\"id\": \"control\", \"value\": \"blue\"}, {\"id\": \"test\", \"value\": \"green\"}]"
}
},
"required": [
"ref",
"key"
],
"additionalProperties": false
}set_flag_environment 환경의 플래그 설정
파괴적
한 환경에서 켜졌는지(enabled), 꺼졌을 때 내보낼 변형(off_variant), 규칙에 안 맞을 때 내보낼 것(serve)을 정해요. 빠진 항목은 그대로예요. 프로덕션은 소유자·관리자, 그 밖의 환경은 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 64 | 예 | 플래그 키. |
environment | string | 예 | 환경: production, preview, development, 또는 list_environments의 직접 만든 환경. |
enabled | boolean | 아니요 | |
off_variant | string | 아니요 | |
serve | object | 아니요 | 내보낼 것. 변형 하나는 {"variant": "on"}, 비율로 나누려면 {"rollout": [{"variant": "on", "weight": 20}, {"variant": "off", "weight": 80}], "bucket_by": "user.id"}(합 100). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 64,
"description": "플래그 키."
},
"environment": {
"type": "string",
"description": "환경: production, preview, development, 또는 list_environments의 직접 만든 환경."
},
"enabled": {
"type": "boolean"
},
"off_variant": {
"type": "string"
},
"serve": {
"type": "object",
"description": "내보낼 것. 변형 하나는 {\"variant\": \"on\"}, 비율로 나누려면 {\"rollout\": [{\"variant\": \"on\", \"weight\": 20}, {\"variant\": \"off\", \"weight\": 80}], \"bucket_by\": \"user.id\"}(합 100).",
"properties": {
"variant": {
"type": "string"
},
"rollout": {
"type": "array",
"items": {
"type": "object",
"properties": {
"variant": {
"type": "string"
},
"weight": {
"type": "number"
}
},
"required": [
"variant",
"weight"
]
}
},
"bucket_by": {
"type": "string"
}
}
}
},
"required": [
"ref",
"key",
"environment"
],
"additionalProperties": false
}add_flag_rule 플래그 규칙 추가
파괴적
한 환경의 규칙 맨 아래에 규칙을 더해요. 조건이 모두 맞는 컨텍스트에 serve를 내보내요. 예: user.email이 @example.com으로 끝나면 on. 프로덕션은 소유자·관리자, 그 밖의 환경은 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 64 | 예 | 플래그 키. |
environment | string | 예 | 환경: production, preview, development, 또는 list_environments의 직접 만든 환경. |
conditions | array<object>, min items 1, max items 3 | 예 | 모두 맞아야 하는 조건 1~3개. attribute는 컨텍스트의 점 경로(예: user.email), values의 값에는 쉼표를 넣을 수 없어요. in_segment·not_in_segment는 values에 세그먼트 키. |
serve | object | 예 | 내보낼 것. 변형 하나는 {"variant": "on"}, 비율로 나누려면 {"rollout": [{"variant": "on", "weight": 20}, {"variant": "off", "weight": 80}], "bucket_by": "user.id"}(합 100). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 64,
"description": "플래그 키."
},
"environment": {
"type": "string",
"description": "환경: production, preview, development, 또는 list_environments의 직접 만든 환경."
},
"conditions": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"description": "모두 맞아야 하는 조건 1~3개. attribute는 컨텍스트의 점 경로(예: user.email), values의 값에는 쉼표를 넣을 수 없어요. in_segment·not_in_segment는 values에 세그먼트 키.",
"items": {
"type": "object",
"properties": {
"attribute": {
"type": "string"
},
"op": {
"type": "string",
"enum": [
"is",
"is_not",
"contains",
"not_contains",
"starts_with",
"ends_with",
"domain_is",
"gt",
"lt",
"exists",
"not_exists",
"in_segment",
"not_in_segment"
]
},
"values": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"op"
]
}
},
"serve": {
"type": "object",
"description": "내보낼 것. 변형 하나는 {\"variant\": \"on\"}, 비율로 나누려면 {\"rollout\": [{\"variant\": \"on\", \"weight\": 20}, {\"variant\": \"off\", \"weight\": 80}], \"bucket_by\": \"user.id\"}(합 100).",
"properties": {
"variant": {
"type": "string"
},
"rollout": {
"type": "array",
"items": {
"type": "object",
"properties": {
"variant": {
"type": "string"
},
"weight": {
"type": "number"
}
},
"required": [
"variant",
"weight"
]
}
},
"bucket_by": {
"type": "string"
}
}
}
},
"required": [
"ref",
"key",
"environment",
"conditions",
"serve"
],
"additionalProperties": false
}move_flag_rule 플래그 규칙 순서 바꾸기
파괴적
규칙을 한 칸 위나 아래로 옮겨요. 위의 규칙이 먼저 맞아요. 프로덕션은 소유자·관리자, 그 밖의 환경은 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 64 | 예 | 플래그 키. |
environment | string | 예 | 환경: production, preview, development, 또는 list_environments의 직접 만든 환경. |
rule_id | string | 예 | get_flag의 environments.<환경>.rules[].id. |
direction | string, up | down | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 64,
"description": "플래그 키."
},
"environment": {
"type": "string",
"description": "환경: production, preview, development, 또는 list_environments의 직접 만든 환경."
},
"rule_id": {
"type": "string",
"description": "get_flag의 environments.<환경>.rules[].id."
},
"direction": {
"type": "string",
"enum": [
"up",
"down"
]
}
},
"required": [
"ref",
"key",
"environment",
"rule_id",
"direction"
],
"additionalProperties": false
}remove_flag_rule 플래그 규칙 삭제
파괴적
한 환경의 규칙 하나를 지워요. 프로덕션은 소유자·관리자, 그 밖의 환경은 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 64 | 예 | 플래그 키. |
environment | string | 예 | 환경: production, preview, development, 또는 list_environments의 직접 만든 환경. |
rule_id | string | 예 | get_flag의 environments.<환경>.rules[].id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 64,
"description": "플래그 키."
},
"environment": {
"type": "string",
"description": "환경: production, preview, development, 또는 list_environments의 직접 만든 환경."
},
"rule_id": {
"type": "string",
"description": "get_flag의 environments.<환경>.rules[].id."
}
},
"required": [
"ref",
"key",
"environment",
"rule_id"
],
"additionalProperties": false
}set_flag_archived 기능 플래그 보관
파괴적
다 쓴 플래그를 보관하거나(archived: true) 되살려요. 보관한 플래그는 모든 환경에서 꺼진 값을 내보내요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 64 | 예 | 플래그 키. |
archived | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 64,
"description": "플래그 키."
},
"archived": {
"type": "boolean"
}
},
"required": [
"ref",
"key",
"archived"
],
"additionalProperties": false
}list_flag_segments 플래그 세그먼트 목록
읽기 전용
여러 플래그 규칙이 함께 쓰는 사용자 묶음(세그먼트)을 돌려줘요: 조건, 언제나 넣는 id(included), 언제나 빼는 id(excluded), 쓰는 플래그(used_by).
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_flag_segment 플래그 세그먼트 만들기
추가만 함
빈 세그먼트를 만들어요. update_flag_segment로 조건과 목록을 넣고, 규칙의 조건에 in_segment로 써요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 64 | 예 | 세그먼트 키. 플래그 키와 같은 규칙이에요. |
description | string, max length 500 | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 64,
"description": "세그먼트 키. 플래그 키와 같은 규칙이에요."
},
"description": {
"type": "string",
"maxLength": 500
}
},
"required": [
"ref",
"key"
],
"additionalProperties": false
}update_flag_segment 플래그 세그먼트 바꾸기
파괴적
세그먼트의 조건(모두 맞아야 함, 1~3개), 언제나 넣는 id, 언제나 빼는 id(각각 1,000개까지), 설명을 바꿔요. 조건과 included가 둘 다 비면 안 돼요. 빠진 항목은 그대로예요. 세그먼트는 프로덕션 규칙에도 쓰이니 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 64 | 예 | list_flag_segments의 key. |
conditions | array<object>, min items 0, max items 3 | 아니요 | 모두 맞아야 하는 조건 1~3개. attribute는 컨텍스트의 점 경로(예: user.email), values의 값에는 쉼표를 넣을 수 없어요. in_segment·not_in_segment는 values에 세그먼트 키. |
included | array<string> | 아니요 | |
excluded | array<string> | 아니요 | |
description | string, max length 500 | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 64,
"description": "list_flag_segments의 key."
},
"conditions": {
"type": "array",
"minItems": 0,
"maxItems": 3,
"description": "모두 맞아야 하는 조건 1~3개. attribute는 컨텍스트의 점 경로(예: user.email), values의 값에는 쉼표를 넣을 수 없어요. in_segment·not_in_segment는 values에 세그먼트 키.",
"items": {
"type": "object",
"properties": {
"attribute": {
"type": "string"
},
"op": {
"type": "string",
"enum": [
"is",
"is_not",
"contains",
"not_contains",
"starts_with",
"ends_with",
"domain_is",
"gt",
"lt",
"exists",
"not_exists",
"in_segment",
"not_in_segment"
]
},
"values": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"op"
]
}
},
"included": {
"type": "array",
"items": {
"type": "string"
}
},
"excluded": {
"type": "array",
"items": {
"type": "string"
}
},
"description": {
"type": "string",
"maxLength": 500
}
},
"required": [
"ref",
"key"
],
"additionalProperties": false
}remove_flag_segment 플래그 세그먼트 삭제
파괴적
세그먼트를 지워요. 규칙이 쓰고 있으면 지울 수 없어요(list_flag_segments의 used_by). 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
key | string, max length 64 | 예 | list_flag_segments의 key. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"key": {
"type": "string",
"maxLength": 64,
"description": "list_flag_segments의 key."
}
},
"required": [
"ref",
"key"
],
"additionalProperties": false
}list_flag_sdk_keys 플래그 SDK 키 목록
읽기 전용
/flags/v1/evaluate를 부르는 키를 돌려줘요: 환경, 종류(server·client), 이름, 앞부분, 마지막 사용. 값은 만들 때만 보여요. 개발자 이상이 볼 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_flag_sdk_key 플래그 SDK 키 만들기
추가만 함
한 환경의 플래그를 읽는 키를 만들어요. server는 서버에만 두고, client는 브라우저에 넣어도 돼요. 값은 이 응답에서만 보여요. 프로젝트마다 50개까지예요. 프로덕션 키는 소유자·관리자, 그 밖의 환경은 개발자 이상이 만들어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
environment | string | 예 | 환경: production, preview, development, 또는 list_environments의 직접 만든 환경. |
kind | string, server | client | 예 | |
label | string, max length 60 | 아니요 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"environment": {
"type": "string",
"description": "환경: production, preview, development, 또는 list_environments의 직접 만든 환경."
},
"kind": {
"type": "string",
"enum": [
"server",
"client"
]
},
"label": {
"type": "string",
"maxLength": 60
}
},
"required": [
"ref",
"environment",
"kind"
],
"additionalProperties": false
}revoke_flag_sdk_key 플래그 SDK 키 폐기
파괴적
SDK 키를 폐기해요. 그 키로 오는 요청은 바로 막혀요. 프로덕션 키는 소유자·관리자, 그 밖의 환경은 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_flag_sdk_keys의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_flag_sdk_keys의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}list_alert_rules 경보 규칙 목록
읽기 전용
경보 규칙과 지금 상태(state: ok·firing, last_value, last_fired_at)를 돌려줘요. 경보는 조직의 알림 채널과 메일로 가요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_alert_rule 경보 규칙 만들기
추가만 함
1분마다 값을 보고 threshold를 넘으면 알려요. kind: error_rate(5xx 비율 %), p95(p95 응답 시간 ms), function_errors(함수 5xx 수), usage(요금제 한도 사용률 %), firewall_blocks(방화벽이 막거나 확인한 요청 수). target: error_rate·p95는 서비스(all, api, auth, functions, realtime, site, server), function_errors는 함수 이름, usage는 한도 항목, firewall_blocks는 방화벽 규칙 id. 비우면 전체예요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string, min length 1, max length 80 | 예 | |
kind | string, error_rate | p95 | function_errors | usage | firewall_blocks | 예 | |
target | string | 아니요 | 서비스(all, api, auth, functions, realtime, site, server), 함수 이름, 한도 항목, 규칙 id. 비우면 전체. |
threshold | number, min 0 | 예 | 이 값을 넘으면 발생해요. 비율은 0~1000. |
window_minutes | integer, min 1, max 1440 | 예 | 이 기간(분) 동안의 값을 봐요. |
severity | string, warning | critical | 아니요 | 기본 warning. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"kind": {
"type": "string",
"enum": [
"error_rate",
"p95",
"function_errors",
"usage",
"firewall_blocks"
]
},
"target": {
"type": [
"string",
"null"
],
"description": "서비스(all, api, auth, functions, realtime, site, server), 함수 이름, 한도 항목, 규칙 id. 비우면 전체."
},
"threshold": {
"type": "number",
"minimum": 0,
"description": "이 값을 넘으면 발생해요. 비율은 0~1000."
},
"window_minutes": {
"type": "integer",
"minimum": 1,
"maximum": 1440,
"description": "이 기간(분) 동안의 값을 봐요."
},
"severity": {
"type": "string",
"enum": [
"warning",
"critical"
],
"description": "기본 warning."
}
},
"required": [
"ref",
"name",
"kind",
"threshold",
"window_minutes"
],
"additionalProperties": false
}set_alert_rule_enabled 경보 규칙 켜기·끄기
파괴적
경보 규칙을 멈추거나 다시 켜요. 끄면 상태가 ok로 돌아가요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_alert_rules의 id. |
enabled | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_alert_rules의 id."
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"id",
"enabled"
],
"additionalProperties": false
}remove_alert_rule 경보 규칙 삭제
파괴적
경보 규칙을 지워요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_alert_rules의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_alert_rules의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}list_project_webhooks 프로젝트 웹훅 목록
읽기 전용
프로젝트의 이벤트(배포 시작·성공·실패·승격, 환경 변수, 도메인, 백업, 가입 등)를 보내는 웹훅과 서명 키(signing_secret), 고를 수 있는 이벤트(events)를 돌려줘요. 데이터베이스의 줄 변경은 list_db_webhooks예요. 개발자 이상이 볼 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_project_webhook 프로젝트 웹훅 만들기
추가만 함 외부로 나감
프로젝트 이벤트를 공개 https 주소로 보내는 웹훅을 만들어요(Make, Zapier, 슬랙 같은 외부 자동화). events를 비우면 모든 이벤트이고, <묶음>.*(예: deployment.*)는 그 묶음 전부예요. 서명 키는 응답의 signing_secret이에요. 프로젝트마다 10개까지이고 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string, min length 1, max length 60 | 예 | |
url | string | 예 | 공개된 https 주소. 사설·내부 주소는 안 돼요. |
events | array<string> | 아니요 | 예: ["deployment.ready", "deployment.error"]. 묶음: deployment.*, project.*, env.*, domain.*, backup.*, auth.*. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"url": {
"type": "string",
"description": "공개된 https 주소. 사설·내부 주소는 안 돼요."
},
"events": {
"type": "array",
"items": {
"type": "string"
},
"description": "예: [\"deployment.ready\", \"deployment.error\"]. 묶음: deployment.*, project.*, env.*, domain.*, backup.*, auth.*."
}
},
"required": [
"ref",
"name",
"url"
],
"additionalProperties": false
}set_project_webhook_enabled 프로젝트 웹훅 켜기·끄기
파괴적
웹훅을 멈추거나 다시 보내게 해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_project_webhooks의 id. |
enabled | boolean | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_project_webhooks의 id."
},
"enabled": {
"type": "boolean"
}
},
"required": [
"ref",
"id",
"enabled"
],
"additionalProperties": false
}test_project_webhook 프로젝트 웹훅 시험
추가만 함 외부로 나감
서명한 ping 이벤트를 하나 보내요. 결과는 list_project_webhook_deliveries에 나와요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_project_webhooks의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_project_webhooks의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}list_project_webhook_deliveries 프로젝트 웹훅 전달 기록
읽기 전용
웹훅이 보낸 최근 100건: 이벤트, 상태(pending·sent·failed), 시도 횟수, 실패 이유. 개발자 이상이 볼 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_project_webhooks의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_project_webhooks의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}retry_project_webhook_delivery 프로젝트 웹훅 다시 보내기
추가만 함 외부로 나감
끝난 전달 하나를 새 전달로 다시 보내요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
delivery_id | integer, min 1 | 예 | list_project_webhook_deliveries의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"delivery_id": {
"type": "integer",
"minimum": 1,
"description": "list_project_webhook_deliveries의 id."
}
},
"required": [
"ref",
"delivery_id"
],
"additionalProperties": false
}remove_project_webhook 프로젝트 웹훅 삭제
파괴적
웹훅을 지워요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_project_webhooks의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_project_webhooks의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}get_firewall 방화벽 규칙 보기
읽기 전용
방화벽의 초안(draft: 규칙과 관리 규칙), 게시된 버전(published_version, published), 초안에서 바뀐 것(changes), 공격 챌린지 모드, 버전 기록을 돌려줘요. 규칙은 위에서부터 차례로 보고, 요청을 끝내는 동작(deny, challenge, redirect, bypass, 넘은 rate_limit)이 처음 맞으면 멈춰요. IP 차단·허용 목록은 get_edge예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}save_firewall_rule 방화벽 규칙 저장
파괴적
규칙 하나를 초안에 저장해요. id를 빼면 맨 끝에 새로 더하고, id를 주면 그 규칙을 바꿔요. 게이트웨이가 컴파일할 수 없는 규칙(느린 정규식, 잘못된 CIDR 등)은 콘솔과 같은 말로 거절해요. publish_firewall로 게시해야 적용돼요. 프로젝트마다 100개까지이고 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 아니요 | 바꿀 규칙의 id(get_firewall의 draft.rules[].id). 빼면 새 규칙이에요. |
name | string, min length 1, max length 80 | 예 | 규칙 이름. 80자까지. |
enabled | boolean | 아니요 | 기본 true. false면 저장만 하고 적용하지 않아요. |
groups | array<array>, min items 1, max items 10 | 예 | 조건 묶음 1~10개. 묶음끼리는 OR, 묶음 안의 조건(10개까지)은 AND예요. 조건은 {field, op, value, key?, negate?}: field는 path, method, host, header, query, user_agent, ip, country, op는 eq, prefix, suffix, contains, regex, in, exists. path·host·user_agent는 eq·prefix·suffix·contains·regex, method·ip·country는 in(쉼표로 여러 값), header·query는 key에 이름을 넣고 exists도 돼요. 예: [[{"field": "path", "op": "prefix", "value": "/admin"}, {"field": "ip", "op": "in", "value": "203.0.113.0/24", "negate": true}]] |
action | object | 예 | 맞으면 할 일. type: log(기록하고 다음 규칙으로), deny(403), challenge(브라우저 확인), bypass(남은 규칙·관리 규칙·공격 모드를 건너뜀), redirect(location, status 301·302·307·308), rate_limit(limit 1~100000, window_seconds 1~3600, key ip 또는 header와 header 이름, then deny·challenge·log). 예: {"type": "rate_limit", "limit": 100, "window_seconds": 60, "key": "ip", "then": "deny"} |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "바꿀 규칙의 id(get_firewall의 draft.rules[].id). 빼면 새 규칙이에요."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "규칙 이름. 80자까지."
},
"enabled": {
"type": "boolean",
"description": "기본 true. false면 저장만 하고 적용하지 않아요."
},
"groups": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"description": "조건 묶음 1~10개. 묶음끼리는 OR, 묶음 안의 조건(10개까지)은 AND예요. 조건은 {field, op, value, key?, negate?}: field는 path, method, host, header, query, user_agent, ip, country, op는 eq, prefix, suffix, contains, regex, in, exists. path·host·user_agent는 eq·prefix·suffix·contains·regex, method·ip·country는 in(쉼표로 여러 값), header·query는 key에 이름을 넣고 exists도 돼요. 예: [[{\"field\": \"path\", \"op\": \"prefix\", \"value\": \"/admin\"}, {\"field\": \"ip\", \"op\": \"in\", \"value\": \"203.0.113.0/24\", \"negate\": true}]]",
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"enum": [
"path",
"method",
"host",
"header",
"query",
"user_agent",
"ip",
"country"
]
},
"op": {
"type": "string",
"enum": [
"eq",
"prefix",
"suffix",
"contains",
"regex",
"in",
"exists"
]
},
"value": {
"type": "string"
},
"key": {
"type": "string"
},
"negate": {
"type": "boolean"
}
},
"required": [
"field",
"op"
]
}
}
},
"action": {
"type": "object",
"description": "맞으면 할 일. type: log(기록하고 다음 규칙으로), deny(403), challenge(브라우저 확인), bypass(남은 규칙·관리 규칙·공격 모드를 건너뜀), redirect(location, status 301·302·307·308), rate_limit(limit 1~100000, window_seconds 1~3600, key ip 또는 header와 header 이름, then deny·challenge·log). 예: {\"type\": \"rate_limit\", \"limit\": 100, \"window_seconds\": 60, \"key\": \"ip\", \"then\": \"deny\"}",
"properties": {
"type": {
"type": "string",
"enum": [
"log",
"deny",
"challenge",
"bypass",
"redirect",
"rate_limit"
]
},
"location": {
"type": "string"
},
"status": {
"type": "integer",
"enum": [
301,
302,
307,
308
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"window_seconds": {
"type": "integer",
"minimum": 1,
"maximum": 3600
},
"key": {
"type": "string",
"enum": [
"ip",
"header"
]
},
"header": {
"type": "string"
},
"then": {
"type": "string",
"enum": [
"deny",
"challenge",
"log"
]
}
},
"required": [
"type"
]
}
},
"required": [
"ref",
"name",
"groups",
"action"
],
"additionalProperties": false
}move_firewall_rule 방화벽 규칙 순서 바꾸기
파괴적
초안에서 규칙을 한 칸 위나 아래로 옮겨요. 규칙은 위에서부터 봐요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | get_firewall의 draft.rules[].id. |
direction | string, up | down | 예 | up이면 한 칸 위로, down이면 아래로. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "get_firewall의 draft.rules[].id."
},
"direction": {
"type": "string",
"enum": [
"up",
"down"
],
"description": "up이면 한 칸 위로, down이면 아래로."
}
},
"required": [
"ref",
"id",
"direction"
],
"additionalProperties": false
}set_firewall_rule_enabled 방화벽 규칙 켜기·끄기
파괴적
초안에서 규칙을 켜거나 꺼요. 게시해야 적용돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | get_firewall의 draft.rules[].id. |
enabled | boolean | 예 | true면 켜고 false면 꺼요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "get_firewall의 draft.rules[].id."
},
"enabled": {
"type": "boolean",
"description": "true면 켜고 false면 꺼요."
}
},
"required": [
"ref",
"id",
"enabled"
],
"additionalProperties": false
}remove_firewall_rule 방화벽 규칙 삭제
파괴적
초안에서 규칙을 지워요. 게시하기 전에는 reset_firewall_draft로 되돌릴 수 있어요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | get_firewall의 draft.rules[].id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "get_firewall의 draft.rules[].id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}set_firewall_managed 봇·관리 규칙
파괴적
규칙 없이 막는 관리 규칙의 모드(off, log, deny)를 초안에 정해요. bots는 SEO 크롤러·스크레이퍼·공격 도구, ai_bots는 GPTBot·ClaudeBot 같은 AI 학습 크롤러, ai_search_bots는 ChatGPT 검색·Perplexity 같은 AI 검색·답변 봇(막으면 AI 답변에서 사이트가 빠져요), rulesets는 공격 패턴(sensitive_files, wordpress, traversal, sqli, xss, shell)이에요. 빠진 항목은 그대로이고, 게시해야 적용돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bots | string, off | log | deny | 아니요 | 알려진 봇. off, log(기록만), deny. |
ai_bots | string, off | log | deny | 아니요 | AI 학습 크롤러. off, log(기록만), deny. |
ai_search_bots | string, off | log | deny | 아니요 | AI 검색·답변 봇. deny면 ChatGPT 검색·Perplexity 답변에서 사이트가 빠져요. off, log(기록만), deny. |
rulesets | object | 아니요 | 공격 패턴마다의 모드. 예: {"sqli": "deny", "wordpress": "log"}. 이름: sensitive_files, wordpress, traversal, sqli, xss, shell. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bots": {
"type": "string",
"enum": [
"off",
"log",
"deny"
],
"description": "알려진 봇. off, log(기록만), deny."
},
"ai_bots": {
"type": "string",
"enum": [
"off",
"log",
"deny"
],
"description": "AI 학습 크롤러. off, log(기록만), deny."
},
"ai_search_bots": {
"type": "string",
"enum": [
"off",
"log",
"deny"
],
"description": "AI 검색·답변 봇. deny면 ChatGPT 검색·Perplexity 답변에서 사이트가 빠져요. off, log(기록만), deny."
},
"rulesets": {
"type": "object",
"properties": {
"sensitive_files": {
"type": "string",
"enum": [
"off",
"log",
"deny"
]
},
"wordpress": {
"type": "string",
"enum": [
"off",
"log",
"deny"
]
},
"traversal": {
"type": "string",
"enum": [
"off",
"log",
"deny"
]
},
"sqli": {
"type": "string",
"enum": [
"off",
"log",
"deny"
]
},
"xss": {
"type": "string",
"enum": [
"off",
"log",
"deny"
]
},
"shell": {
"type": "string",
"enum": [
"off",
"log",
"deny"
]
}
},
"additionalProperties": false,
"description": "공격 패턴마다의 모드. 예: {\"sqli\": \"deny\", \"wordpress\": \"log\"}. 이름: sensitive_files, wordpress, traversal, sqli, xss, shell."
}
},
"required": [
"ref"
],
"additionalProperties": false
}publish_firewall 방화벽 게시
파괴적
초안을 새 버전으로 게시해요. 몇 초 안에 모든 서버가 이 규칙으로 요청을 막거나 통과시켜요. 먼저 get_firewall의 changes로 바뀐 것을 확인하세요. 잘못 게시했으면 restore_firewall_version으로 이전 버전을 불러와 다시 게시해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
note | string, max length 200 | 아니요 | 무엇을 왜 바꿨는지. 버전 기록에 남아요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"note": {
"type": "string",
"maxLength": 200,
"description": "무엇을 왜 바꿨는지. 버전 기록에 남아요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}reset_firewall_draft 방화벽 초안 버리기
파괴적
게시하지 않은 초안의 변경을 모두 버리고 적용 중인 규칙으로 되돌려요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}restore_firewall_version 방화벽 이전 버전 불러오기
파괴적
게시했던 버전을 초안으로 불러와요. 지금 초안은 덮어써지고, publish_firewall로 게시해야 적용돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
version | integer, min 1 | 예 | get_firewall의 versions[].version. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"version": {
"type": "integer",
"minimum": 1,
"description": "get_firewall의 versions[].version."
}
},
"required": [
"ref",
"version"
],
"additionalProperties": false
}set_attack_mode 공격 챌린지 모드
파괴적
켜면 바로 모든 방문자에게 브라우저 확인을 받아요(게시 없이 즉시). DDoS나 대량 스크래핑을 받을 때 써요. API를 부르는 프로그램도 막히니 공격이 끝나면 끄세요. hours를 주면 그 시간 뒤 저절로 꺼져요(720시간까지). 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 예 | true면 켜고 false면 꺼요. |
hours | string, min 0, max 720 | 아니요 | 켜 둘 시간. 빼거나 null이면 끌 때까지. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "true면 켜고 false면 꺼요."
},
"hours": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 720,
"description": "켜 둘 시간. 빼거나 null이면 끌 때까지."
}
},
"required": [
"ref",
"enabled"
],
"additionalProperties": false
}get_bulk_redirects 대량 리디렉트 보기
읽기 전용
올린 대량 리디렉트 버전(sets, 적용 중인 것은 active)과, 고른 버전(빼면 적용 중인 것)의 처음 100줄을 돌려줘요. 한두 개의 규칙은 get_routing_rules예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
set_id | string | 아니요 | get_bulk_redirects의 sets[].id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"set_id": {
"type": [
"integer",
"null"
],
"description": "get_bulk_redirects의 sets[].id."
}
},
"required": [
"ref"
],
"additionalProperties": false
}upload_bulk_redirects 대량 리디렉트 올리기
파괴적
CSV로 리디렉트를 새 버전으로 올려요(1만 줄, 5MB까지). 한 줄에 원래 주소,보낼 주소[,상태 코드(기본 308)[,쿼리 유지 true|false]]. 원래 주소는 /경로나 도메인/경로, 보낼 주소는 /경로나 http(s) 주소예요. activate가 true면 바로 적용하고, 아니면 activate_bulk_redirects로 적용해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
csv | string | 예 | CSV 내용. 예: "/old,/new,301\n/blog/a,https://blog.example.com/a" |
note | string, max length 200 | 아니요 | 버전 메모. |
activate | boolean | 아니요 | true면 올리자마자 적용해요. 기본 false. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"csv": {
"type": "string",
"description": "CSV 내용. 예: \"/old,/new,301\\n/blog/a,https://blog.example.com/a\""
},
"note": {
"type": "string",
"maxLength": 200,
"description": "버전 메모."
},
"activate": {
"type": "boolean",
"description": "true면 올리자마자 적용해요. 기본 false."
}
},
"required": [
"ref",
"csv"
],
"additionalProperties": false
}activate_bulk_redirects 대량 리디렉트 적용
파괴적
올린 버전 하나를 적용하거나(set_id), null로 대량 리디렉트를 꺼요. 1분 안에 모든 서버에 적용돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
set_id | string | 예 | get_bulk_redirects의 sets[].id. null이면 꺼요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"set_id": {
"type": [
"integer",
"null"
],
"description": "get_bulk_redirects의 sets[].id. null이면 꺼요."
}
},
"required": [
"ref",
"set_id"
],
"additionalProperties": false
}get_skew_protection 스큐 보호 보기
읽기 전용
스큐 보호(새 배포가 나가도 이미 열린 탭은 처음 배포의 스크립트와 데이터를 받음)가 켜졌는지와 최대 유지 기간(초)을 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_skew_protection 스큐 보호 바꾸기
파괴적
스큐 보호를 켜거나 끄고 최대 유지 기간을 정해요. 그보다 오래된 배포에는 고정하지 않아요. 빠진 항목은 그대로예요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 아니요 | true면 켜고 false면 꺼요. |
max_age_seconds | integer, 300 | 1800 | 3600 | 21600 | 43200 | 86400 | 259200 | 604800 | 아니요 | 최대 유지 기간(초): 300, 1800, 3600, 21600, 43200, 86400, 259200, 604800. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "true면 켜고 false면 꺼요."
},
"max_age_seconds": {
"type": "integer",
"enum": [
300,
1800,
3600,
21600,
43200,
86400,
259200,
604800
],
"description": "최대 유지 기간(초): 300, 1800, 3600, 21600, 43200, 86400, 259200, 604800."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_remote_cache_tokens 원격 캐시 토큰 목록
읽기 전용
Turborepo 원격 캐시 토큰(이름, 만든 시각, 마지막 사용)과 turbo에 넣을 api, team을 돌려줘요. 토큰 값은 만들 때 한 번만 보여요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_remote_cache_token 원격 캐시 토큰 만들기
추가만 함
CI나 터미널의 turbo가 이 프로젝트의 원격 캐시를 쓰는 토큰을 만들어요. 값과 넣을 환경 변수(env)는 이 응답에서만 보여요. 20개까지이고 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string, min length 1, max length 80 | 예 | 어디에 쓰는 토큰인지. 예: github-actions. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "어디에 쓰는 토큰인지. 예: github-actions."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}revoke_remote_cache_token 원격 캐시 토큰 폐기
파괴적
토큰을 없애요. 그 토큰을 쓰는 turbo는 바로 캐시를 못 써요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_remote_cache_tokens의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_remote_cache_tokens의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}get_build_settings 빌드 설정 더 보기
읽기 전용
앱마다 update_app 밖의 빌드 설정을 돌려줘요: 개발 명령(dev_command), Node.js 버전, 빌드 건너뛰기(ignored_build_step), 빌드 머신, 프로덕션 먼저(production_first), 필요한 검사(required_checks), Git LFS, 서명된 커밋만(verified_commits). 시스템 환경 변수를 넣는지(expose_system_env)도 함께 와요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_build_dev_settings 개발 명령·Node.js 버전
파괴적
앱의 개발 명령(oneend dev가 실행)과 빌드에 쓸 Node.js 메이저 버전을 정해요. 프레임워크와 빌드·설치·출력은 update_app이에요. 빠진 항목은 그대로, null은 자동 감지예요. 다음 빌드부터 적용되고 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
app | string | 예 | list_apps의 name. |
dev_command | string, max length 1024 | 아니요 | 한 줄 명령. 예: npm run dev. null이면 프리셋 기본값. |
node_version | string, 18 | 20 | 22 | 24 | null | 아니요 | Node.js 메이저 버전: 18, 20, 22, 24. null이면 package.json의 engines나 기본값. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"app": {
"type": "string",
"description": "list_apps의 name."
},
"dev_command": {
"type": [
"string",
"null"
],
"maxLength": 1024,
"description": "한 줄 명령. 예: npm run dev. null이면 프리셋 기본값."
},
"node_version": {
"type": [
"integer",
"null"
],
"enum": [
18,
20,
22,
24,
null
],
"description": "Node.js 메이저 버전: 18, 20, 22, 24. null이면 package.json의 engines나 기본값."
}
},
"required": [
"ref",
"app"
],
"additionalProperties": false
}set_ignored_build_step 빌드 건너뛰기
파괴적
어떤 push를 빌드할지 정해요. mode: automatic(기본, 모노레포에서 다른 앱 폴더만 바뀐 push는 건너뜀), every(모든 push), production(프로덕션만), preview(프리뷰만), folder(folder 아래 파일이 바뀌었을 때만), command(command가 0으로 끝나면 건너뜀). 건너뛴 push도 배포 기록에 남아요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
app | string | 예 | list_apps의 name. |
mode | string, automatic | every | production | preview | folder | command | 예 | 건너뛰는 방식. |
folder | string | 아니요 | mode가 folder일 때 살펴볼 폴더(저장소 안의 상대 경로, 예: apps/web). |
command | string, max length 1024 | 아니요 | mode가 command일 때 빌드 환경에서 실행할 한 줄 명령. 0으로 끝나면 건너뛰어요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"app": {
"type": "string",
"description": "list_apps의 name."
},
"mode": {
"type": "string",
"enum": [
"automatic",
"every",
"production",
"preview",
"folder",
"command"
],
"description": "건너뛰는 방식."
},
"folder": {
"type": "string",
"description": "mode가 folder일 때 살펴볼 폴더(저장소 안의 상대 경로, 예: apps/web)."
},
"command": {
"type": "string",
"maxLength": 1024,
"description": "mode가 command일 때 빌드 환경에서 실행할 한 줄 명령. 0으로 끝나면 건너뛰어요."
}
},
"required": [
"ref",
"app",
"mode"
],
"additionalProperties": false
}set_production_first 프로덕션 빌드 먼저
파괴적
대기열에서 프로덕션 빌드를 프리뷰보다 먼저 돌릴지 정해요. 빌드 머신 크기는 update_app의 build_machine이에요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
app | string | 예 | list_apps의 name. |
enabled | boolean | 예 | true면 프로덕션 먼저(기본), false면 들어온 순서. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"app": {
"type": "string",
"description": "list_apps의 name."
},
"enabled": {
"type": "boolean",
"description": "true면 프로덕션 먼저(기본), false면 들어온 순서."
}
},
"required": [
"ref",
"app",
"enabled"
],
"additionalProperties": false
}set_git_checks 필요한 검사·Git LFS
파괴적
프로덕션으로 나가기 전에 통과해야 할 GitHub 검사 이름(required_checks, 20개까지), Git LFS 파일을 받을지, 서명된 커밋만 빌드할지 정해요. 필요한 검사와 서명된 커밋은 GitHub 저장소에만 돼요. 빠진 항목은 그대로예요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
app | string | 예 | list_apps의 name. |
required_checks | array<string>, max items 20 | 아니요 | GitHub 검사 이름. 예: ["test", "lint"]. []이면 모두 지워요. |
git_lfs | boolean | 아니요 | true면 빌드할 때 Git LFS 파일을 받아요. |
verified_commits | boolean | 아니요 | true면 GitHub가 확인한 서명 커밋만 빌드해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"app": {
"type": "string",
"description": "list_apps의 name."
},
"required_checks": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 20,
"description": "GitHub 검사 이름. 예: [\"test\", \"lint\"]. []이면 모두 지워요."
},
"git_lfs": {
"type": "boolean",
"description": "true면 빌드할 때 Git LFS 파일을 받아요."
},
"verified_commits": {
"type": "boolean",
"description": "true면 GitHub가 확인한 서명 커밋만 빌드해요."
}
},
"required": [
"ref",
"app"
],
"additionalProperties": false
}set_expose_system_env 시스템 환경 변수
파괴적
빌드와 서버에 BLACKWALL_ENV, BLACKWALL_URL, BLACKWALL_GIT_COMMIT_SHA 같은 시스템 환경 변수를 넣을지 정해요. 지금 값은 list_environments의 expose_system_env예요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 예 | true면 넣고 false면 빼요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "true면 넣고 false면 빼요."
}
},
"required": [
"ref",
"enabled"
],
"additionalProperties": false
}set_directory_listing 폴더 목록 보이기
파괴적
정적 사이트에서 index.html이 없는 폴더를 열면 파일 목록을 보여 줄지(true), 404로 답할지(false) 정해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 예 | true면 목록을 보여 줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "true면 목록을 보여 줘요."
}
},
"required": [
"ref",
"enabled"
],
"additionalProperties": false
}get_deployment_security 배포 보안 보기
읽기 전용
빌드 로그와 배포 출력(소스)을 누가 보는지(members, writers, admins), 포크의 PR을 승인 없이 빌드하지 않는지(fork_protection), OIDC 토큰을 주는지와 발급자 방식을 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_deployment_security 배포 보안 바꾸기
파괴적
빌드 로그(logs_access)와 배포 출력(source_access)을 볼 수 있는 사람(members: 모든 멤버, writers: 개발자 이상, admins: 소유자·관리자), 포크 보호, OIDC(빌드와 서버에 클라우드가 믿는 토큰을 줌, oidc_issuer_mode team 또는 global)를 정해요. 빠진 항목은 그대로예요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
logs_access | string, members | writers | admins | 아니요 | 빌드 로그를 볼 수 있는 사람. |
source_access | string, members | writers | admins | 아니요 | 배포 출력 파일을 볼 수 있는 사람. |
fork_protection | boolean | 아니요 | true면 포크에서 온 PR은 승인 전까지 빌드하지 않아요(환경 변수가 새지 않게). |
oidc_enabled | boolean | 아니요 | true면 빌드와 서버에 OIDC 토큰을 줘요. |
oidc_issuer_mode | string, team | global | 아니요 | 발급자. team은 조직 전용, global은 플랫폼 공용 발급자예요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"logs_access": {
"type": "string",
"enum": [
"members",
"writers",
"admins"
],
"description": "빌드 로그를 볼 수 있는 사람."
},
"source_access": {
"type": "string",
"enum": [
"members",
"writers",
"admins"
],
"description": "배포 출력 파일을 볼 수 있는 사람."
},
"fork_protection": {
"type": "boolean",
"description": "true면 포크에서 온 PR은 승인 전까지 빌드하지 않아요(환경 변수가 새지 않게)."
},
"oidc_enabled": {
"type": "boolean",
"description": "true면 빌드와 서버에 OIDC 토큰을 줘요."
},
"oidc_issuer_mode": {
"type": "string",
"enum": [
"team",
"global"
],
"description": "발급자. team은 조직 전용, global은 플랫폼 공용 발급자예요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_routing_rules 라우팅 규칙 보기
읽기 전용
콘솔에서 정한 리디렉트·리라이트·헤더 규칙의 버전들(최근 30개)과 적용 중인 버전(active, null이면 없음), 도메인 리디렉트를 돌려줘요. 규칙은 각 배포의 blackwall.json보다 먼저 적용돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}save_routing_rules 라우팅 규칙 저장
파괴적
blackwall.json과 같은 모양의 규칙을 새 버전으로 저장하고 바로 적용해요. 빌드가 blackwall.json을 검사하는 규칙 그대로 검사해요. 규칙 전체를 보내요(빠진 목록은 비어요). 이전 버전은 activate_routing_rules로 되돌려요. 리디렉트가 수백 개면 upload_bulk_redirects예요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
redirects | array<object> | 아니요 | 예: [{"source": "/old/:path*", "destination": "/new/:path*", "statusCode": 308}]. statusCode 301·302·307·308, 빼면 permanent(true 308, 기본 307). |
rewrites | array<object> | 아니요 | 예: [{"source": "/docs/:path*", "destination": "/help/:path*"}] |
headers | array<object> | 아니요 | 예: [{"source": "/:path*", "headers": [{"key": "X-Frame-Options", "value": "DENY"}]}] |
note | string, max length 200 | 아니요 | 버전 메모. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"redirects": {
"type": "array",
"items": {
"type": "object"
},
"description": "예: [{\"source\": \"/old/:path*\", \"destination\": \"/new/:path*\", \"statusCode\": 308}]. statusCode 301·302·307·308, 빼면 permanent(true 308, 기본 307)."
},
"rewrites": {
"type": "array",
"items": {
"type": "object"
},
"description": "예: [{\"source\": \"/docs/:path*\", \"destination\": \"/help/:path*\"}]"
},
"headers": {
"type": "array",
"items": {
"type": "object"
},
"description": "예: [{\"source\": \"/:path*\", \"headers\": [{\"key\": \"X-Frame-Options\", \"value\": \"DENY\"}]}]"
},
"note": {
"type": "string",
"maxLength": 200,
"description": "버전 메모."
}
},
"required": [
"ref"
],
"additionalProperties": false
}activate_routing_rules 라우팅 규칙 버전 적용
파괴적
저장한 버전 하나를 다시 적용하거나, null로 콘솔의 규칙을 꺼요(배포의 blackwall.json만 따름). 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
version | string, min 1 | 예 | get_routing_rules의 versions[].version. null이면 꺼요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"version": {
"type": [
"integer",
"null"
],
"minimum": 1,
"description": "get_routing_rules의 versions[].version. null이면 꺼요."
}
},
"required": [
"ref",
"version"
],
"additionalProperties": false
}purge_edge_cache_item 캐시 일부 비우기
파괴적
엣지 캐시에서 경로 하나(끝의 *는 그 아래 전부)나 Cache-Tag 하나만 버려요. 둘 중 하나만 줘요. 캐시 전체는 purge_edge_cache예요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
path | string, max length 512 | 아니요 | /로 시작하는 경로. 예: /blog/* 또는 /index.html. |
tag | string, max length 512 | 아니요 | 응답의 Cache-Tag 헤더에 넣은 태그 하나. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"path": {
"type": "string",
"maxLength": 512,
"description": "/로 시작하는 경로. 예: /blog/* 또는 /index.html."
},
"tag": {
"type": "string",
"maxLength": 512,
"description": "응답의 Cache-Tag 헤더에 넣은 태그 하나."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_job_retention 예약 작업 기록 보관 기간
파괴적
예약 작업의 실행 기록을 며칠 둘지 정해요: 1, 3, 7, 14, 30, 90일, null이면 요금제 기본값. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
days | string, 1 | 3 | 7 | 14 | 30 | 90 | null | 예 | 보관 일수. null이면 기본값. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"days": {
"type": [
"integer",
"null"
],
"enum": [
1,
3,
7,
14,
30,
90,
null
],
"description": "보관 일수. null이면 기본값."
}
},
"required": [
"ref",
"days"
],
"additionalProperties": false
}get_storage_settings 저장소 설정 보기
읽기 전용
프로젝트 전체의 파일 하나 최대 크기(file_size_limit, null이면 서버 한도 host_max_bytes), 이미지 변환을 켰는지와 허용 크기, S3 주소를 켰는지, 버킷마다 이전 버전을 남기는지(versioning)를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_storage_settings 저장소 설정 바꾸기
파괴적
프로젝트 전체의 파일 하나 최대 크기와 이미지 변환(켜기, 허용할 너비 목록)을 정해요. 버킷 하나의 한도는 update_bucket이에요. 빠진 항목은 그대로예요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
file_size_limit | string | 아니요 | 바이트 수나 5MB 같은 크기. null이면 서버 한도까지. |
image_transform | boolean | 아니요 | true면 ?width= 같은 이미지 변환을 해 줘요. |
image_sizes | array<integer>, max items 20 | 아니요 | 변환을 허락할 너비(px) 목록. []이면 모든 크기. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"file_size_limit": {
"type": [
"string",
"integer",
"null"
],
"description": "바이트 수나 5MB 같은 크기. null이면 서버 한도까지."
},
"image_transform": {
"type": "boolean",
"description": "true면 ?width= 같은 이미지 변환을 해 줘요."
},
"image_sizes": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 2500
},
"maxItems": 20,
"description": "변환을 허락할 너비(px) 목록. []이면 모든 크기."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_s3_enabled S3 주소 켜기·끄기
파괴적
S3 호환 주소가 요청을 받을지 정해요. 끄면 S3 키(list_s3_keys)로 오는 요청을 모두 거절하고, 키는 남아요. 비밀 키를 볼 수 있는 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 예 | true면 켜고 false면 꺼요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "true면 켜고 false면 꺼요."
}
},
"required": [
"ref",
"enabled"
],
"additionalProperties": false
}set_bucket_versioning 버킷 버전 보관
파괴적
버킷이 덮어쓰거나 지운 파일을 이전 버전으로 남길지, 며칠 둘지 정해요. 빠진 항목은 그대로예요. 이전 버전도 저장 용량에 들어가요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bucket | string | 예 | list_buckets의 버킷 이름. |
enabled | boolean | 아니요 | true면 이전 버전을 남겨요. |
noncurrent_days | string, min 1, max 3650 | 아니요 | 이전 버전을 둘 일수. null이면 지울 때까지. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bucket": {
"type": "string",
"description": "list_buckets의 버킷 이름."
},
"enabled": {
"type": "boolean",
"description": "true면 이전 버전을 남겨요."
},
"noncurrent_days": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 3650,
"description": "이전 버전을 둘 일수. null이면 지울 때까지."
}
},
"required": [
"ref",
"bucket"
],
"additionalProperties": false
}list_object_versions 파일 이전 버전 목록
읽기 전용
버킷의 이전 버전을 최근 것부터 200개까지 돌려줘요. name을 주면 그 파일의 버전만이에요. deleted가 true면 지워진 파일의 마지막 버전이에요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bucket | string | 예 | list_buckets의 버킷 이름. |
name | string, max length 1024 | 아니요 | 버킷 안의 파일 경로. 예: avatars/a.png. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bucket": {
"type": "string",
"description": "list_buckets의 버킷 이름."
},
"name": {
"type": "string",
"maxLength": 1024,
"description": "버킷 안의 파일 경로. 예: avatars/a.png."
}
},
"required": [
"ref",
"bucket"
],
"additionalProperties": false
}restore_object_version 파일 이전 버전으로 되돌리기
파괴적
이전 버전을 그 이름의 지금 파일로 되돌려요. 그 이름에 있던 파일은 버킷 설정대로 이전 버전이 돼요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_object_versions의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_object_versions의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}remove_object_version 파일 이전 버전 영구 삭제
파괴적
이전 버전 하나를 영구히 지워요. 지금 파일은 그대로예요. 되돌릴 수 없으니 confirm에 파일 이름(name)을 그대로 넣어야 해요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_object_versions의 id. |
confirm | string | 예 | 지울 버전의 파일 이름(list_object_versions의 name). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_object_versions의 id."
},
"confirm": {
"type": "string",
"description": "지울 버전의 파일 이름(list_object_versions의 name)."
}
},
"required": [
"ref",
"id",
"confirm"
],
"additionalProperties": false
}list_bucket_connections 배포에 연결한 버킷
읽기 전용
배포에 연결한 버킷마다 접두어, 들어가는 환경, 쓰는 S3 키, 넣는 환경 변수 이름을 돌려줘요. targets는 고를 수 있는 환경이에요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}connect_bucket 버킷을 배포에 연결
파괴적
이 버킷 하나만 여는 S3 키를 만들어 고른 환경의 배포에 <접두어>_BUCKET, _ENDPOINT, _REGION, _ACCESS_KEY_ID, _SECRET_ACCESS_KEY로 넣어요. S3 주소도 켜져요. 다음 배포부터 들어가요. 개발자 이상이 할 수 있고, production에 넣는 건 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
bucket | string | 예 | list_buckets의 버킷 이름. |
prefix | string, pattern ^[A-Za-z][A-Za-z0-9_]{0,30}$ | 아니요 | 환경 변수 접두어. 대문자로 바뀌어요. 기본 BLOB, BLACKWALL로 시작할 수 없어요. |
targets | array<string>, min items 1 | 예 | 넣을 환경: production, preview, development, env:<환경 이름>. list_bucket_connections의 targets. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"bucket": {
"type": "string",
"description": "list_buckets의 버킷 이름."
},
"prefix": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,30}$",
"description": "환경 변수 접두어. 대문자로 바뀌어요. 기본 BLOB, BLACKWALL로 시작할 수 없어요."
},
"targets": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "넣을 환경: production, preview, development, env:<환경 이름>. list_bucket_connections의 targets."
}
},
"required": [
"ref",
"bucket",
"targets"
],
"additionalProperties": false
}disconnect_bucket 버킷 연결 끊기
파괴적
연결의 S3 키를 바로 폐기하고, 다음 배포부터 변수를 빼요. 그 변수를 쓰는 코드는 실패하니 confirm에 접두어를 그대로 넣어야 해요. production에 연결된 것은 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_bucket_connections의 id. |
confirm | string | 예 | 연결의 접두어(prefix). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_bucket_connections의 id."
},
"confirm": {
"type": "string",
"description": "연결의 접두어(prefix)."
}
},
"required": [
"ref",
"id",
"confirm"
],
"additionalProperties": false
}list_storage_policies 파일 접근 규칙 목록
읽기 전용
파일 표(objects)와 버킷 표(buckets)의 접근 규칙: 동작, 대상, 조건식, 플랫폼 기본 규칙인지(built_in). 데이터 표의 규칙은 list_policies예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_storage_policy 파일 접근 규칙 만들기
추가만 함
콘솔의 틀로 파일 접근 규칙을 만들어요. template: public-read(누구나 읽기), signed-in-read(로그인한 사람만 읽기), signed-in-upload(로그인한 사람이 올리기), own-folder(사람마다 자기 폴더), images-only(이미지만 올리기), custom(command, roles, using, check를 직접). 틀은 bucket이 필요해요. auth.uid()는 uid()로 바꿔 써요. run_sql로는 파일 표에 규칙을 만들 수 없어요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
template | string, public-read | signed-in-read | signed-in-upload | own-folder | images-only | custom | 아니요 | 규칙 틀. 기본 custom. |
bucket | string | 아니요 | 틀을 적용할 버킷(custom 말고는 필요). |
name | string, max length 63 | 아니요 | 규칙 이름. 비우면 틀의 이름. |
table | string, objects | buckets | 아니요 | custom일 때 표. 기본 objects, buckets에는 select만. |
command | string, select | insert | update | delete | all | 아니요 | custom일 때 동작. |
roles | array<string>, anon | authenticated | 아니요 | custom일 때 대상. |
restrictive | boolean | 아니요 | true면 제한 규칙(다른 규칙과 AND). |
using | string | 아니요 | custom일 때 using 조건식. 예: bucket_id = 'avatars' and owner = uid() |
check | string | 아니요 | custom일 때 with check 조건식. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"template": {
"type": "string",
"enum": [
"public-read",
"signed-in-read",
"signed-in-upload",
"own-folder",
"images-only",
"custom"
],
"description": "규칙 틀. 기본 custom."
},
"bucket": {
"type": "string",
"description": "틀을 적용할 버킷(custom 말고는 필요)."
},
"name": {
"type": "string",
"maxLength": 63,
"description": "규칙 이름. 비우면 틀의 이름."
},
"table": {
"type": "string",
"enum": [
"objects",
"buckets"
],
"description": "custom일 때 표. 기본 objects, buckets에는 select만."
},
"command": {
"type": "string",
"enum": [
"select",
"insert",
"update",
"delete",
"all"
],
"description": "custom일 때 동작."
},
"roles": {
"type": "array",
"items": {
"type": "string",
"enum": [
"anon",
"authenticated"
]
},
"description": "custom일 때 대상."
},
"restrictive": {
"type": "boolean",
"description": "true면 제한 규칙(다른 규칙과 AND)."
},
"using": {
"type": "string",
"description": "custom일 때 using 조건식. 예: bucket_id = 'avatars' and owner = uid()"
},
"check": {
"type": "string",
"description": "custom일 때 with check 조건식."
}
},
"required": [
"ref"
],
"additionalProperties": false
}remove_storage_policy 파일 접근 규칙 삭제
파괴적
프로젝트가 만든 파일 접근 규칙을 지워요. 기본 규칙(built_in)은 지울 수 없어요. confirm에 규칙 이름을 그대로 넣어야 해요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
table | string, objects | buckets | 아니요 | 규칙이 있는 표. 기본 objects. |
name | string | 예 | list_storage_policies의 name. |
confirm | string | 예 | 규칙 이름. name과 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"table": {
"type": "string",
"enum": [
"objects",
"buckets"
],
"description": "규칙이 있는 표. 기본 objects."
},
"name": {
"type": "string",
"description": "list_storage_policies의 name."
},
"confirm": {
"type": "string",
"description": "규칙 이름. name과 같아야 해요."
}
},
"required": [
"ref",
"name",
"confirm"
],
"additionalProperties": false
}get_realtime_settings 실시간 설정 보기
읽기 전용
실시간을 켰는지, 공개 채널을 허용하는지, 동시 연결 수·초당 메시지·초당 프레즌스·메시지 최대 크기 한도와 각 범위(bounds)를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_realtime_settings 실시간 설정 바꾸기
파괴적
실시간 켜기·끄기, 공개 채널 허용, 프로젝트 전체의 한도를 바꿔요. 준 값만 바꾸고 나머지는 그대로예요. allow_public을 끄면 비공개 채널(realtime_messages 표의 규칙을 통과한 사람)만 쓸 수 있어요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 아니요 | 끄면 새 연결을 받지 않아요. |
allow_public | boolean | 아니요 | 공개 채널을 허용할지. |
max_clients | integer, min 1, max 10000 | 아니요 | 동시 연결 수. 1~10000. |
max_events_per_second | integer, min 1, max 10000 | 아니요 | 초당 브로드캐스트 수. 1~10000. |
max_presence_per_second | integer, min 1, max 1000 | 아니요 | 초당 프레즌스 갱신 수. 1~1000. |
max_payload_kb | integer, min 1, max 3072 | 아니요 | 메시지 최대 크기(KB). 1~3072. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "끄면 새 연결을 받지 않아요."
},
"allow_public": {
"type": "boolean",
"description": "공개 채널을 허용할지."
},
"max_clients": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"description": "동시 연결 수. 1~10000."
},
"max_events_per_second": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"description": "초당 브로드캐스트 수. 1~10000."
},
"max_presence_per_second": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "초당 프레즌스 갱신 수. 1~1000."
},
"max_payload_kb": {
"type": "integer",
"minimum": 1,
"maximum": 3072,
"description": "메시지 최대 크기(KB). 1~3072."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_realtime_policies 비공개 채널 규칙 보기
읽기 전용
비공개 채널에 누가 들어오고 보낼 수 있는지 정하는 realtime_messages 표의 규칙과, 고를 수 있는 규칙 틀(templates)을 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_realtime_messages_table 비공개 채널 규칙 표 만들기
추가만 함
비공개 채널의 규칙을 적는 realtime_messages 표를 행 단위 보안을 켠 채로 만들어요. 이미 있으면 그대로 둬요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}add_realtime_policy 비공개 채널 규칙 더하기
추가만 함
자주 쓰는 규칙을 realtime_messages 표에 더해요(표가 없으면 먼저 만들어요). template: signed-in-read(로그인한 사람이 비공개 채널에 들어오기), signed-in-write(로그인한 사람이 보내기), own-channel(user:<자기 id> 채널만). 다른 규칙은 run_sql로 써요. 개발자 이상이 할 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
template | string, signed-in-read | signed-in-write | own-channel | 예 |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"template": {
"type": "string",
"enum": [
"signed-in-read",
"signed-in-write",
"own-channel"
]
}
},
"required": [
"ref",
"template"
],
"additionalProperties": false
}get_passkey_settings 패스키 설정 보기
읽기 전용
가입자가 패스키로 로그인할 수 있는지, RP 이름·RP ID·허용 출처(origins), 사용자 확인(require_user_verification)을 돌려줘요. RP ID를 비우면 Site URL의 호스트를 써요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_passkey_settings 패스키 설정 바꾸기
파괴적
가입자의 패스키 로그인을 켜거나 끄고, RP 이름·RP ID·허용 출처를 바꿔요. 준 값만 바꿔요. 출처는 모두 RP ID(없으면 Site URL의 호스트) 아래의 https 주소여야 해요. RP ID를 바꾸면 이미 등록한 패스키는 쓸 수 없게 돼요. 소유자·관리자·개발자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
enabled | boolean | 아니요 | 패스키 로그인을 켤지. |
rp_name | string | 아니요 | 브라우저가 보여 주는 서비스 이름. |
rp_id | string | 아니요 | 패스키가 묶이는 도메인(예: example.com). 비우면 Site URL의 호스트. |
origins | array<string> | 아니요 | 패스키를 쓸 https 출처들(예: ["https://app.example.com"]). 비우면 Site URL. |
require_user_verification | boolean | 아니요 | 지문·PIN 같은 사용자 확인을 반드시 요구할지. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"enabled": {
"type": "boolean",
"description": "패스키 로그인을 켤지."
},
"rp_name": {
"type": "string",
"description": "브라우저가 보여 주는 서비스 이름."
},
"rp_id": {
"type": "string",
"description": "패스키가 묶이는 도메인(예: example.com). 비우면 Site URL의 호스트."
},
"origins": {
"type": "array",
"items": {
"type": "string"
},
"description": "패스키를 쓸 https 출처들(예: [\"https://app.example.com\"]). 비우면 Site URL."
},
"require_user_verification": {
"type": "boolean",
"description": "지문·PIN 같은 사용자 확인을 반드시 요구할지."
}
},
"required": [
"ref"
],
"additionalProperties": false
}list_user_factors 가입자의 2단계 인증·패스키 보기
읽기 전용
가입자 한 명이 등록한 2단계 인증 수단(factors: totp·phone)과 패스키(passkeys)를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_users의 id (UUID). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_users의 id (UUID)."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}remove_user_factors 가입자의 2단계 인증 지우기
파괴적
휴대폰을 잃어버린 가입자처럼, 한 명의 2단계 인증 수단을 모두 지워요. 다시 등록할 때까지 비밀번호만으로 로그인해요. confirm에 그 가입자의 이메일(또는 id)을 넣어요. 사용자가 요청할 때만 쓰세요. 소유자·관리자·개발자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_users의 id (UUID). |
confirm | string | 예 | 가입자의 이메일(또는 id)을 그대로. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_users의 id (UUID)."
},
"confirm": {
"type": "string",
"description": "가입자의 이메일(또는 id)을 그대로."
}
},
"required": [
"ref",
"id",
"confirm"
],
"additionalProperties": false
}remove_user_passkey 가입자의 패스키 지우기
파괴적
가입자 한 명의 패스키 하나를 지워요. 그 패스키로는 더 로그인할 수 없어요. 소유자·관리자·개발자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
id | string | 예 | list_users의 id (UUID). |
passkey_id | string | 예 | list_user_factors의 passkeys[].id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"id": {
"type": "string",
"description": "list_users의 id (UUID)."
},
"passkey_id": {
"type": "string",
"description": "list_user_factors의 passkeys[].id."
}
},
"required": [
"ref",
"id",
"passkey_id"
],
"additionalProperties": false
}list_oauth_apps OAuth 앱 목록
읽기 전용
이 프로젝트를 OAuth 서버로 써서 "이 서비스로 로그인"하는 다른 앱(클라이언트)과, OAuth 서버가 켜졌는지, 인가·토큰·사용자 정보 주소(endpoints)를 돌려줘요. 시크릿은 돌려주지 않아요. 켜고 끄는 건 update_auth_config의 OAUTH_SERVER_ENABLED예요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_oauth_app OAuth 앱 만들기
추가만 함
이 프로젝트로 로그인할 앱(클라이언트)을 등록해요. public이 false(기본)면 client_secret을 응답에 한 번만 줘요. public이 true면 시크릿 없이 PKCE로 로그인하는 모바일·SPA 앱이에요. 리디렉션 URI는 https, localhost의 http, 앱 고유 스킴(com.example.app:)만 돼요. 소유자·관리자·개발자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
name | string, min length 1, max length 120 | 예 | 로그인 화면에 보이는 앱 이름. |
redirect_uris | array<string>, min items 1, max items 20 | 예 | 로그인 뒤 돌아갈 주소들. |
public | boolean | 아니요 | true면 시크릿 없는 공개 클라이언트. 기본 false. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "로그인 화면에 보이는 앱 이름."
},
"redirect_uris": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 20,
"description": "로그인 뒤 돌아갈 주소들."
},
"public": {
"type": "boolean",
"description": "true면 시크릿 없는 공개 클라이언트. 기본 false."
}
},
"required": [
"ref",
"name",
"redirect_uris"
],
"additionalProperties": false
}reset_oauth_app_secret OAuth 앱 시크릿 새로 만들기
파괴적
앱의 client_secret을 새로 만들어 한 번만 보여 줘요. 예전 시크릿은 바로 쓸 수 없어 그 앱의 설정도 바꿔야 해요. 소유자·관리자·개발자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
client_id | string | 예 | list_oauth_apps의 client_id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"client_id": {
"type": "string",
"description": "list_oauth_apps의 client_id."
}
},
"required": [
"ref",
"client_id"
],
"additionalProperties": false
}remove_oauth_app OAuth 앱 삭제
파괴적
앱 등록을 지워요. 그 앱으로는 더 로그인할 수 없어요. confirm에 앱 이름(client_name)을 넣어요. 소유자·관리자·개발자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
client_id | string | 예 | list_oauth_apps의 client_id. |
confirm | string | 예 | 앱 이름(client_name)을 그대로. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"client_id": {
"type": "string",
"description": "list_oauth_apps의 client_id."
},
"confirm": {
"type": "string",
"description": "앱 이름(client_name)을 그대로."
}
},
"required": [
"ref",
"client_id",
"confirm"
],
"additionalProperties": false
}list_access_groups 접근 그룹 목록
읽기 전용
조직 구성원을 묶어 프로젝트마다 역할(developer·billing·viewer)을 주는 접근 그룹과, 그 구성원(이메일)·프로젝트를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_access_group 접근 그룹 만들기
추가만 함
빈 접근 그룹을 만들어요. 구성원과 프로젝트는 update_access_group으로 더해요. 조직마다 50개까지. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
name | string, min length 1, max length 60 | 예 | 그룹 이름. |
description | string | 아니요 | 설명(300자까지). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "그룹 이름."
},
"description": {
"type": "string",
"description": "설명(300자까지)."
}
},
"required": [
"ref",
"name"
],
"additionalProperties": false
}update_access_group 접근 그룹 바꾸기
파괴적
그룹의 이름, 설명, 구성원, 프로젝트별 역할을 바꿔요. 준 것만 바꿔요. members는 조직 구성원의 이메일 전체 목록이고, projects는 {ref: 역할} 전체예요(역할은 developer·billing·viewer, 빠진 프로젝트는 주지 않아요). 그룹은 소유자·관리자 역할을 줄 수 없어요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
id | string | 예 | list_access_groups의 id. |
name | string, min length 1, max length 60 | 아니요 | 새 이름. |
description | string | 아니요 | 새 설명. |
members | array<string> | 아니요 | 구성원 이메일 전체. list_team에 있는 사람만. |
projects | object | 아니요 | 예: {"abcdefghijklmnopqrst": "developer"}. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"id": {
"type": "string",
"description": "list_access_groups의 id."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "새 이름."
},
"description": {
"type": "string",
"description": "새 설명."
},
"members": {
"type": "array",
"items": {
"type": "string"
},
"description": "구성원 이메일 전체. list_team에 있는 사람만."
},
"projects": {
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"developer",
"billing",
"viewer"
]
},
"description": "예: {\"abcdefghijklmnopqrst\": \"developer\"}."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}remove_access_group 접근 그룹 삭제
파괴적
접근 그룹을 지워요. 이 그룹으로 프로젝트를 열던 사람은 그 권한을 잃어요. confirm에 그룹 이름을 넣어요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
id | string | 예 | list_access_groups의 id. |
confirm | string | 예 | 그룹 이름을 그대로. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"id": {
"type": "string",
"description": "list_access_groups의 id."
},
"confirm": {
"type": "string",
"description": "그룹 이름을 그대로."
}
},
"required": [
"ref",
"id",
"confirm"
],
"additionalProperties": false
}get_member_access 구성원의 프로젝트 접근 보기
읽기 전용
구성원 한 명이 조직의 모든 프로젝트를 여는지(scoped false), 고른 프로젝트만 여는지(scoped true)와 프로젝트별 역할, 들어 있는 접근 그룹을 돌려줘요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
email | string | 예 | list_team의 구성원 이메일. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"email": {
"type": "string",
"description": "list_team의 구성원 이메일."
}
},
"required": [
"ref",
"email"
],
"additionalProperties": false
}set_member_access 구성원의 프로젝트 접근 바꾸기
파괴적
scoped false면 구성원이 조직 역할로 모든 프로젝트를 열어요. scoped true면 projects({ref: developer·billing·viewer})와 접근 그룹이 주는 프로젝트만 열어요. 소유자·관리자는 좁힐 수 없어요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
email | string | 예 | list_team의 구성원 이메일. |
scoped | boolean | 예 | true면 고른 프로젝트만. |
projects | object | 아니요 | scoped true일 때 {ref: 역할} 전체. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"email": {
"type": "string",
"description": "list_team의 구성원 이메일."
},
"scoped": {
"type": "boolean",
"description": "true면 고른 프로젝트만."
},
"projects": {
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"developer",
"billing",
"viewer"
]
},
"description": "scoped true일 때 {ref: 역할} 전체."
}
},
"required": [
"ref",
"email",
"scoped"
],
"additionalProperties": false
}list_audit_drains 감사 기록 내보내기 목록
읽기 전용
조직의 감사 기록을 보안 도구(https, Datadog, Splunk, syslog)로 보내는 곳과, 밀린 수(behind), 실패, https의 서명 키(signing_secret), 요금제가 허용하는지(allowed)를 돌려줘요. 소유자·관리자만 볼 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_audit_drain 감사 기록 내보내기 만들기
추가만 함 외부로 나감
이제부터 쌓이는 감사 기록을 보낼 곳을 더해요. kind: https(서명한 JSON), datadog(secret에 API 키), splunk(HEC 주소, secret에 토큰), syslog(syslog+tls://호스트:포트). 조직마다 5개까지이고 요금제에 있어야 해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
name | string, min length 1, max length 60 | 예 | 이름. |
kind | string, https | datadog | splunk | syslog | 예 | 보낼 곳의 종류. |
url | string | 예 | 보낼 주소. |
secret | string | 아니요 | datadog·splunk의 키나 토큰. 저장 뒤 끝 네 글자만 보여요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "이름."
},
"kind": {
"type": "string",
"enum": [
"https",
"datadog",
"splunk",
"syslog"
],
"description": "보낼 곳의 종류."
},
"url": {
"type": "string",
"description": "보낼 주소."
},
"secret": {
"type": "string",
"description": "datadog·splunk의 키나 토큰. 저장 뒤 끝 네 글자만 보여요."
}
},
"required": [
"ref",
"name",
"kind",
"url"
],
"additionalProperties": false
}set_audit_drain_enabled 감사 기록 내보내기 켜기·끄기
파괴적
보내기를 멈추거나 다시 켜요. 다시 켜면 멈춘 곳부터 보내요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
id | string | 예 | list_audit_drains의 id. |
enabled | boolean | 예 | 켤지 끌지. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"id": {
"type": "string",
"description": "list_audit_drains의 id."
},
"enabled": {
"type": "boolean",
"description": "켤지 끌지."
}
},
"required": [
"ref",
"id",
"enabled"
],
"additionalProperties": false
}test_audit_drain 감사 기록 내보내기 시험
추가만 함 외부로 나감
만든 시험 기록 하나를 지금 보내고 받는 쪽의 답(HTTP 상태)을 돌려줘요. 실제 기록은 건드리지 않아요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
id | string | 예 | list_audit_drains의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"id": {
"type": "string",
"description": "list_audit_drains의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}remove_audit_drain 감사 기록 내보내기 삭제
파괴적
보낼 곳을 지워요. 이미 보낸 기록은 받는 쪽에 남아요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
id | string | 예 | list_audit_drains의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"id": {
"type": "string",
"description": "list_audit_drains의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}list_org_webhooks 조직 웹훅 목록
읽기 전용
조직의 알림(배포, 도메인, 사용량, 결제)을 보내는 웹훅과 서명 키(signing_secret), 고를 수 있는 이벤트(events)를 돌려줘요. 프로젝트 하나의 웹훅은 list_project_webhooks예요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}create_org_webhook 조직 웹훅 만들기
추가만 함 외부로 나감
조직의 알림을 공개 https 주소로 보내는 웹훅을 만들어요. events를 비우면 모든 이벤트, projects를 비우면 모든 프로젝트와 조직 자체의 알림이에요. 알림 채널과 합쳐 조직마다 20개까지. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
name | string, min length 1, max length 60 | 예 | 이름. |
url | string | 예 | 공개된 https 주소. |
events | array<string>, deployments.deploy-failed | deployments.deploy-ready | deployments.deploy-succeeded | domains.domain-verified | domains.domain-unverified | domains.domain-tls | domains.domain-cert-expiring | usage.usage | billing.charge-paid | billing.charge-failed | billing.no-card | billing.plan | billing.subscription | 아니요 | 보낼 이벤트. 비우면 전부. |
projects | array<string> | 아니요 | 이 프로젝트들의 알림만. 비우면 전부. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "이름."
},
"url": {
"type": "string",
"description": "공개된 https 주소."
},
"events": {
"type": "array",
"items": {
"type": "string",
"enum": [
"deployments.deploy-failed",
"deployments.deploy-ready",
"deployments.deploy-succeeded",
"domains.domain-verified",
"domains.domain-unverified",
"domains.domain-tls",
"domains.domain-cert-expiring",
"usage.usage",
"billing.charge-paid",
"billing.charge-failed",
"billing.no-card",
"billing.plan",
"billing.subscription"
]
},
"description": "보낼 이벤트. 비우면 전부."
},
"projects": {
"type": "array",
"items": {
"type": "string"
},
"description": "이 프로젝트들의 알림만. 비우면 전부."
}
},
"required": [
"ref",
"name",
"url"
],
"additionalProperties": false
}set_org_webhook_enabled 조직 웹훅 켜기·끄기
파괴적
조직 웹훅을 멈추거나 다시 보내게 해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
id | string | 예 | list_org_webhooks의 id. |
enabled | boolean | 예 | 켤지 끌지. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"id": {
"type": "string",
"description": "list_org_webhooks의 id."
},
"enabled": {
"type": "boolean",
"description": "켤지 끌지."
}
},
"required": [
"ref",
"id",
"enabled"
],
"additionalProperties": false
}test_org_webhook 조직 웹훅 시험
추가만 함 외부로 나감
서명한 시험 이벤트를 하나 보내요. 결과는 list_org_webhook_deliveries에 나와요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
id | string | 예 | list_org_webhooks의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"id": {
"type": "string",
"description": "list_org_webhooks의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}list_org_webhook_deliveries 조직 웹훅 전달 기록
읽기 전용
조직 웹훅이 보낸 최근 100건: 이벤트, 프로젝트, 상태(pending·sent·failed), 시도 횟수, 실패 이유. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
id | string | 예 | list_org_webhooks의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"id": {
"type": "string",
"description": "list_org_webhooks의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}retry_org_webhook_delivery 조직 웹훅 다시 보내기
추가만 함 외부로 나감
끝난 전달 하나를 새 전달로 다시 보내요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
delivery_id | integer, min 1 | 예 | list_org_webhook_deliveries의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"delivery_id": {
"type": "integer",
"minimum": 1,
"description": "list_org_webhook_deliveries의 id."
}
},
"required": [
"ref",
"delivery_id"
],
"additionalProperties": false
}remove_org_webhook 조직 웹훅 삭제
파괴적
조직 웹훅을 지워요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
id | string | 예 | list_org_webhooks의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"id": {
"type": "string",
"description": "list_org_webhooks의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}get_committer_settings 외부 커미터 설정 보기
읽기 전용
조직 밖의 사람이 커밋한 프리뷰를 바로 빌드할지(policy: auto), 승인을 기다릴지(require), 믿는 커미터 목록(trusted), 내가 답할 수 있는 기다리는 프리뷰(waiting)를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_committer_policy 외부 커미터 정책 바꾸기
파괴적
auto면 누가 커밋했든 프리뷰를 빌드해요. require면 구성원도 믿는 커미터도 아닌 사람의 프리뷰는 승인을 기다려요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
policy | string, auto | require | 예 | auto 또는 require. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"policy": {
"type": "string",
"enum": [
"auto",
"require"
],
"description": "auto 또는 require."
}
},
"required": [
"ref",
"policy"
],
"additionalProperties": false
}trust_committer 커미터 믿기
추가만 함
이 이메일로 커밋한 프리뷰는 승인 없이 빌드돼요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
email | string | 예 | 커밋의 작성자 이메일. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"email": {
"type": "string",
"description": "커밋의 작성자 이메일."
}
},
"required": [
"ref",
"email"
],
"additionalProperties": false
}remove_trusted_committer 믿는 커미터에서 빼기
파괴적
이 이메일의 다음 프리뷰부터 다시 승인을 기다려요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
email | string | 예 | get_committer_settings의 trusted[].email. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"email": {
"type": "string",
"description": "get_committer_settings의 trusted[].email."
}
},
"required": [
"ref",
"email"
],
"additionalProperties": false
}answer_preview_approval 기다리는 프리뷰에 답하기
파괴적
외부 커미터의 프리뷰를 approve(빌드), trust(빌드하고 작성자를 믿는 커미터로), decline(취소)해요. 남의 코드를 빌드하는 일이니 코드를 확인한 뒤에만 승인하세요. 그 프로젝트에 쓸 수 있는 사람(개발자 이상)만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
id | string | 예 | get_committer_settings의 waiting[]의 id. |
verdict | string, approve | trust | decline | 예 | approve, trust, decline. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"id": {
"type": "string",
"description": "get_committer_settings의 waiting[]의 id."
},
"verdict": {
"type": "string",
"enum": [
"approve",
"trust",
"decline"
],
"description": "approve, trust, decline."
}
},
"required": [
"ref",
"id",
"verdict"
],
"additionalProperties": false
}get_org_sso 조직 SSO 보기
읽기 전용
구성원이 회사 ID 제공자(Okta, Entra 등, OpenID Connect)로 콘솔에 로그인하는 설정(시크릿은 끝 네 글자만), 콜백 주소, 도메인과 확인용 TXT 레코드를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_org_sso 조직 SSO 설정하기
파괴적 외부로 나감
조직의 OpenID Connect 로그인을 만들거나 바꿔요. 준 것만 바꾸고, client_secret을 빼면 지금 것을 유지해요. issuer나 discovery_url을 주면 나머지 주소는 제공자 문서에서 읽어요. require_sso를 켜면 구성원은 SSO로만 로그인해요. ID 제공자에는 get_org_sso의 callback_url을 등록하세요. 요금제에 있어야 해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
issuer | string | 아니요 | 발급자 주소(https). |
discovery_url | string | 아니요 | …/.well-known/openid-configuration 주소. |
authorization_url | string | 아니요 | 인가 주소. 보통 비워 둬요. |
token_url | string | 아니요 | 토큰 주소. 보통 비워 둬요. |
userinfo_url | string | 아니요 | 사용자 정보 주소. 보통 비워 둬요. |
jwks_url | string | 아니요 | 서명 키 주소. 보통 비워 둬요. |
client_id | string | 아니요 | 클라이언트 ID. |
client_secret | string | 아니요 | 클라이언트 시크릿. 처음엔 필요해요. |
scopes | string | 아니요 | 스코프(공백으로). openid가 있어야 해요. 기본 openid email profile. |
default_role | string, admin | developer | billing | viewer | 아니요 | SSO로 처음 들어온 사람의 역할. |
jit | boolean | 아니요 | 처음 온 사람에게 계정을 만들지. 기본 true. |
require_sso | boolean | 아니요 | 구성원은 SSO로만 로그인할지. 기본 false. |
enabled | boolean | 아니요 | SSO 로그인을 켤지. 기본 true. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"issuer": {
"type": "string",
"description": "발급자 주소(https)."
},
"discovery_url": {
"type": "string",
"description": "…/.well-known/openid-configuration 주소."
},
"authorization_url": {
"type": "string",
"description": "인가 주소. 보통 비워 둬요."
},
"token_url": {
"type": "string",
"description": "토큰 주소. 보통 비워 둬요."
},
"userinfo_url": {
"type": "string",
"description": "사용자 정보 주소. 보통 비워 둬요."
},
"jwks_url": {
"type": "string",
"description": "서명 키 주소. 보통 비워 둬요."
},
"client_id": {
"type": "string",
"description": "클라이언트 ID."
},
"client_secret": {
"type": "string",
"description": "클라이언트 시크릿. 처음엔 필요해요."
},
"scopes": {
"type": "string",
"description": "스코프(공백으로). openid가 있어야 해요. 기본 openid email profile."
},
"default_role": {
"type": "string",
"enum": [
"admin",
"developer",
"billing",
"viewer"
],
"description": "SSO로 처음 들어온 사람의 역할."
},
"jit": {
"type": "boolean",
"description": "처음 온 사람에게 계정을 만들지. 기본 true."
},
"require_sso": {
"type": "boolean",
"description": "구성원은 SSO로만 로그인할지. 기본 false."
},
"enabled": {
"type": "boolean",
"description": "SSO 로그인을 켤지. 기본 true."
}
},
"required": [
"ref"
],
"additionalProperties": false
}remove_org_sso 조직 SSO 지우기
파괴적
조직의 SSO 연결을 지워요. 구성원은 비밀번호나 다른 로그인으로 들어와요. confirm에 issuer를 넣어요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
confirm | string | 예 | get_org_sso의 connection.issuer를 그대로. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"confirm": {
"type": "string",
"description": "get_org_sso의 connection.issuer를 그대로."
}
},
"required": [
"ref",
"confirm"
],
"additionalProperties": false
}add_org_sso_domain 조직 SSO 도메인 더하기
추가만 함
이 도메인의 이메일로 로그인하는 사람을 조직의 SSO로 보내요. 응답의 txt_record를 DNS에 더한 뒤 verify_org_sso_domain으로 확인해야 쓰여요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
domain | string | 예 | 예: example.com. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"domain": {
"type": "string",
"description": "예: example.com."
}
},
"required": [
"ref",
"domain"
],
"additionalProperties": false
}verify_org_sso_domain 조직 SSO 도메인 확인
파괴적 외부로 나감
DNS에서 TXT 레코드를 찾아 도메인을 확인해요. 확인되면 이 도메인의 사람은 조직의 SSO로 로그인해요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
id | string | 예 | get_org_sso의 domains[]의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"id": {
"type": "string",
"description": "get_org_sso의 domains[]의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}remove_org_sso_domain 조직 SSO 도메인 지우기
파괴적
도메인을 지워요. 이 도메인의 사람은 SSO로 보내지지 않아요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
id | string | 예 | get_org_sso의 domains[]의 id. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"id": {
"type": "string",
"description": "get_org_sso의 domains[]의 id."
}
},
"required": [
"ref",
"id"
],
"additionalProperties": false
}get_org_policies 조직 배포 정책 보기
읽기 전용
새 프로젝트의 기본 배포 보호(default_protection, default_scope), 배포를 시작할 수 있는 길(allow_git·cli·api·hooks), 브랜치 미리보기, 프리뷰 도메인(preview_suffix)과 확인용 TXT 레코드를 돌려줘요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_org_policies 조직 배포 정책 바꾸기
파괴적
조직의 배포 정책을 바꿔요. 준 것만 바꿔요. default_protection·default_scope는 새 프로젝트의 기본값이고 기존 프로젝트는 그대로예요. allow_*를 끄면 그 길로 시작한 배포는 거부돼요(allow_api는 MCP도 포함, 콘솔의 배포 버튼은 언제나 돼요). 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
default_protection | string, members | off | 아니요 | 새 프로젝트의 프리뷰를 누가 볼지. |
default_scope | string, previews | generated | all | 아니요 | 새 프로젝트에서 보호할 주소. |
allow_git | boolean | 아니요 | Git 푸시로 배포. |
allow_cli | boolean | 아니요 | CLI로 배포. |
allow_api | boolean | 아니요 | API·MCP로 배포. |
allow_hooks | boolean | 아니요 | 배포 훅으로 배포. |
branch_previews | boolean | 아니요 | 브랜치 푸시마다 미리보기 빌드. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"default_protection": {
"type": "string",
"enum": [
"members",
"off"
],
"description": "새 프로젝트의 프리뷰를 누가 볼지."
},
"default_scope": {
"type": "string",
"enum": [
"previews",
"generated",
"all"
],
"description": "새 프로젝트에서 보호할 주소."
},
"allow_git": {
"type": "boolean",
"description": "Git 푸시로 배포."
},
"allow_cli": {
"type": "boolean",
"description": "CLI로 배포."
},
"allow_api": {
"type": "boolean",
"description": "API·MCP로 배포."
},
"allow_hooks": {
"type": "boolean",
"description": "배포 훅으로 배포."
},
"branch_previews": {
"type": "boolean",
"description": "브랜치 푸시마다 미리보기 빌드."
}
},
"required": [
"ref"
],
"additionalProperties": false
}set_preview_suffix 프리뷰 도메인 정하기
파괴적
조직의 프리뷰를 내 도메인 아래(예: preview.example.com)에서도 열어요. 응답의 preview_suffix_record를 DNS에 더한 뒤 verify_preview_suffix로 확인해야 쓰여요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
suffix | string | 예 | 예: preview.example.com. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
},
"suffix": {
"type": "string",
"description": "예: preview.example.com."
}
},
"required": [
"ref",
"suffix"
],
"additionalProperties": false
}verify_preview_suffix 프리뷰 도메인 확인
파괴적 외부로 나감
DNS에서 TXT 레코드를 찾아 프리뷰 도메인을 확인해요. 아직 없으면 몇 분 뒤 다시 부르세요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}remove_preview_suffix 프리뷰 도메인 지우기
파괴적
프리뷰 도메인을 지워요. 프리뷰는 플랫폼의 주소로만 열려요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "조직의 프로젝트 하나의 ID(ref). 그 프로젝트의 조직을 바꿔요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}get_server 전용 서버
읽기 전용
프로젝트의 전용 서버를 봐요: 크기(tier), 위치, 상태, 주소, 한 달 금액, 대기 서버, 자동 전환, 되돌리기 기간, 다음 위치 옮기기 날짜, 진행 중인 작업(jobs). server가 null이면 공용 서버를 써요. offered가 false면 아직 열리지 않았어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | read |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | GET /projects/{ref}/server |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
}
},
"required": [
"ref"
],
"additionalProperties": false
}request_server 전용 서버 빌리기
파괴적
이 프로젝트만 쓰는 서버를 빌려요. 크기와 위치별 월 금액은 list_server_sizes로 먼저 보여 주고 사용자가 고른 것만 넣으세요. 보통 10분 안에 준비되고 데이터베이스와 앱을 옮긴 뒤 주소를 바꿔요. Pro부터, 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/server |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
tier | string, pattern ^[0-9]+gb$ | 예 | 서버 크기. list_server_sizes의 tier(예: 4gb). |
region | string, pattern ^[a-z]{2}-[a-z]+-[0-9]$ | 아니요 | 위치. 없으면 프로젝트 위치. list_server_sizes의 region. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"tier": {
"type": "string",
"pattern": "^[0-9]+gb$",
"description": "서버 크기. list_server_sizes의 tier(예: 4gb)."
},
"region": {
"type": "string",
"pattern": "^[a-z]{2}-[a-z]+-[0-9]$",
"description": "위치. 없으면 프로젝트 위치. list_server_sizes의 region."
}
},
"required": [
"ref",
"tier"
],
"additionalProperties": false
}resize_server 서버 크기 바꾸기
파괴적
전용 서버의 크기를 바꿔요. when=now는 지금, tonight는 서버 위치 시간 새벽 3~5시. 대기 서버가 없으면 3~5분 응답하지 않고, 있으면 전환하는 몇 초만 멈춰요. 크기 바꾸기는 무료이고 월 금액은 새 크기 값이에요(list_server_sizes). 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PATCH /projects/{ref}/server |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
tier | string, pattern ^[0-9]+gb$ | 예 | 서버 크기. list_server_sizes의 tier(예: 4gb). |
when | string, now | tonight | 아니요 | now(지금, 기본) 또는 tonight(새벽 3~5시). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"tier": {
"type": "string",
"pattern": "^[0-9]+gb$",
"description": "서버 크기. list_server_sizes의 tier(예: 4gb)."
},
"when": {
"type": "string",
"enum": [
"now",
"tonight"
],
"description": "now(지금, 기본) 또는 tonight(새벽 3~5시)."
}
},
"required": [
"ref",
"tier"
],
"additionalProperties": false
}set_standby 대기 서버
파괴적
같은 위치·같은 크기의 대기 서버를 켜거나 꺼요. 데이터베이스를 계속 복제하고, 월 금액은 그 크기 값과 같아요(list_server_sizes). auto_failover=true면 주 서버가 60초 응답하지 않을 때 대기 서버로 저절로 바꿔요(대기 서버가 있어야 해요). 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/server/standby |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
standby | boolean | 예 | 대기 서버를 둘지. |
auto_failover | boolean | 아니요 | 자동 전환. 기본 false. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"standby": {
"type": "boolean",
"description": "대기 서버를 둘지."
},
"auto_failover": {
"type": "boolean",
"description": "자동 전환. 기본 false."
}
},
"required": [
"ref",
"standby"
],
"additionalProperties": false
}move_server 서버 위치 옮기기
파괴적
전용 서버를 다른 위치로 옮겨요. 무료이고 한 달에 한 번이에요(next_move_at). 새 위치에 서버를 만들어 복제하고 주소를 바꾸는 순간 쓰기가 몇 초 멈춰요. 옛 서버는 7일 남겨요. 월 금액은 새 위치 값이에요(list_server_sizes). 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | POST /projects/{ref}/server/move |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
region | string, pattern ^[a-z]{2}-[a-z]+-[0-9]$ | 예 | 위치. list_server_sizes의 region(예: kr-seoul-1). |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"region": {
"type": "string",
"pattern": "^[a-z]{2}-[a-z]+-[0-9]$",
"description": "위치. list_server_sizes의 region(예: kr-seoul-1)."
}
},
"required": [
"ref",
"region"
],
"additionalProperties": false
}release_server 전용 서버 반납
파괴적
전용 서버를 반납해요: 마지막 백업을 받고 데이터베이스와 앱을 공용 서버로 옮긴 뒤 서버(와 대기 서버)를 지워요. 옮기는 동안 쓰기가 멈춰요. 사용자가 요청할 때만 쓰고 confirm에 ref를 그대로 넣으세요. 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | DELETE /projects/{ref}/server |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
confirm | string | 예 | 프로젝트 ID(ref). ref와 같아야 해요. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"confirm": {
"type": "string",
"description": "프로젝트 ID(ref). ref와 같아야 해요."
}
},
"required": [
"ref",
"confirm"
],
"additionalProperties": false
}set_restore_days 되돌리기 기간
파괴적
특정 시각으로 되돌릴 수 있는 기간을 7일 또는 28일로 정해요. 28일은 전용 서버에서만 되고 월 추가 요금이 있어요(get_server의 options, get_billing). 소유자·관리자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | write |
| 역할 | project.admin 소유자·관리자 |
| 콘솔 도우미 확인 | 묻지 않아요 |
| REST | PUT /projects/{ref}/server/restore-days |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
ref | string, pattern ^[a-z]{20}$ | 예 | 프로젝트 ID(ref). list_projects로 확인해요. |
days | integer, 7 | 28 | 예 | 7 또는 28. |
JSON 스키마
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"pattern": "^[a-z]{20}$",
"description": "프로젝트 ID(ref). list_projects로 확인해요."
},
"days": {
"type": "integer",
"enum": [
7,
28
],
"description": "7 또는 28."
}
},
"required": [
"ref",
"days"
],
"additionalProperties": false
}list_platform_settings 플랫폼 설정 목록
읽기 전용
재배포 없이 바꾸는 플랫폼 설정마다 set, source(env 또는 stored), stored, updated_at, updated_by를 돌려줘요. 값은 절대 돌려주지 않아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
입력이 없어요.
JSON 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}set_platform_setting 플랫폼 설정 저장
파괴적
플랫폼 설정 값 하나를 암호화해 저장해요. 30초 안에 적용되고, 서버 환경에 같은 설정이 있으면 그 값이 먼저예요(source). 값은 다시 안 보여 주고 누가 바꿨는지만 감사 기록에 남아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
key | string, BLACKWALL_IMPORT_SUPABASE_CLIENT_ID | BLACKWALL_IMPORT_SUPABASE_CLIENT_SECRET | BLACKWALL_SERVER_REQUESTS | BLACKWALL_SERVER_NIGHT_UPSCALE | BLACKWALL_SERVER_REQUESTS_REPO | BLACKWALL_POOL_URL | BLACKWALL_POOL_SECRET | BLACKWALL_POOL_LABEL | BLACKWALL_CI_POOL | BLACKWALL_FUNCTION_AGENTS | BLACKWALL_FUNCTION_HOST | BLACKWALL_APP_AGENTS | BLACKWALL_APP_HOST | BLACKWALL_PROJECT_NETWORKS | BLACKWALL_PROJECT_DISK_LIMITS | BLACKWALL_PROJECT_SLICES | BLACKWALL_SERVER_AUTOSCALE | BLACKWALL_PROJECT_READS_PER_MINUTE | BLACKWALL_PROJECT_WRITES_PER_MINUTE | BLACKWALL_PARKING_HOSTS | BLACKWALL_BUILD_CACHE_BUCKET | 예 | 설정 이름. list_platform_settings가 돌려줘요. |
value | string, min length 1, max length 2000 | 예 | 저장할 값. 공백 없이 한 줄. |
JSON 스키마
{
"type": "object",
"properties": {
"key": {
"type": "string",
"enum": [
"BLACKWALL_IMPORT_SUPABASE_CLIENT_ID",
"BLACKWALL_IMPORT_SUPABASE_CLIENT_SECRET",
"BLACKWALL_SERVER_REQUESTS",
"BLACKWALL_SERVER_NIGHT_UPSCALE",
"BLACKWALL_SERVER_REQUESTS_REPO",
"BLACKWALL_POOL_URL",
"BLACKWALL_POOL_SECRET",
"BLACKWALL_POOL_LABEL",
"BLACKWALL_CI_POOL",
"BLACKWALL_FUNCTION_AGENTS",
"BLACKWALL_FUNCTION_HOST",
"BLACKWALL_APP_AGENTS",
"BLACKWALL_APP_HOST",
"BLACKWALL_PROJECT_NETWORKS",
"BLACKWALL_PROJECT_DISK_LIMITS",
"BLACKWALL_PROJECT_SLICES",
"BLACKWALL_SERVER_AUTOSCALE",
"BLACKWALL_PROJECT_READS_PER_MINUTE",
"BLACKWALL_PROJECT_WRITES_PER_MINUTE",
"BLACKWALL_PARKING_HOSTS",
"BLACKWALL_BUILD_CACHE_BUCKET"
],
"description": "설정 이름. list_platform_settings가 돌려줘요."
},
"value": {
"type": "string",
"minLength": 1,
"maxLength": 2000,
"description": "저장할 값. 공백 없이 한 줄."
}
},
"required": [
"key",
"value"
],
"additionalProperties": false
}clear_platform_setting 플랫폼 설정 지우기
파괴적
저장한 값을 지워요. 서버 환경에 같은 설정이 있으면 그 값은 그대로 쓰여요. 저장한 값이 없으면 바꾸는 게 없어요. 운영자만 쓸 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
key | string, BLACKWALL_IMPORT_SUPABASE_CLIENT_ID | BLACKWALL_IMPORT_SUPABASE_CLIENT_SECRET | BLACKWALL_SERVER_REQUESTS | BLACKWALL_SERVER_NIGHT_UPSCALE | BLACKWALL_SERVER_REQUESTS_REPO | BLACKWALL_POOL_URL | BLACKWALL_POOL_SECRET | BLACKWALL_POOL_LABEL | BLACKWALL_CI_POOL | BLACKWALL_FUNCTION_AGENTS | BLACKWALL_FUNCTION_HOST | BLACKWALL_APP_AGENTS | BLACKWALL_APP_HOST | BLACKWALL_PROJECT_NETWORKS | BLACKWALL_PROJECT_DISK_LIMITS | BLACKWALL_PROJECT_SLICES | BLACKWALL_SERVER_AUTOSCALE | BLACKWALL_PROJECT_READS_PER_MINUTE | BLACKWALL_PROJECT_WRITES_PER_MINUTE | BLACKWALL_PARKING_HOSTS | BLACKWALL_BUILD_CACHE_BUCKET | 예 | 설정 이름. list_platform_settings가 돌려줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"key": {
"type": "string",
"enum": [
"BLACKWALL_IMPORT_SUPABASE_CLIENT_ID",
"BLACKWALL_IMPORT_SUPABASE_CLIENT_SECRET",
"BLACKWALL_SERVER_REQUESTS",
"BLACKWALL_SERVER_NIGHT_UPSCALE",
"BLACKWALL_SERVER_REQUESTS_REPO",
"BLACKWALL_POOL_URL",
"BLACKWALL_POOL_SECRET",
"BLACKWALL_POOL_LABEL",
"BLACKWALL_CI_POOL",
"BLACKWALL_FUNCTION_AGENTS",
"BLACKWALL_FUNCTION_HOST",
"BLACKWALL_APP_AGENTS",
"BLACKWALL_APP_HOST",
"BLACKWALL_PROJECT_NETWORKS",
"BLACKWALL_PROJECT_DISK_LIMITS",
"BLACKWALL_PROJECT_SLICES",
"BLACKWALL_SERVER_AUTOSCALE",
"BLACKWALL_PROJECT_READS_PER_MINUTE",
"BLACKWALL_PROJECT_WRITES_PER_MINUTE",
"BLACKWALL_PARKING_HOSTS",
"BLACKWALL_BUILD_CACHE_BUCKET"
],
"description": "설정 이름. list_platform_settings가 돌려줘요."
}
},
"required": [
"key"
],
"additionalProperties": false
}list_platform_servers 플랫폼 서버 목록
읽기 전용
우리 서버(서비스 서버·빌드 서버·검사 실행 묶음·상시 검사 기계·데이터베이스 대기 서버·고정 출구 서버·백업 저장소)마다 지금 크기, 최근 24시간 사용률, 월 원가(USD), 올리기·내리기가 요청할 변경(raise, lower), 진행 중인 요청과 최근 요청을 돌려줘요. 기계는 구글에서 바로 읽어요(machines: 이름·zone·상태·크기·마지막 켜짐). source가 unread면 구글이 답하지 않은 줄이고 read_error에 이유가 있어요. quota는 프로젝트의 CPU 할당량과 쓰는 양(전체 리전, asia-northeast3, us-west1)이에요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
입력이 없어요.
JSON 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}get_platform_cpu_history 서비스 서버 CPU 기록
읽기 전용
서비스 서버의 최근 CPU를 분 단위 기록에서 읽어요(host_samples). 구간마다 평균·최고(buckets), 그리고 80%·95% 이상이었던 분 수, 따로 일어난 횟수, 가장 길게 이어진 시간과 시작 시각(over)을 돌려줘요. "몇 번, 얼마나 오래"를 보고 서버를 올릴지 판단할 때 써요. samples가 expected_samples보다 많이 적으면 그 시간에는 기록이 없었던 거예요. 기록은 48시간만 남아요. 운영자만 쓸 수 있어요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
hours | integer, min 1, max 48 | 아니요 | 몇 시간 전부터. 기본 24. |
bucket_minutes | integer, min 1, max 60 | 아니요 | 구간 길이(분). 기본 5. |
JSON 스키마
{
"type": "object",
"properties": {
"hours": {
"type": "integer",
"minimum": 1,
"maximum": 48,
"description": "몇 시간 전부터. 기본 24."
},
"bucket_minutes": {
"type": "integer",
"minimum": 1,
"maximum": 60,
"description": "구간 길이(분). 기본 5."
}
},
"additionalProperties": false
}request_platform_server_change 플랫폼 서버 변경 요청
파괴적
서버 하나의 변경을 요청해요: 서비스 서버 크기(main, resize), 빌드 서버 켜기·끄기·크기(build), 데이터베이스 대기 서버 켜기·끄기(standby), 백업 다른 지역 사본(backup, replica), 기계 하나를 이름으로 켜기·끄기·크기(vm), 상시 검사 기계 끄기(runner, retire: 다섯 저장소 RUNNER 변수를 먼저 지우고 확인한 뒤 끔), 검사 실행 묶음 정리(pool, reset: 켜져 있지만 검사를 돌리지 않는 기계를 모두 끔), 검사 기계 이미지 굽기(pool, bake: 임시 기계를 startup.sh로 준비해 이미지 묶음 oneserver-pool로 만들고 기계는 지움), Cloud NAT 만들기(network, nat: region의 라우터와 NAT가 없으면 만듦), 빌드 기계 이미지 굽기(build-image, bake: 임시 기계에 docker·node·플랫폼·빌드 이미지를 설치해 이미지 묶음 blackwall-build로 만들고 기계는 지움. 새 빌드 기계가 그 이미지로 빨리 켜짐). 리컨사일러가 deploy 워크플로로, vm·runner·pool·network·build-image는 이 서버의 서비스 계정으로 실행해요. 서비스 서버 크기 변경은 모든 사이트가 3~5분 멈춰서 confirm=true가 있어야 하고, 기본 시각은 tonight(한국 시간 03:00~05:00)이에요. 서버마다 끝나지 않은 요청은 하나만 돼요. BLACKWALL_SERVER_REQUESTS=on일 때만 돼요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
server | string, main | build | standby | backup | vm | runner | pool | network | build-image | 예 | 바꿀 서버. vm은 기계 하나를 이름으로, runner는 상시 검사 기계 끄기, pool은 검사 실행 묶음, network는 Cloud NAT, build-image는 빌드 기계 이미지. |
action | string, resize | on | off | replica | start | stop | retire | reset | nat | bake | 예 | main은 resize, build는 on·off·resize, standby는 on·off, backup은 replica, vm은 start·stop·resize, runner는 retire, pool은 reset·bake, network는 nat, build-image는 bake. |
region | string, us-west1 | 아니요 | network nat의 지역. 기본 us-west1(검사 실행 묶음의 지역). |
to | string, e2-medium | e2-standard-2 | e2-standard-4 | e2-standard-8 | 아니요 | resize의 새 크기. |
instance | string | 아니요 | vm의 기계 이름: blackwall-build, blackwall-db-standby, oneserver-runner, oneserver-pool-1~6. |
zone | string | 아니요 | vm의 zone. 비우면 그 기계의 기본 zone. |
repos | array<string> | 아니요 | runner retire에서 RUNNER를 지울 저장소(owner/name). 비우면 다섯 저장소. |
when | string, now | tonight | 아니요 | now 또는 tonight(한국 시간 03:00~05:00). main은 tonight가 기본, 나머지는 now가 기본. |
confirm | boolean | 아니요 | main resize에 필요해요: 3~5분 멈춤을 알고 요청한다는 뜻. |
no_downtime | boolean | 아니요 | main resize를 멈춤 없이. 건강한 대기 서버와 사이트를 받는 두 번째 서버가 있어야 해서, 지금은 거절돼요. |
location | string | 아니요 | backup replica의 지역. 기본 us-west1(오리건), none이면 사본을 멈춰요. |
reason | string, max length 300 | 아니요 | 왜 바꾸는지. 감사 기록에 남아요. |
JSON 스키마
{
"type": "object",
"properties": {
"server": {
"type": "string",
"enum": [
"main",
"build",
"standby",
"backup",
"vm",
"runner",
"pool",
"network",
"build-image"
],
"description": "바꿀 서버. vm은 기계 하나를 이름으로, runner는 상시 검사 기계 끄기, pool은 검사 실행 묶음, network는 Cloud NAT, build-image는 빌드 기계 이미지."
},
"action": {
"type": "string",
"enum": [
"resize",
"on",
"off",
"replica",
"start",
"stop",
"retire",
"reset",
"nat",
"bake"
],
"description": "main은 resize, build는 on·off·resize, standby는 on·off, backup은 replica, vm은 start·stop·resize, runner는 retire, pool은 reset·bake, network는 nat, build-image는 bake."
},
"region": {
"type": "string",
"enum": [
"us-west1"
],
"description": "network nat의 지역. 기본 us-west1(검사 실행 묶음의 지역)."
},
"to": {
"type": "string",
"enum": [
"e2-medium",
"e2-standard-2",
"e2-standard-4",
"e2-standard-8"
],
"description": "resize의 새 크기."
},
"instance": {
"type": "string",
"description": "vm의 기계 이름: blackwall-build, blackwall-db-standby, oneserver-runner, oneserver-pool-1~6."
},
"zone": {
"type": "string",
"description": "vm의 zone. 비우면 그 기계의 기본 zone."
},
"repos": {
"type": "array",
"items": {
"type": "string"
},
"description": "runner retire에서 RUNNER를 지울 저장소(owner/name). 비우면 다섯 저장소."
},
"when": {
"type": "string",
"enum": [
"now",
"tonight"
],
"description": "now 또는 tonight(한국 시간 03:00~05:00). main은 tonight가 기본, 나머지는 now가 기본."
},
"confirm": {
"type": "boolean",
"description": "main resize에 필요해요: 3~5분 멈춤을 알고 요청한다는 뜻."
},
"no_downtime": {
"type": "boolean",
"description": "main resize를 멈춤 없이. 건강한 대기 서버와 사이트를 받는 두 번째 서버가 있어야 해서, 지금은 거절돼요."
},
"location": {
"type": "string",
"description": "backup replica의 지역. 기본 us-west1(오리건), none이면 사본을 멈춰요."
},
"reason": {
"type": "string",
"maxLength": 300,
"description": "왜 바꾸는지. 감사 기록에 남아요."
}
},
"required": [
"server",
"action"
],
"additionalProperties": false
}get_platform_server_request 플랫폼 서버 변경 요청 보기
읽기 전용
요청 하나의 상태(queued, dispatched, done, failed, refused, canceled)와 지금까지의 기록, 워크플로 실행 주소(run_url)를 돌려줘요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
id | string | 예 | 요청 id. request_platform_server_change나 list_platform_servers가 돌려줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "요청 id. request_platform_server_change나 list_platform_servers가 돌려줘요."
}
},
"required": [
"id"
],
"additionalProperties": false
}cancel_platform_server_request 플랫폼 서버 변경 요청 취소
파괴적
아직 실행을 시작하지 않은(queued) 요청을 취소해요. 이미 시작한 요청은 GitHub의 실행 화면에서 멈춰야 해요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
id | string | 예 | 요청 id. request_platform_server_change나 list_platform_servers가 돌려줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "요청 id. request_platform_server_change나 list_platform_servers가 돌려줘요."
}
},
"required": [
"id"
],
"additionalProperties": false
}list_github_variables GitHub 저장소 변수 목록
읽기 전용
플랫폼의 GitHub App이 설치된 저장소의 Actions 변수(vars.RUNNER 같은)를 이름·값·바뀐 때와 함께 돌려줘요. App에 Variables 읽기 권한이 없으면 그 권한을 주는 방법을 알려 줘요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
repo | string, pattern ^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$ | 예 | 저장소 owner/name. 예: Blackkyle8/BlackAll. |
JSON 스키마
{
"type": "object",
"properties": {
"repo": {
"type": "string",
"pattern": "^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$",
"description": "저장소 owner/name. 예: Blackkyle8/BlackAll."
}
},
"required": [
"repo"
],
"additionalProperties": false
}set_github_variable GitHub 저장소 변수 저장
파괴적
저장소의 Actions 변수 하나를 저장해요(없으면 만들어요). 누가 어느 저장소의 어떤 변수를 바꿨는지 감사 기록에 남아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
repo | string, pattern ^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$ | 예 | 저장소 owner/name. 예: Blackkyle8/BlackAll. |
name | string, pattern ^[A-Za-z_][A-Za-z0-9_]*$ | 예 | 변수 이름. 예: RUNNER. |
value | string, max length 48000 | 예 | 값. |
JSON 스키마
{
"type": "object",
"properties": {
"repo": {
"type": "string",
"pattern": "^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$",
"description": "저장소 owner/name. 예: Blackkyle8/BlackAll."
},
"name": {
"type": "string",
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
"description": "변수 이름. 예: RUNNER."
},
"value": {
"type": "string",
"maxLength": 48000,
"description": "값."
}
},
"required": [
"repo",
"name",
"value"
],
"additionalProperties": false
}delete_github_variable GitHub 저장소 변수 지우기
파괴적
저장소의 Actions 변수 하나를 지워요. 예: RUNNER를 지우면 그 저장소 검사는 GitHub 기계(ubuntu-latest)로 가요. 감사 기록에 남아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
repo | string, pattern ^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$ | 예 | 저장소 owner/name. 예: Blackkyle8/BlackAll. |
name | string, pattern ^[A-Za-z_][A-Za-z0-9_]*$ | 예 | 변수 이름. 예: RUNNER. |
JSON 스키마
{
"type": "object",
"properties": {
"repo": {
"type": "string",
"pattern": "^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$",
"description": "저장소 owner/name. 예: Blackkyle8/BlackAll."
},
"name": {
"type": "string",
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
"description": "변수 이름. 예: RUNNER."
}
},
"required": [
"repo",
"name"
],
"additionalProperties": false
}list_platform_operators 운영자 목록
읽기 전용
운영자 주소마다 source(env: 서버 환경 BLACKWALL_OPERATOR_EMAILS, stored: 운영자가 넣은 것), 누가 언제 넣었는지를 돌려줘요. 운영자 도구를 쓰려면 목록에 더해 그 계정에 2단계 인증이 켜져 있어야 해요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
입력이 없어요.
JSON 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}add_platform_operator 운영자 넣기
파괴적
주소 하나를 운영자 목록에 넣어요. 재배포 없이 30초 안에 적용되고 감사 기록에 남아요. 이미 있으면 바꾸는 게 없어요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
email | string, max length 320 | 예 | 주소. 예: [email protected]. |
JSON 스키마
{
"type": "object",
"properties": {
"email": {
"type": "string",
"maxLength": 320,
"description": "주소. 예: [email protected]."
}
},
"required": [
"email"
],
"additionalProperties": false
}remove_platform_operator 운영자 빼기
파괴적
운영자가 넣은(source stored) 주소 하나를 목록에서 빼요. 서버 환경에 있는 주소와 자기 주소는 뺄 수 없어요. 감사 기록에 남아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
email | string, max length 320 | 예 | 주소. 예: [email protected]. |
JSON 스키마
{
"type": "object",
"properties": {
"email": {
"type": "string",
"maxLength": 320,
"description": "주소. 예: [email protected]."
}
},
"required": [
"email"
],
"additionalProperties": false
}list_platform_runs 플랫폼 워크플로 실행 목록
읽기 전용
One Server 저장소의 checks, deploy, ops, static-egress 워크플로의 최근 실행을 새것부터 돌려줘요: id, status, conclusion, age_minutes, url. 15분 넘게 기계를 기다리는(queued) 실행은 stuck: true예요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
workflow | string, checks.yml | deploy.yml | ops.yml | static-egress.yml | 아니요 | 한 워크플로만. 비우면 넷 다. |
per_workflow | integer, min 1, max 20 | 아니요 | 워크플로마다 몇 개. 기본 5. |
JSON 스키마
{
"type": "object",
"properties": {
"workflow": {
"type": "string",
"enum": [
"checks.yml",
"deploy.yml",
"ops.yml",
"static-egress.yml"
],
"description": "한 워크플로만. 비우면 넷 다."
},
"per_workflow": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "워크플로마다 몇 개. 기본 5."
}
},
"additionalProperties": false
}cancel_platform_run 플랫폼 워크플로 실행 취소
파괴적
끝나지 않은 실행 하나를 취소해요. 배포 중인 실행을 취소하면 그 배포는 반쯤 된 채로 남을 수 있어요. 감사 기록에 남아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 항상 물어요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
id | integer, min 1 | 예 | 실행 id. list_platform_runs가 돌려줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1,
"description": "실행 id. list_platform_runs가 돌려줘요."
}
},
"required": [
"id"
],
"additionalProperties": false
}rerun_platform_run 플랫폼 워크플로 다시 실행
파괴적
끝난 실행 하나를 다시 돌려요. failed_only=true면 실패한 작업만이에요. 감사 기록에 남아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
id | integer, min 1 | 예 | 실행 id. list_platform_runs가 돌려줘요. |
failed_only | boolean | 아니요 | 실패한 작업만 다시. 기본 false. |
JSON 스키마
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1,
"description": "실행 id. list_platform_runs가 돌려줘요."
},
"failed_only": {
"type": "boolean",
"description": "실패한 작업만 다시. 기본 false."
}
},
"required": [
"id"
],
"additionalProperties": false
}list_platform_checks 플랫폼 검사 목록
읽기 전용
One Server가 GitHub Actions 없이 직접 돌리는 저장소 검사(BLACKWALL_OWN_CI)의 최근 실행을 새것부터 돌려줘요: kind(main, pr, merge), commit, state, 작업별 state·step·machine, broke_main(main을 깨뜨린 커밋), had_stuck(멈춘 기계를 다시 돌림). 지금 일하는 컨트롤러(controller: seoul 또는 tokyo)와 통과하면 병합 대기(merge_when_green)도 돌려줘요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
limit | integer, min 1, max 50 | 아니요 | 몇 개. 기본 20. |
JSON 스키마
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "몇 개. 기본 20."
}
},
"additionalProperties": false
}set_merge_when_green 통과하면 병합
파괴적
플랫폼 저장소의 풀 리퀘스트 하나를 통과하면 병합 대기에 넣거나(enabled=true) 빼요(false). 대기 중인 풀 리퀘스트를 main 위에 함께 합쳐 검사하고, 통과하면 넣은 순서대로 병합해요. 실패하면 반씩 나눠 다시 검사해 원인 하나를 돌려보내고 나머지는 병합해요. main과 충돌하는 것은 충돌한 파일 이름과 함께 돌려보내요. 감사 기록에 남아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
pr | integer, min 1 | 예 | 풀 리퀘스트 번호. 예: 431. |
enabled | boolean | 예 | true면 넣고 false면 빼요. |
JSON 스키마
{
"type": "object",
"properties": {
"pr": {
"type": "integer",
"minimum": 1,
"description": "풀 리퀘스트 번호. 예: 431."
},
"enabled": {
"type": "boolean",
"description": "true면 넣고 false면 빼요."
}
},
"required": [
"pr",
"enabled"
],
"additionalProperties": false
}get_ci_machines 검사 기계
읽기 전용
검사와 배포를 돌리는 기계를 돌려줘요: 상시 배포 기계(oneserver-runner), 검사 실행 묶음(oneserver-pool-N), 우리 검사의 도쿄 대기 컨트롤러(oneserver-ci-standby). 기계마다 status, zone, last_start, registration(GitHub 러너 등록 상태), last_job(마지막으로 받은 작업)과, 지금 일하는 검사 컨트롤러(controller)예요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
입력이 없어요.
JSON 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}restart_ci_machine 검사 기계 다시 켜기
파괴적
검사 기계 하나를 다시 켜요(Google의 reset, 전원 버튼과 같아요). 그 기계에서 돌던 작업은 끊겨요. oneserver-runner, oneserver-pool-<번호>, oneserver-ci-standby만 되고, 다른 이름은 Google에 묻기 전에 거절해요. 감사 기록에 남아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
name | string, pattern ^(oneserver-runner(-[a-z0-9-]+)?|oneserver-pool-[0-9]+|oneserver-ci-standby)$ | 예 | 기계 이름. 예: oneserver-runner. get_ci_machines가 돌려줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^(oneserver-runner(-[a-z0-9-]+)?|oneserver-pool-[0-9]+|oneserver-ci-standby)$",
"description": "기계 이름. 예: oneserver-runner. get_ci_machines가 돌려줘요."
}
},
"required": [
"name"
],
"additionalProperties": false
}renew_ci_registration 검사 기계 다시 등록
파괴적
기계의 GitHub 러너를 플랫폼의 GitHub App 토큰으로 다시 등록해요(개인 토큰 없이). oneserver-runner는 저장소마다 새 등록 토큰을 받아 다시 켜고, oneserver-pool-<번호>는 남은 등록을 지우고 꺼서 컨트롤러가 새로 등록하게 해요. 감사 기록에 남아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
name | string, pattern ^(oneserver-runner(-[a-z0-9-]+)?|oneserver-pool-[0-9]+|oneserver-ci-standby)$ | 예 | 기계 이름. 예: oneserver-runner. get_ci_machines가 돌려줘요. |
JSON 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^(oneserver-runner(-[a-z0-9-]+)?|oneserver-pool-[0-9]+|oneserver-ci-standby)$",
"description": "기계 이름. 예: oneserver-runner. get_ci_machines가 돌려줘요."
}
},
"required": [
"name"
],
"additionalProperties": false
}set_up_build_cache_bucket 빌드 캐시 버킷 준비
파괴적
빌드 캐시 전용 Google Cloud Storage 버킷을 빌드 기계가 있는 지역에 만들고(없을 때만), 14일 뒤 지우는 규칙을 걸고, 빌드 기계의 서비스 계정에 만들기·읽기 권한만 주고(지우기는 안 줘요), 플랫폼 설정 BLACKWALL_BUILD_CACHE_BUCKET에 저장해요. 이름은 프로젝트와 지역으로 정해져요(직접 못 적어요). 지역은 asia-northeast1(도쿄)·asia-northeast3(서울)·us-west1(오레곤)뿐이에요. 다시 불러도 바뀌는 게 없어요. 본체 서버의 Google 계정에 버킷 만들기 권한이 없으면 403으로 멈추고 콘솔에서 줄 권한을 알려줘요. 빌드 기계가 쓸 수 있다고 확인되기 전에는 설정을 저장하지 않아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
region | string, asia-northeast1 | asia-northeast3 | us-west1 | 예 | 빌드 기계가 있는 지역. 지금 풀이 도쿄면 asia-northeast1. |
service_account | string, max length 320 | 아니요 | 권한을 줄 서비스 계정. 비우면 blackwall-build 원형 기계의 계정을 찾아 써요. |
JSON 스키마
{
"type": "object",
"properties": {
"region": {
"type": "string",
"enum": [
"asia-northeast1",
"asia-northeast3",
"us-west1"
],
"description": "빌드 기계가 있는 지역. 지금 풀이 도쿄면 asia-northeast1."
},
"service_account": {
"type": "string",
"maxLength": 320,
"description": "권한을 줄 서비스 계정. 비우면 blackwall-build 원형 기계의 계정을 찾아 써요."
}
},
"required": [
"region"
],
"additionalProperties": false
}get_platform_overview 플랫폼 전체 상황
읽기 전용
플랫폼 전체를 한 번에 돌려줘요: 조직·프로젝트 수(상태별·요금제별), 준비되지 않은 프로젝트, 고객 서버와 그 작업(대기·실행·최근 7일 실패, id와 경과 분), 전용 디스크·전용 서버 요청(dedicated_requests: id, target disk·vm, 상태, 경과 분), 최근 24시간 배포(상태별, 실패, 30분 넘게 멈춘 것), 검사 기계 요약(ci_machines), 서버 판매 스위치, 그리고 손볼 것 목록(attention: what, id, detail, age_minutes, next_tool). 아무것도 바꾸지 않아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
입력이 없어요.
JSON 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}find_customer 고객 찾기
읽기 전용
주소(이메일), 조직 id, 사용자 id, 프로젝트 ref·id, 도메인, 조직이나 프로젝트 이름으로 조직을 찾아요(최대 10개). 조직마다 matched_by, 소유자 주소, 요금제, 상태, 정지 여부와 프로젝트마다 상태, 지역, 마지막 배포, 도메인, 고객 서버, 진행 중인 전용 요청을 돌려줘요. 아무것도 바꾸지 않아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
query | string, min length 2, max length 320 | 예 | 찾을 것. 예: [email protected], 프로젝트 ref, example.com, 조직 이름. |
JSON 스키마
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 2,
"maxLength": 320,
"description": "찾을 것. 예: [email protected], 프로젝트 ref, example.com, 조직 이름."
}
},
"required": [
"query"
],
"additionalProperties": false
}list_parking_hosts 무료 서버
읽기 전용
무료 프로젝트를 모아 담는 지역별 무료 서버를 돌려줘요: 서버마다 지역, 기계 이름(machine), zone, 상태, 담은 프로젝트 수와 최대(projects, max_projects), 메모리(memory_used_mb, memory_mb), 아직 옮겨 오는 중인 수(moving), 유료로 바뀌어 전용 DB 서버로 옮겨야 하는 프로젝트(paid), 그리고 지역마다 자리를 기다리는 프로젝트 수(waiting)와 스위치(switch: BLACKWALL_PARKING_HOSTS). 아무것도 바꾸지 않아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
입력이 없어요.
JSON 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}list_project_placements 프로젝트 위치
읽기 전용
프로젝트마다 운영 데이터베이스가 어디 있는지 돌려줘요: 프로젝트 지역(region), 놓인 곳(placed_on: machine 전용 DB 서버, free_server 무료 서버, disk 메인 서버의 전용 디스크, main_host 메인 서버, shared_cluster 공유 클러스터, none 아직 없음), 기계 이름(machine), zone과 그 zone의 지역(zone_region), 프로젝트 지역 안인지(in_region), 만드는 중인 전용 DB 서버의 zone(pending_zone). 그리고 zone마다 지역, 전용 DB 서버를 만드는지(machines), 놓인 프로젝트 수, 스위치(switch: machines_follow_region), 지역 밖 수(outside_region), 메인 서버에 남은 수(on_main_host). 아무것도 바꾸지 않아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
입력이 없어요.
JSON 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}get_platform_server_pricing 고객 서버 크기와 가격
읽기 전용
고객 서버 판매 스위치(policy: customer_hosts, server_sizes_listed, customer_host_regions, krw_per_usd 등)와 크기마다 기계, 메모리, listed(고객에게 보이고 빌릴 수 있는지), plan, margin_floor, 빌려 쓰는 서버 수, 지역마다 기계 원가·전체 원가(USD), 가격(usd_minor 센트, krw_minor 원), 받는 돈(received_usd: 부가세·수수료 뺀 원·달러 중 낮은 쪽), 마진, for_sale을 돌려줘요. violations가 비어 있지 않으면 마진 하한 아래인 가격이 있다는 뜻이에요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
입력이 없어요.
JSON 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}set_platform_server_pricing 고객 서버 판매 스위치 바꾸기
파괴적
server_pricing_policy의 항목을 하나 이상 바꿔요. 예: customer_hosts=true와 server_sizes_listed=true면 고객이 서버 크기를 보고 빌릴 수 있어요. 준 항목만 바뀌고 바로 적용돼요. 감사 기록에 누가 언제 어느 항목을 무엇에서 무엇으로 바꿨는지 남아요. 환율을 바꿔 마진 하한 아래로 내려가는 가격이 생기면 거절해요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
customer_hosts | boolean | 아니요 | 고객이 자기 서버를 빌릴 수 있어요. 끄면 새 요청을 거절해요. |
server_sizes_listed | boolean | 아니요 | 서버 크기와 가격을 고객에게 보여 줘요(콘솔·CLI·MCP·REST). |
region_rates | boolean | 아니요 | 지역별 사용량 요금을 적용해요. |
build_machine_plans | boolean | 아니요 | 향상·터보 빌드 기계를 Pro 이상에만 열어요. |
customer_host_regions | array<string>, min items 1, max items 20 | 아니요 | 서버를 빌려줄 지역 코드. 예: ["kr-seoul-1"]. 원가가 있는 지역만 돼요. |
krw_per_usd | number, min 100, max 10000 | 아니요 | 마진 검사와 원 가격 계산에 쓰는 환율(원/달러). 기본 1475. |
customer_host_grace_days | integer, min 1, max 30 | 아니요 | 결제가 끊긴 뒤 읽기 전용으로 두는 날 수. |
customer_host_create_minutes | integer, min 3, max 60 | 아니요 | 기계가 이만큼 답하지 않으면 지우고 다시 만들어요(분). |
customer_host_max_attempts | integer, min 1, max 10 | 아니요 | 만들기를 몇 번까지 다시 해 보는지. |
customer_host_disk_gb | integer, min 10, max 2000 | 아니요 | 새 서버의 디스크 크기(GB). |
customer_host_move_days | integer, min 1, max 365 | 아니요 | 서버 지역 옮기기 사이에 둬야 하는 날 수. |
customer_host_retired_days | integer, min 0, max 30 | 아니요 | 옮긴 뒤 옛 서버를 두는 날 수. |
JSON 스키마
{
"type": "object",
"properties": {
"customer_hosts": {
"type": "boolean",
"description": "고객이 자기 서버를 빌릴 수 있어요. 끄면 새 요청을 거절해요."
},
"server_sizes_listed": {
"type": "boolean",
"description": "서버 크기와 가격을 고객에게 보여 줘요(콘솔·CLI·MCP·REST)."
},
"region_rates": {
"type": "boolean",
"description": "지역별 사용량 요금을 적용해요."
},
"build_machine_plans": {
"type": "boolean",
"description": "향상·터보 빌드 기계를 Pro 이상에만 열어요."
},
"customer_host_regions": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 20,
"description": "서버를 빌려줄 지역 코드. 예: [\"kr-seoul-1\"]. 원가가 있는 지역만 돼요."
},
"krw_per_usd": {
"type": "number",
"minimum": 100,
"maximum": 10000,
"description": "마진 검사와 원 가격 계산에 쓰는 환율(원/달러). 기본 1475."
},
"customer_host_grace_days": {
"type": "integer",
"minimum": 1,
"maximum": 30,
"description": "결제가 끊긴 뒤 읽기 전용으로 두는 날 수."
},
"customer_host_create_minutes": {
"type": "integer",
"minimum": 3,
"maximum": 60,
"description": "기계가 이만큼 답하지 않으면 지우고 다시 만들어요(분)."
},
"customer_host_max_attempts": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "만들기를 몇 번까지 다시 해 보는지."
},
"customer_host_disk_gb": {
"type": "integer",
"minimum": 10,
"maximum": 2000,
"description": "새 서버의 디스크 크기(GB)."
},
"customer_host_move_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "서버 지역 옮기기 사이에 둬야 하는 날 수."
},
"customer_host_retired_days": {
"type": "integer",
"minimum": 0,
"maximum": 30,
"description": "옮긴 뒤 옛 서버를 두는 날 수."
}
},
"minProperties": 1,
"additionalProperties": false
}set_platform_server_size 고객 서버 크기 만들기·바꾸기
파괴적
고객 서버 크기 하나를 만들거나 바꿔요: 구글 기계(machine), 고객에게 보일지(listed), 요금제에 들어가는지(plan), 마진 하한(margin_floor), 지역마다 기계 원가와 가격(regions). 크기 이름은 메모리라서 기계의 메모리와 같아야 해요(1gb는 e2-micro). 새 크기는 listed=true를 주지 않으면 숨겨진 채로 만들어져요. 가격은 크기의 마진 하한을 넘어야 하고, 원가보다 싸게 팔려면 allow_loss=true가 필요해요(하한을 그만큼 낮추고 감사 기록에 남아요). 원 가격을 비우면 usd × krw_per_usd를 1,000원 단위로 올려요. 감사 기록에 무엇에서 무엇으로 바꿨는지 남아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
size | string, pattern ^[1-9][0-9]{0,3}gb$ | 예 | 크기 이름(메모리). 예: 1gb, 2gb. |
machine | string, e2-micro | e2-small | e2-medium | e2-standard-2 | e2-standard-4 | e2-standard-8 | e2-standard-16 | e2-standard-32 | e2-highmem-2 | e2-highmem-4 | e2-highmem-8 | e2-highmem-16 | e2-highcpu-8 | e2-highcpu-16 | e2-highcpu-32 | 아니요 | 구글 기계. 새 크기에는 꼭 있어야 해요. 예: e2-micro. |
listed | boolean | 아니요 | 고객에게 보이고 빌릴 수 있어요. 새 크기의 기본은 false예요. |
plan | string | 아니요 | 이 크기가 들어 있는 요금제(예: pro). 그 요금제 청구서에서 이 크기 값을 빼 줘요. null이면 빼요. |
margin_floor | number, min -1, max 1 | 아니요 | 가격이 넘어야 하는 마진(0.3은 30%). 0보다 낮으면 allow_loss=true가 필요해요. |
allow_loss | boolean | 아니요 | 원가보다 싸게 파는 것을 알고 허용해요. 하한을 필요한 만큼 낮춰요. |
regions | array<object>, max items 20 | 아니요 | 지역마다 원가와 가격. 준 지역만 바뀌어요. |
cost_source | string, max length 200 | 아니요 | 원가를 어디서 쟀는지. 예: gcp list price asia-northeast3 2026-10. 비우면 운영자 주소. |
JSON 스키마
{
"type": "object",
"properties": {
"size": {
"type": "string",
"pattern": "^[1-9][0-9]{0,3}gb$",
"description": "크기 이름(메모리). 예: 1gb, 2gb."
},
"machine": {
"type": "string",
"enum": [
"e2-micro",
"e2-small",
"e2-medium",
"e2-standard-2",
"e2-standard-4",
"e2-standard-8",
"e2-standard-16",
"e2-standard-32",
"e2-highmem-2",
"e2-highmem-4",
"e2-highmem-8",
"e2-highmem-16",
"e2-highcpu-8",
"e2-highcpu-16",
"e2-highcpu-32"
],
"description": "구글 기계. 새 크기에는 꼭 있어야 해요. 예: e2-micro."
},
"listed": {
"type": "boolean",
"description": "고객에게 보이고 빌릴 수 있어요. 새 크기의 기본은 false예요."
},
"plan": {
"type": [
"string",
"null"
],
"description": "이 크기가 들어 있는 요금제(예: pro). 그 요금제 청구서에서 이 크기 값을 빼 줘요. null이면 빼요."
},
"margin_floor": {
"type": "number",
"minimum": -1,
"maximum": 1,
"description": "가격이 넘어야 하는 마진(0.3은 30%). 0보다 낮으면 allow_loss=true가 필요해요."
},
"allow_loss": {
"type": "boolean",
"description": "원가보다 싸게 파는 것을 알고 허용해요. 하한을 필요한 만큼 낮춰요."
},
"regions": {
"type": "array",
"maxItems": 20,
"description": "지역마다 원가와 가격. 준 지역만 바뀌어요.",
"items": {
"type": "object",
"properties": {
"region": {
"type": "string",
"pattern": "^[a-z]{2}-[a-z]+-[0-9]+$",
"description": "지역 코드. 예: kr-seoul-1. get_platform_server_pricing의 regions가 돌려줘요."
},
"machine_cost_usd": {
"type": "number",
"minimum": 0,
"description": "구글 기계만의 월 원가(USD, 730시간 정가). 디스크·주소·백업 같은 서버마다의 원가는 지역 값에서 더해요."
},
"usd": {
"type": "number",
"exclusiveMinimum": 0,
"description": "고객 월 가격(달러, 센트까지, 세금 별도). 예: 39."
},
"krw": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "고객 월 가격(원, 부가세 포함). 비우면 usd × 환율(krw_per_usd)을 1,000원 단위로 올려요."
}
},
"required": [
"region"
],
"additionalProperties": false
}
},
"cost_source": {
"type": "string",
"maxLength": 200,
"description": "원가를 어디서 쟀는지. 예: gcp list price asia-northeast3 2026-10. 비우면 운영자 주소."
}
},
"required": [
"size"
],
"additionalProperties": false
}start_support_session 지원 세션 열기
파괴적
고객이 문의했을 때 그 고객 대신 일하려고 고객의 조직에 소유자로 들어가요. 연 동안 그 조직의 프로젝트가 list_projects에 보이고, 다른 모든 도구(배포·데이터베이스·도메인·결제·팀·프로젝트 옮기기 등)를 고객과 같은 권한으로 쓸 수 있어요. reason은 필수이고, 시작과 끝은 고객의 감사 기록에 운영자 주소와 함께 남아요. 기본 60분, 최대 480분이며 시간이 되면 저절로 끝나요. 이미 연 세션에 다시 부르면 시간을 늘려요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
target | string, max length 320 | 예 | 고객의 조직을 찾는 값: 프로젝트 ID(ref), 조직 id, 또는 고객 이메일(조직을 하나만 가진 경우). |
reason | string, min length 4, max length 500 | 예 | 왜 들어가는지. 예: 문의 #123, 프로젝트 이전 요청. 고객의 감사 기록에 남아요. |
minutes | integer, min 5, max 480 | 아니요 | 몇 분 동안. 비우면 60. |
JSON 스키마
{
"type": "object",
"properties": {
"target": {
"type": "string",
"maxLength": 320,
"description": "고객의 조직을 찾는 값: 프로젝트 ID(ref), 조직 id, 또는 고객 이메일(조직을 하나만 가진 경우)."
},
"reason": {
"type": "string",
"minLength": 4,
"maxLength": 500,
"description": "왜 들어가는지. 예: 문의 #123, 프로젝트 이전 요청. 고객의 감사 기록에 남아요."
},
"minutes": {
"type": "integer",
"minimum": 5,
"maximum": 480,
"description": "몇 분 동안. 비우면 60."
}
},
"required": [
"target",
"reason"
],
"additionalProperties": false
}end_support_session 지원 세션 끝내기
파괴적
지원 세션을 끝내고 고객 조직의 소유자 자리에서 나와요. id나 target 중 하나를 넣어요. 끝도 고객의 감사 기록에 남아요. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
id | string | 아니요 | 지원 세션 id. start_support_session이나 list_support_sessions가 돌려줘요. |
target | string, max length 320 | 아니요 | 고객의 조직을 찾는 값: 프로젝트 ID(ref), 조직 id, 또는 고객 이메일(조직을 하나만 가진 경우). |
JSON 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "지원 세션 id. start_support_session이나 list_support_sessions가 돌려줘요."
},
"target": {
"type": "string",
"maxLength": 320,
"description": "고객의 조직을 찾는 값: 프로젝트 ID(ref), 조직 id, 또는 고객 이메일(조직을 하나만 가진 경우)."
}
},
"additionalProperties": false
}list_support_sessions 지원 세션 목록
읽기 전용
열린 지원 세션(모든 운영자의 것)을 고객 조직·운영자·사유·끝나는 시각과 함께 돌려줘요. all=true면 끝난 것도 최근 50개까지. 운영자만 돼요.
| 이름 | 설명 |
|---|---|
| 토큰 범위 | 없음 |
| 역할 | 조직의 모든 구성원 |
| 콘솔 도우미 확인 | 묻지 않아요 |
입력
| 이름 | 형식 | 필수 | 설명 |
|---|---|---|---|
all | boolean | 아니요 | 끝난 세션도 함께. 기본 false. |
JSON 스키마
{
"type": "object",
"properties": {
"all": {
"type": "boolean",
"description": "끝난 세션도 함께. 기본 false."
}
},
"additionalProperties": false
}