도메인 구매 및 갱신
도메인 카테고리의 API 작업 10개를 다룹니다.
| 메서드 | 경로 | 설명 |
|---|---|---|
| GET | /v1/orgs/{orgSlug}/domains | org의 도메인(runlot domains list) |
| POST | /v1/orgs/{orgSlug}/domains | 도메인 구매(runlot domains buy) |
| POST | /v1/orgs/{orgSlug}/domains/check | 도메인 이름 조회(runlot domains check) |
| POST | /v1/orgs/{orgSlug}/domains/import | 소유한 도메인 가져오기(runlot domains import) |
| GET | /v1/orgs/{orgSlug}/domains/{name} | 도메인 정보 및 최근 변경 이력(runlot domains show) |
| POST | /v1/orgs/{orgSlug}/domains/{name}/renew | 도메인을 갱신합니다 (runlot domains renew) |
| POST | /v1/orgs/{orgSlug}/domains/{name}/auto-renew | 자동 갱신 설정을 변경합니다 |
| POST | /v1/orgs/{orgSlug}/domains/{name}/lock | 이전 잠금을 켜고 끕니다(runlot domains lock|unlock) |
| POST | /v1/orgs/{orgSlug}/domains/{name}/auth-code | 이전 인증 코드를 확인합니다(runlot domains auth-code) |
| POST | /v1/orgs/{orgSlug}/domains/{name}/sync | 등록기관에서 이 도메인을 지금 다시 읽습니다 (runlot domains sync) |
GET /v1/orgs/{orgSlug}/domains
viewer 이상이 필요합니다.
operationId listDomains
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 목록 조회 | DomainList |
| 403 | — | — |
| 404 | — | — |
| 503 | no_core — 서비스를 일시적으로 사용할 수 없습니다 | Error |
POST /v1/orgs/{orgSlug}/domains
admin 이상 권한이 필요합니다 — 비용이 발생합니다. domain.purchase로 감사되며, 연락처 정보는 감사 로그에 보관되지 않습니다.
등록 직후 도메인의 네임서버는 Runlot의 네임서버(ns1~3.runlot.app)로 설정되므로 별도의 소유권 확인이 필요 없으며 즉시 앱을 연결할 수 있습니다. ICANN의 확인 이메일이 contact 주소로 발송됩니다 — 고객이 등록하기 전에 이를 알려주세요.
동일한 요청을 다시 보내는 것은 안전합니다: 완료된 구매는 200을 반환하고, 중단된 구매는 멈춘 지점부터 재개됩니다.
operationId purchaseDomain
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 이미 구매된 도메인(멱등) | Domain |
| 201 | 구매 완료 | Domain |
| 400 | — | — |
| 402 | payment_failed — 결제가 거부됨 | Error |
| 403 | — | — |
| 409 | domain_taken·domain_unavailable | Error |
| 422 | registrar_rejected — 등록기관이 전송한 값(연락처 정보 등)을 거부했습니다. 아무것도 등록되지 않았으며, 동일한 요청을 재시도해도 도움이 되지 않습니다. 수정된 입력으로 새 요청을 제출하세요. | Error |
| 502 | saga_incomplete, registrar_error — 구매가 완료되지 않았습니다. 동일한 요청을 다시 보내면 중단된 지점부터 계속됩니다. 재시도로 해결할 수 있는 실패만 여기에 보고됩니다. 502 본문은 CDN 자체의 HTML 페이지로 대체될 수 있으므로, 브라우저 클라이언트에는 code가 표시되지 않을 수 있습니다. | Error |
| 503 | no_core·registrar_not_configured·dns_not_configured | Error |
POST /v1/orgs/{orgSlug}/domains/check
이 호출은 등록기관을 직접 조회하므로 member 이상 권한이 필요합니다.
priceCents는 첫 해 등록 비용을 나타내고, renewalCents는 갱신 1년 비용을 나타냅니다. 첫 해 할인이 흔하기 때문에 두 값은 별도로 제공됩니다.
operationId checkDomains
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 이름별 사용 가능 여부 | object |
| 400 | — | — |
| 403 | — | — |
| 503 | no_core·registrar_not_configured | Error |
POST /v1/orgs/{orgSlug}/domains/import
admin 이상 권한이 필요합니다. domain.import로 감사됩니다. 이 작업은 등록기관에 연락하지 않습니다 — 존만 생성합니다. 사용 중인 등록기관에서 도메인의 네임서버를 ns1~3.runlot.app으로 지정하면, 그 시점부터 Runlot이 해당 도메인의 DNS를 관리합니다.
operationId importDomain
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 이미 가져온 도메인(멱등) | Domain |
| 201 | 가져오기 완료 | Domain |
| 400 | — | — |
| 403 | — | — |
| 409 | domain_taken | Error |
| 503 | no_core·dns_not_configured | Error |
GET /v1/orgs/{orgSlug}/domains/{name}
viewer 이상의 권한이 필요합니다. 다른 org의 이름은 404를 반환합니다.
operationId getDomain
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 도메인 | DomainDetail |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/domains/{name}/renew
admin 이상의 권한이 필요합니다. domain.renew로 감사 기록됩니다.
operationId renewDomain
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 갱신된 도메인 | Domain |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/domains/{name}/auto-renew
admin 이상 권한이 필요합니다. 등록기관에서의 자동 갱신은 이 설정과 관계없이 계속 켜져 있습니다 — 갱신이 하루라도 늦으면 도메인을 잃게 되므로, Runlot은 먼저 갱신한 다음 나중에 청구합니다. 이 설정을 끄는 것은 취소가 아니며, UI에도 그렇게 표시되어야 합니다.
operationId setDomainAutoRenew
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 변경된 도메인 | Domain |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/domains/{name}/lock
관리자 이상 권한이 필요합니다. domain.lock으로 감사 기록됩니다.
operationId setDomainLock
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 변경된 도메인 | Domain |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/domains/{name}/auth-code
admin 이상 권한이 필요합니다. domain.auth_code로 감사됩니다 — 코드 자체는 감사 로그에 기록되지 않습니다, 이를 가진 사람은 누구든 도메인을 다른 곳으로 이전할 수 있기 때문입니다.
코드는 언제든지 요청할 수 있습니다. 이전을 지연시킬 수 있는 유일한 요인은 등록 또는 이전 직후 적용되는 ICANN의 60일 잠금뿐입니다.
operationId getDomainAuthCode
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 코드 | object |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/domains/{name}/sync
member 이상의 권한이 필요합니다. 등록기관(registrar)이 만료일, 이전 잠금(transfer lock), 네임서버에 대한 정보의 원천입니다. 등록기관이 도메인이 더 이상 Runlot에 의해 소유되지 않는다고 보고하면 상태는 transferred_out이 되며, 이는 이전이 완료되었다는 신호입니다.
operationId syncDomain
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 일치한 도메인 | Domain |
| 403 | — | — |
| 404 | — | — |