xdata-kr App Credential API
The AppCredential API from xdata-kr — 3 operation(s) for appcredential.
The AppCredential API from xdata-kr — 3 operation(s) for appcredential.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/xdata-kr:xdata-kr-appcredential-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: XBOSS App Credential API
description: '통합 REST API 서버 (홈택스 등). Human API guide: https://developer.xdata.kr · OpenAPI Reference: /docs'
version: 2.0.0
security:
- basicClientCredential: []
- mcpOAuth2: []
tags:
- name: AppCredential
paths:
/v1/app-credentials:
post:
tags:
- AppCredential
summary: 외부 앱 client_credential 발급
description: '`POST /v1/app-credentials` 앱 자격증명 발급 단일 진입점.
응답:
- 201 Created: 발급 성공. 3필드(`client_id`, `client_secret`, `created_at`).
- 401 · 402 · 403 · 422 · 429: 정책 거부(인증 · 요금제 · 권한 · 요청 검증 · 호출 한도).
production 범위는 유료 요금제가 필요해 402 POLICY_PAID_REQUIRED.
- 400 VALIDATION_INVALID_FIELD: label 길이 · env_scope 등 요청 값 오류.
- 403 AUTHZ_FORBIDDEN: 발급 권한이 없다.
- 500 INTERNAL_ERROR: 그 밖의 서버 오류.
보안: 평문 `client_secret` 은 이 응답 본문에서 한 번만 나온다 - 받은 쪽이 즉시 안전하게
보관해야 한다. 서버는 응답 직후 폐기하며, 평문은 로그 · 메트릭 · 오류 추적 어디에도 남지 않는다.'
operationId: issue_app_credential_v1_v1_app_credentials_post
parameters:
- name: env_scope
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
enum:
- production
- real_test
- sandbox
title: Env Scope
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
- name: Authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
- name: User-Agent
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: User-Agent
- name: X-Env-Scope
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
enum:
- production
- real_test
- sandbox
title: X-Env-Scope
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AppCredentialIssueRequest'
responses:
'201':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
get:
tags:
- AppCredential
summary: 외부 앱 client_credential 목록 조회
description: '`GET /v1/app-credentials` 자기 조직의 활성 자격증명 목록 조회.
기본으로 ACTIVE 만 보여 준다(폐기된 것은 노출하지 않는다). 최근 발급 순으로 정렬한다.
콘솔 사용자는 자기 조직만, 관리자는 X-Organization-Id 헤더로 위임 조직을 조회한다.
응답:
- 200 OK: 4필드(`items`, `total`, `limit`, `offset`). items 각 행 6칸
(`client_id`, `label`, `allowed_env_scopes`, `status`, `created_at`, `last_used_at`).
- 401 · 402 · 403 · 422 · 429: 정책 거부(인증 · 요금제 · 권한 · 요청 검증 · 호출 한도).
- 400 VALIDATION_INVALID_FIELD: limit · offset 등 요청 값 오류.
- 403 AUTHZ_FORBIDDEN: 조회 권한이 없다.
- 500 INTERNAL_ERROR: 그 밖의 서버 오류.'
operationId: list_app_credentials_v1_v1_app_credentials_get
parameters:
- name: limit
in: query
required: false
schema:
type: integer
maximum: 100
minimum: 1
description: 페이지 크기 (1-100). default 20 — 운영자 콘솔 일반 페이지 크기 + Repository._validate_list_inputs 다층 안전망.
default: 20
title: Limit
description: 페이지 크기 (1-100). default 20 — 운영자 콘솔 일반 페이지 크기 + Repository._validate_list_inputs 다층 안전망.
- name: offset
in: query
required: false
schema:
type: integer
minimum: 0
description: 페이지 오프셋 (>= 0). default 0 — 첫 페이지 진입. OFFSET 음수는 Pydantic ge=0 + Repository._validate_list_inputs 양측 차단.
default: 0
title: Offset
description: 페이지 오프셋 (>= 0). default 0 — 첫 페이지 진입. OFFSET 음수는 Pydantic ge=0 + Repository._validate_list_inputs 양측 차단.
- name: env_scope
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
enum:
- production
- real_test
- sandbox
title: Env Scope
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
- name: Authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
- name: X-Env-Scope
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
enum:
- production
- real_test
- sandbox
title: X-Env-Scope
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/app-credentials/{client_id}/revoke:
post:
tags:
- AppCredential
summary: 외부 앱 client_credential 폐기
description: '`POST /v1/app-credentials/{client_id}/revoke` 앱 자격증명 폐기 단일 진입점.
폐기는 단방향이다(되살리지 않는다). 폐기 즉시 그 client_id 로의 인증이 401 로 막힌다.
응답:
- 200 OK: 폐기 성공. 3필드(`client_id`, `status`=''REVOKED'', `revoked_at`).
- 401 · 402 · 403 · 422 · 429: 정책 거부(인증 · 요금제 · 권한 · 요청 검증 · 호출 한도).
- 400 VALIDATION_INVALID_FIELD: 폐기 사유 누락 · 금지 등 요청 값 오류.
- 403 AUTHZ_FORBIDDEN: 폐기 권한이 없다.
- 404 RESOURCE_NOT_FOUND · 409 RESOURCE_CONFLICT: 대상이 없거나 이미 폐기됨.
- 500 INTERNAL_ERROR: 그 밖의 서버 오류.'
operationId: revoke_app_credential_v1_v1_app_credentials__client_id__revoke_post
parameters:
- name: client_id
in: path
required: true
schema:
type: string
title: Client Id
- name: env_scope
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
enum:
- production
- real_test
- sandbox
title: Env Scope
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
- name: Authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
- name: User-Agent
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: User-Agent
- name: X-Env-Scope
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
enum:
- production
- real_test
- sandbox
title: X-Env-Scope
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AppCredentialRevokeRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/app-credentials/{client_id}/takeover-confirmation:
post:
tags:
- AppCredential
summary: 에이전트가 가입으로 만든 키를 계속 쓰기로 확인
description: '콘솔의 「계속 쓰기」 (퍼널 W4 길③). 본문이 없고 두 번 불러도 같은 200 이다.
확인되면 그 키의 멈춤이 풀려 **같은 비밀값**으로 다시 호출된다 - 키를 새로 받지 않는다.
권한은 폐기와 같다(조직 소유자 · 관리자, 운영자 대리). 응답은 목록 항목과 같은 이름
`signup_takeover_pending` 으로 끝 상태를 준다. 감사 `app_credential.signup_takeover_confirmed`
는 이번 호출이 적었을 때만 남는다.'
operationId: confirm_app_credential_signup_takeover_v1_v1_app_credentials__client_id__takeover_confirmation_post
parameters:
- name: client_id
in: path
required: true
schema:
type: string
title: Client Id
- name: env_scope
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
enum:
- production
- real_test
- sandbox
title: Env Scope
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
- name: Authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
- name: User-Agent
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: User-Agent
- name: X-Env-Scope
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
enum:
- production
- real_test
- sandbox
title: X-Env-Scope
description: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
title: Input
ctx:
type: object
title: Context
type: object
required:
- loc
- msg
- type
title: ValidationError
AppCredentialRevokeRequest:
properties:
revoked_reason:
anyOf:
- type: string
- type: 'null'
title: Revoked Reason
description: 폐기 사유 (선택). console_user None → 'user_request' 자동 채움, admin_user None → REVOKED_REASON_MISSING 거부 (admin 명시 필수). principal_kind 별 허용 enum 위반 시 REVOKED_REASON_FORBIDDEN 거부.
type: object
title: AppCredentialRevokeRequest
description: "`POST /v1/app-credentials/{client_id}/revoke` 요청 본문.\n\n필드:\n revoked_reason: 폐기 사유(선택). None 일 때:\n - 콘솔 사용자: 'user_request' 로 자동 채운다.\n - 관리자: 명시 필수(없으면 REVOKED_REASON_MISSING).\n 역할별 허용 사유:\n - 콘솔 사용자: 'user_request' 하나만(그 밖은 거부).\n - 관리자: 'admin_action' · 'security_incident'(그 밖은 거부).\n 'superseded' 는 시스템 재발급 경로 전용이라 이 표면으로 들어오지 않는다.\n\n헤더(발급과 같은 잠금):\n Authorization: Bearer 콘솔 JWT 또는 관리자 JWT(필수).\n X-Env-Scope: sandbox · real_test · production.\n X-Trace-Id · X-Request-Id: 운영 상관관계(선택, 누락 시 자동 발급).\n X-Organization-Id: 관리자 위임 organization_id 힌트(선택)."
AppCredentialIssueRequest:
properties:
label:
type: string
maxLength: 100
minLength: 1
title: Label
description: 자격증명 라벨 (1~100자)
allowed_env_scopes:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Allowed Env Scopes
description: 발급 허용 env_scope. None 이면 기본값 'sandbox'. 'real_test' 는 승인된 데모 환경 신청이 필요하다. 'production' 을 포함하면 402 POLICY_PAID_REQUIRED.
integration_profile:
anyOf:
- type: string
- type: 'null'
title: Integration Profile
description: 생략하면 표준(ERP). desktop_agent 는 연동 SaaS 키용으로 관리자만 발급한다(콘솔 사용자는 거부).
type: object
required:
- label
title: AppCredentialIssueRequest
description: "`POST /v1/app-credentials` 요청 본문.\n\n필드:\n label: 자격증명 라벨 (1~100자, 사람이 읽는 이름, 예: 'ERP-Prod-1').\n allowed_env_scopes: 발급 허용 env_scope 목록. 누락/None 이면 기본값 `sandbox`.\n `real_test` 는 승인된 데모 환경 신청이 있어야 한다. `production` 을 포함하면\n 유료 요금제가 필요해 402 POLICY_PAID_REQUIRED 로 거부한다.\n integration_profile: 생략하면 표준(ERP). `desktop_agent` 는 연동 SaaS 키용으로\n 관리자만 발급할 수 있다(콘솔 사용자는 거부).\n\n헤더:\n Authorization: Bearer 콘솔 JWT 또는 관리자 JWT(필수).\n X-Env-Scope: sandbox · real_test · production. production 진입은 유료 요금제가 필요하다.\n X-Trace-Id · X-Request-Id: 운영 상관관계(선택, 누락 시 자동 발급).\n X-Organization-Id: 관리자 위임 organization_id 힌트(선택)."
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
securitySchemes:
basicClientCredential:
type: http
scheme: basic
description: 'Console-issued client credential. Send `Authorization: Basic base64(client_id:client_secret)`.'
mcpOAuth2:
type: oauth2
description: For MCP clients. OAuth 2.0 authorization code flow with PKCE (S256) for public clients. The client_id is the HTTPS URL of an OAuth Client ID Metadata Document that XBOSS has allow-listed; dynamic client registration is not supported.
flows:
authorizationCode:
authorizationUrl: https://api.xdata.kr/oauth/authorize
tokenUrl: https://api.xdata.kr/oauth/token
scopes: {}