One Server

문서

조직: 팀, 알림, 요금, 감사 기록

구성원 초대와 역할, 알림 채널, 청구서, 감사 기록, 그리고 같은 일을 HTTP(/api/v1)로 하는 경로.

조직: 팀, 알림, 요금, 감사 기록

프로젝트는 조직에 속해요. 아래 도구는 조직 전체에 걸리지만, 다른 도구처럼 그 조직의 아무 프로젝트 ref로 불러요. 역할마다 할 수 있는 일이 정해져 있고, 토큰은 주인의 역할을 그대로 가져요. 조직이 여럿이면 create_project의 org(list_projects의 organisation_id나 조직 이름)로 어느 조직에 만들지 골라요. 그 조직의 소유자·관리자·개발자만, 요금제의 프로젝트 수 안에서 만들 수 있어요.

팀

list_team           구성원, 역할, 2단계 인증 여부, 수락 전 초대
invite_member       이메일로 초대 (admin | developer | billing | viewer)
cancel_invitation   보낸 초대 취소
set_member_role     구성원의 역할 바꾸기
remove_member       내보내기 (소유자는 못 내보냄)
set_mfa_required    모든 구성원에게 2단계 인증 요구

사람을 바로 넣는 방법은 없어요. 초대 메일의 링크를 그 사람이 열어야 참여해요(7일). 바꾸는 것은 모두 소유자·관리자만 할 수 있어요.

접근 그룹과 프로젝트 접근

list_access_groups    그룹, 구성원, 프로젝트별 역할
create_access_group   빈 그룹 만들기
update_access_group   이름, 구성원(이메일), 프로젝트별 역할 (developer | billing | viewer)
remove_access_group   그룹 지우기 (confirm에 이름)
get_member_access     구성원 한 명이 여는 프로젝트
set_member_access     모든 프로젝트(scoped false) 또는 고른 프로젝트만(scoped true)

공유 환경 변수

list_shared_env_vars    조직이 여러 프로젝트에 주는 변수 (개발자 이상)
create_shared_env_var   만들기 (key, value, targets, projects)
update_shared_env_var   값, 대상, 연결한 프로젝트 바꾸기
remove_shared_env_var   지우기 (confirm에 이름)

감사 기록 내보내기, 조직 웹훅

list_audit_drains             감사 기록을 보내는 곳 (https | datadog | splunk | syslog)
create_audit_drain            보낼 곳 더하기 (요금제에 있어야 함)
set_audit_drain_enabled       멈추기·다시 보내기
test_audit_drain              시험 기록 하나 보내기
remove_audit_drain            지우기
list_org_webhooks             조직 알림을 보내는 웹훅과 서명 키
create_org_webhook            만들기 (events, projects: 비우면 전부)
set_org_webhook_enabled       멈추기·다시 보내기
test_org_webhook              시험 이벤트 보내기
list_org_webhook_deliveries   전달 기록
retry_org_webhook_delivery    전달 하나 다시 보내기
remove_org_webhook            지우기

외부 커미터, SSO, 배포 정책

get_committer_settings     외부 커미터 정책, 믿는 커미터, 기다리는 프리뷰
set_committer_policy       auto | require
trust_committer            이 이메일의 프리뷰는 승인 없이 빌드
remove_trusted_committer   다시 승인을 기다리게
answer_preview_approval    기다리는 프리뷰에 답하기 (approve | trust | decline)
get_org_sso                조직의 OpenID Connect 로그인과 도메인
set_org_sso                만들기·바꾸기 (준 값만, 요금제에 있어야 함)
remove_org_sso             지우기 (confirm에 issuer)
add_org_sso_domain         도메인 더하기 (TXT 레코드를 줌)
verify_org_sso_domain      DNS에서 TXT 레코드 확인
remove_org_sso_domain      도메인 지우기
get_org_policies           새 프로젝트의 기본 보호, 배포 경로, 프리뷰 도메인
set_org_policies           바꾸기 (준 값만)
set_preview_suffix         프리뷰 도메인 정하기 (TXT 레코드를 줌)
verify_preview_suffix      DNS에서 TXT 레코드 확인
remove_preview_suffix      프리뷰 도메인 지우기

