계정 API

API 키 소유 계정의 정보와 사용량(쿼터)을 조회하는 API입니다. 연동을 시작할 때 키가 올바른지 확인하거나, 발송·검수 전에 잔여 한도와 포인트 잔액을 확인하는 용도로 사용합니다.

시작 전에 모든 요청에는 인증에서 발급한 API 키(Authorization: Bearer …)가 필요합니다. 예시의 ak_live_xxxx 는 더미 키입니다.
쿼터는 매 응답에도 포함됩니다 잔여 한도는 모든 API 응답의 meta.quota 에 항상 포함되므로, 매 호출 전에 쿼터 전체 조회를 따로 호출할 필요는 없습니다. 자세한 규칙은 공통 규약의 응답 래퍼와 meta.quota를 참고하세요.

계정 정보 조회

GET /me

요청에 사용한 API 키의 소유 계정 정보를 조회합니다. 키가 유효한지, 어떤 스코프가 허용되어 있는지 확인할 때 사용합니다. 요청 파라미터는 없습니다.

X-Site-Id 없이 호출할 수 있습니다 이 API는 사이트 목록 조회와 함께 X-Site-Id 헤더를 생략할 수 있는 엔드포인트입니다. 연동 초기, 사이트 ID를 아직 모르는 상태에서 키 검증 용도로 호출하세요.

Response

keyName string

콘솔에서 키를 발급할 때 지정한 키 이름입니다.

scopes array of string

요청에 사용한 API 키에 허용된 스코프 목록입니다. 예: template:read, template:write

plan string

계정 역할/플랜 값입니다. 현재 Open API 분당 요청 한도는 플랜과 무관하게 API 키당 120회입니다.

expiresAt string

API 키의 만료 시각입니다. ISO-8601, KST 오프셋 포함. 만료된 키의 요청은 4002 에러로 거절됩니다.

siteCount number

계정에 연결된 사이트 수입니다. 사이트 목록은 사이트 목록 조회로 확인합니다.

요청 예시
curl "https://docs.almani-center.com/open/v1/me" \
  -H "Authorization: Bearer ak_live_xxxx"
// Java 17 + Spring Framework 6 RestClient
RestClient restClient = RestClient.builder()
        .baseUrl("https://docs.almani-center.com/open/v1")
        .defaultHeader(HttpHeaders.AUTHORIZATION, "Bearer ak_live_xxxx")
        .build();

String response = restClient.get()
        .uri("/me")
        .retrieve()
        .body(String.class);
응답 예시
HTTP/1.1 200 OK

{
  "code": "0000",
  "message": "OK",
  "data": {
    "keyName": "MCP 연동용",
    "scopes": ["template:read", "template:write", "profile:read", "quota:read"],
    "plan": "ENTERPRISE",
    "expiresAt": "2027-01-25T00:00:00+09:00",
    "siteCount": 2
  },
  "meta": {
    "requestId": "req_9f83ab21",
    "quota": {
      "rateLimit": {
        "limit": 120,
        "remaining": 119,
        "resetAt": "2026-07-25T14:31:00+09:00"
      }
    }
  }
}

쿼터 전체 조회

GET /quota

필요 스코프: quota:read

X-Site-Id 헤더로 지정한 사이트 기준의 전체 쿼터를 한 번에 조회합니다. API 키 단위 분당 요청 한도, 사이트 단위 일일 템플릿 검수 한도, 발송 한도, 포인트 잔액, 키 사용 현황이 함께 반환됩니다. 요청 파라미터는 없습니다.

Response

plan string

계정 역할/플랜 값입니다. 현재 분당 요청 한도와 일일 템플릿 검수 한도는 각각 API 키당 120회, 사이트당 30회로 고정됩니다.

rateLimit object

API 키 단위 분당 요청 한도입니다. 허용량은 120회이며, 동일 정보가 모든 응답의 meta.quota.rateLimitRateLimit-* 헤더로도 제공됩니다.

rateLimit.limit int

분당 허용 요청 수입니다. 현재 120회로 고정됩니다.

rateLimit.remaining int

현재 집계 구간에서 남은 요청 수입니다.

rateLimit.resetAt string

한도가 초기화되는 시각입니다. ISO-8601, KST 오프셋 포함.

templateReview object

사이트 단위 일일 템플릿 검수 한도입니다(일자 집계). 한도를 초과하면 심사 요청4291 에러로 거절됩니다.

templateReview.dailyLimit int

하루에 허용되는 템플릿 검수 요청 수입니다.

templateReview.usedToday int

오늘 사용한 검수 요청 수입니다.

templateReview.remaining int

오늘 남은 검수 요청 수입니다.

templateReview.resetAt string

일일 검수 한도가 초기화되는 시각입니다(다음 날 자정). ISO-8601, KST 오프셋 포함.

send object

발송 요청 한도입니다.

send.maxPerRequest int

발송 요청 1건에 담을 수 있는 최대 건수입니다.

points object

포인트 잔액 정보입니다. 발송·과금 관련 API 응답에도 포함됩니다.

points.balance number

현재 포인트 잔액입니다.

points.estimatedAlPrice number

알림톡 1건 발송 시 예상 차감 포인트입니다.

keys object

계정의 API 키 사용 현황입니다.

keys.active int

현재 활성 상태인 API 키 수입니다.

keys.maxAllowed int

계정에서 발급할 수 있는 최대 API 키 수입니다.

주기적 폴링은 필요하지 않습니다 동일한 쿼터 정보가 매 응답의 meta.quota 에 포함되므로, 이 API를 짧은 주기로 반복 호출하지 마세요. 반복 호출도 분당 요청 한도(rateLimit)를 소모합니다.
요청 예시
curl "https://docs.almani-center.com/open/v1/quota" \
  -H "Authorization: Bearer ak_live_xxxx" \
  -H "X-Site-Id: 1024"
// Java 17 + Spring Framework 6 RestClient
RestClient restClient = RestClient.builder()
        .baseUrl("https://docs.almani-center.com/open/v1")
        .defaultHeader(HttpHeaders.AUTHORIZATION, "Bearer ak_live_xxxx")
        .defaultHeader("X-Site-Id", "1024")
        .build();

String response = restClient.get()
        .uri("/quota")
        .retrieve()
        .body(String.class);
응답 예시
HTTP/1.1 200 OK

{
  "code": "0000",
  "message": "OK",
  "data": {
    "plan": "ENTERPRISE",
    "rateLimit": {
      "limit": 120,
      "remaining": 118,
      "resetAt": "2026-07-25T14:31:00+09:00"
    },
    "templateReview": {
      "dailyLimit": 30,
      "usedToday": 5,
      "remaining": 25,
      "resetAt": "2026-07-26T00:00:00+09:00"
    },
    "send": {
      "maxPerRequest": 5000
    },
    "points": {
      "balance": 1523000,
      "estimatedAlPrice": 7.5
    },
    "keys": {
      "active": 2,
      "maxAllowed": 5
    }
  },
  "meta": {
    "requestId": "req_9f83ab21",
    "quota": {
      "rateLimit": {
        "limit": 120,
        "remaining": 118,
        "resetAt": "2026-07-25T14:31:00+09:00"
      },
      "templateReview": {
        "dailyLimit": 30,
        "usedToday": 5,
        "remaining": 25,
        "resetAt": "2026-07-26T00:00:00+09:00"
      },
      "points": { "balance": 1523000 }
    }
  }
}