모두 조직 전체에 걸려서, 프로젝트 하나에 묶인 연결(project_ref)에서는 보이지 않아요. 바꾸는 것은 소유자·관리자만 돼요(감사 기록 내보내기는 감사 기록을 읽는 사람, 공유 변수 읽기는 개발자 이상, 기다리는 프리뷰는 그 프로젝트에 쓸 수 있는 사람). 조직의 OAuth 앱(/org/apps)은 조직 이름으로 움직이는 자격 증명이라 도구로 만들지 않아요. 콘솔에서 사람이 만들어요.

알림 채널

list_channels         Slack·카카오워크·웹훅 채널과 마지막 전송 결과
create_channel        추가 (notices: deployments, domains, usage, billing)
test_channel          시험 메시지 한 통
set_channel_enabled   멈추기·다시 받기
remove_channel        삭제

요금과 기록

get_billing      한 달의 청구서와 날짜별 사용량 (소유자·관리자·결제 담당)
get_audit_log    누가 무엇을 바꿨는지(activity), 누가 개인정보에 접근했는지(access) (소유자·관리자)
rename_project   프로젝트 이름, 조직 이름 바꾸기 (소유자·관리자)
list_transfer_targets   프로젝트를 옮길 수 있는 다른 조직 (소유자·관리자)
transfer_project        프로젝트를 다른 조직으로 옮기기 (지금 조직의 소유자, confirm에 프로젝트 이름)
get_plan             지금 요금제와 고를 수 있는 요금제 (소유자·관리자·결제 담당)
get_spend_controls   지출 상한, 월 한도, 이번 달 사용량 (소유자·관리자·결제 담당)
set_spend_cap        지출 상한 켜기·끄기 (소유자·관리자·결제 담당)
set_spend_limit      월 초과 요금 한도와 알림 웹훅 (소유자·관리자·결제 담당)

카드 등록, 요금제 변경, 계정 비밀번호와 토큰, 고객 지원 문의는 도구로 하지 않아요. 콘솔에서 사람이 해요.

같은 일을 HTTP로

https://<zone>/api/v1 아래, 같은 토큰을 Authorization: Bearer로 보내요. 프로젝트 하위 경로는 /projects/<ref> 아래예요.

GET    /regions                          POST /regions/requests {region, note}
GET    /server-sizes?region=&currency=   서버 크기와 지역별 월 금액 (list_server_sizes)
PATCH  /projects/<ref>                   {name, organisation}
GET    /projects/<ref>/transfer          POST /projects/<ref>/transfer {organisation, confirm}
GET    /git                              POST /git/repos {provider, repo, branch}
PUT    /git/tokens/<github|gitlab>       {token, gitlab_base}     DELETE 같은 경로
DELETE /git/github-app
GET    /log-drains                       POST /log-drains {name, kind, url, secret, sources}
PATCH  /log-drains/<id> {enabled}        DELETE /log-drains/<id>
DELETE /users/<id>                       PUT /auth/anonymous {enabled}
GET    /auth/sms                         PUT /auth/sms {provider, key, secret, account, sender, allowed_countries}
DELETE /auth/sms                         GET /auth/sso
GET    /auth/smtp                        PUT /auth/smtp {sender_email, sender_name, host, port, username, password}
DELETE /auth/smtp                        POST /auth/smtp/test {to}
GET    /auth/templates                   GET /auth/templates/<type>   PUT /auth/templates/<type> {subject, body}
DELETE /auth/templates/<type>            POST /auth/templates/<type>/preview {subject, body}
POST   /auth/sso {metadata_url, domains} PUT /auth/sso/<id> {domains}   DELETE /auth/sso/<id>
GET    /config/auth                      PATCH /config/auth {<키>: <값>}
GET    /config/auth/custom-providers     POST /config/auth/custom-providers {identifier, name, provider_type, issuer, client_id, client_secret, claim_map, token_auth, pkce, jwks_uri, email_optional}
PUT    /config/auth/custom-providers/<identifier>   PATCH 같은 경로 {enabled}   DELETE 같은 경로
GET    /config/auth/third-party-auth     POST /config/auth/third-party-auth {type, value, region, audiences}   DELETE /config/auth/third-party-auth/<id>
PUT    /function-egress {enabled}
GET    /server-memory
PUT    /server-memory {memory_mb}
GET    /concurrent-builds                PUT /concurrent-builds {concurrent_builds}
GET    /network                          POST /network/static-outbound-ip   DELETE 같은 경로
GET    /team                             POST /team/invitations {email, role}
DELETE /team/invitations/<id>            PUT /team/mfa {required}
PATCH  /team/members/<email> {role}      DELETE /team/members/<email>
GET    /channels                         POST /channels {kind, name, url, notices}
POST   /channels/<id>/test               PATCH /channels/<id> {enabled}   DELETE /channels/<id>
GET    /realtime                         PUT /realtime/<표> {enabled}
GET    /extensions                       PUT /extensions/<이름>   DELETE /extensions/<이름>
GET    /branches                         POST /branches {name, git_branch, with_seed}   PUT /branching {automatic, seed_sql, lifetime_days}
POST   /branches/<이름>/merge             POST /branches/<이름>/reset   DELETE /branches/<이름>
GET    /queues                           POST /queues {name, unlogged}   PUT /queues/api {exposed}   DELETE /queues/<이름>
POST   /queues/<이름>/messages {message, delay}   GET /queues/<이름>/messages?limit=   POST /queues/<이름>/purge
GET    /vault                            POST /vault {name, value, description}   PATCH·DELETE /vault/<이름>
GET    /network-restrictions             PUT /network-restrictions {allowed_cidrs, allow_all, enforce_ssl, confirm}
GET    /metrics?range=24h                GET /billing?period=YYYY-MM
GET    /billing/plan                     GET /billing/spend
PUT    /billing/spend-cap {enabled}      PUT /billing/spend-limit {spend_limit_minor, webhook_url}
POST   /deployments/sources (본문: 압축 파일)     POST /deployments {source | files, target, prebuilt}
GET    /buckets/<버킷>/objects?prefix=     POST /buckets/<버킷>/objects {name, content, encoding, upsert}
GET    /buckets/<버킷>/object?name=        DELETE /buckets/<버킷>/object?name=
POST   /buckets/<버킷>/signed-urls {name, expires_in}
PATCH  /buckets/<버킷> {public, file_size_limit, allowed_mime_types}   POST /buckets/<버킷>/empty   DELETE /buckets/<버킷> {confirm}
PATCH  /users/<id> {email, password, email_confirm, ban_duration, user_metadata, app_metadata}
POST   /users/import {users, dry_run}
POST   /users/<이메일>/links {type, password, data, redirect_to}
GET    /tables/<표>/csv?column=&op=&value=&sort=&desc=   POST /tables/<표>/csv {csv, columns}
POST   /deployments/sources/upload-urls  그 url에 PUT (본문: 압축 파일, 토큰 없이)
POST   /projects {name, region, org}
GET    /audit?tab=activity|access&from=&to=&actor=&action=&limit=&offset=
GET    /signing                          PUT /signing {alg}
POST   /signing/rotate {grace_hours}     DELETE /signing/keys/<kid>
PUT    /domains/<도메인>/certificate {certificate, key}   DELETE 같은 경로
PUT    /domains/<도메인>/redirect {to, status}       to: 도메인 또는 도메인/경로, 비우면 끄기