> For the complete documentation index, see [llms.txt](https://developers-apps-in-toss.toss.im/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers-apps-in-toss.toss.im/documentation/api/toss-pay.md).

# 토스 페이

## 결제 생성하기

> 결제를 생성해요.\
> \
> \### 비즈니스 오류 코드\
> \
> 아래 오류는 HTTP 200과 \`resultType: FAIL\`로 응답해요.\
> \
> \| errorCode | 설명 |\
> \| --- | --- |\
> \| \`5001\` | 토스페이 청약이 되어 있지 않아요. |\
> \| \`4010\` | 인증 정보를 찾을 수 없어요. |\
> \| \`4095\` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\
> \
> \*\*요청 한도\*\*: 앱당 분당 3,000회

```json
{"openapi":"3.1.0","info":{"title":"Apps in Toss 파트너 API","version":"1.0.0"},"tags":[{"description":"토스페이와 관련된 요청을 처리하는 API예요.","name":"toss-pay"}],"servers":[{"description":"운영 (간편 로그인·메시지 발송·토스 포인트 지급 등)","url":"https://apps-in-toss-api.toss.im"}],"security":[{"mutualTLS":[]}],"components":{"securitySchemes":{"mutualTLS":{"description":"파트너에게 발급된 클라이언트 인증서 기반 mTLS 인증이에요. 인증서의 CN으로 미니앱을 식별해요. 인증서 발급·관리 방법은 [서버 API 이용하기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/integration/server-api) 문서를 참고하세요.","type":"mutualTLS"}},"schemas":{"MakePaymentRequest":{"description":"토스페이 결제 생성을 위한 요청 본문이에요.","properties":{"amount":{"description":"총 결제 금액이에요.","format":"int64","maxLength":7,"type":"integer"},"amountServiceFee":{"description":"결제 금액 중 봉사료예요.","format":"int64","maxLength":7,"type":"integer"},"amountTaxFree":{"description":"결제 금액 중 비과세 금액이에요. 과세 상품이면 0으로 보내주세요.","format":"int64","maxLength":7,"type":"integer"},"amountTaxable":{"description":"결제 금액 중 과세 금액이에요. 별도의 과세액을 설정하지 않고 비과세 금액을 0원으로 보내면 토스페이 서버에서 자동으로 과세와 부가세를 계산해요.","format":"int64","maxLength":7,"type":"integer"},"amountVat":{"description":"결제 금액 중 부가세예요. 값이 없으면 환불할 과세 금액을 11로 나눈 후 소수점 첫째 자리에서 올림으로 계산해요.","format":"int64","maxLength":7,"type":"integer"},"cashReceipt":{"description":"현금영수증 발급 가능 여부예요. null일 경우 발급되지 않아요.","type":"boolean"},"cashReceiptTradeOption":{"description":"현금영수증 발급 타입이에요. CULTURE(문화비)/GENERAL(일반, 기본값)/PUBLIC_TP(교통비) 중 하나예요.","maxLength":10,"type":"string"},"enablePayMethods":{"description":"사용 가능한 결제 수단이에요. TOSS_MONEY/CARD 또는 null 값을 사용할 수 있어요.","maxLength":100,"type":"string"},"installment":{"description":"할부 제한 타입이에요. USE(할부 사용, 기본값)/NOT_USE(할부 미사용) 중 하나예요.","maxLength":10,"type":"string"},"isTestPayment":{"description":"샌드박스일 경우 false, 라이브앱일 경우 true예요. true면 실결제가 이루어져요.","type":"boolean"},"orderNo":{"description":"가맹점의 상품 주문번호예요. 숫자, 영문자, 특수문자(_-:.^@)를 사용할 수 있어요.","maxLength":50,"type":"string"},"productDesc":{"description":"상품 설명이에요. 한글이 포함되면 인코딩에 유의해주세요.","maxLength":255,"type":"string"}},"required":["amount","amountTaxFree","isTestPayment","orderNo","productDesc"],"type":"object"},"TossApiSuccessMakePaymentResponse":{"description":"성공 응답 봉투예요.","properties":{"resultType":{"description":"처리 결과예요. 성공이면 `SUCCESS`예요.","enum":["SUCCESS"],"type":"string"},"success":{"$ref":"#/components/schemas/MakePaymentResponse"}},"required":["resultType","success"],"type":"object"},"MakePaymentResponse":{"description":"토스페이 결제 생성 요청 응답이에요.","properties":{"payToken":{"description":"토스페이 토큰이에요. 매회 유니크한 토큰값으로, 가맹점에서 이 값을 반드시 저장하고 관리해야 해요.","maxLength":30,"type":"string"}},"required":["payToken"]},"TossApiFail":{"description":"실패 응답 봉투예요. 비즈니스 오류는 HTTP 200으로 응답하니 `resultType`을 반드시 확인하세요.","properties":{"error":{"$ref":"#/components/schemas/TossApiError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiValidationFail":{"description":"요청 필드 검증에 실패했을 때의 응답이에요.","properties":{"error":{"$ref":"#/components/schemas/TossApiValidationFailError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiValidationFailError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","properties":{"errorDetails":{"description":"필드별 검증 실패 상세 목록이에요.","items":{"$ref":"#/components/schemas/TossApiFieldError"},"type":"array"}},"type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiFieldError":{"description":"필드별 검증 실패 상세 목록이에요.","properties":{"field":{"description":"검증에 실패한 필드 이름이에요.","type":"string"},"message":{"description":"검증 실패 사유예요.","type":"string"},"rejectedValue":{"description":"거부된 입력 값이에요."}},"type":"object"}}},"paths":{"/api-partner/v1/apps-in-toss/pay/make-payment":{"post":{"description":"결제를 생성해요.\n\n### 비즈니스 오류 코드\n\n아래 오류는 HTTP 200과 `resultType: FAIL`로 응답해요.\n\n| errorCode | 설명 |\n| --- | --- |\n| `5001` | 토스페이 청약이 되어 있지 않아요. |\n| `4010` | 인증 정보를 찾을 수 없어요. |\n| `4095` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\n\n**요청 한도**: 앱당 분당 3,000회","operationId":"makePayment","parameters":[{"description":"사용자를 인증하기 위한 키예요. [사용자 정보 받기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/api/toss-login#get-api-partner-v1-apps-in-toss-user-oauth2-login-me) API를 통해 획득할 수 있어요","in":"header","name":"x-toss-user-key","required":false,"schema":{"type":"string"}},{"description":"사용자를 인증하기 위한 키예요. 미니앱 SDK의 [User.getAnonymousKey](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/sdk/domains-api/user/user.getanonymouskey) 함수로 발급받을 수 있어요","in":"header","name":"x-anon-key","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MakePaymentRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"discriminator":{"mapping":{"FAIL":"#/components/schemas/TossApiFail","SUCCESS":"#/components/schemas/TossApiSuccessMakePaymentResponse"},"propertyName":"resultType"},"oneOf":[{"$ref":"#/components/schemas/TossApiSuccessMakePaymentResponse"},{"$ref":"#/components/schemas/TossApiFail"}]}}},"description":"결제 생성 요청이 성공적으로 처리됐어요."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiValidationFail"}}},"description":"요청 본문이 형식에 맞지 않아요. `error.data.errorDetails`에서 필드별 상세를 확인하세요."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiFail"}}},"description":"분류되지 않은 서버 오류예요. 계속 실패하면 파트너 지원 채널로 문의해 주세요."}},"summary":"결제 생성하기","tags":["toss-pay"]}}}}
```

## 결제 실행하기

> 결제 인증이 끝난 결제 건의 승인을 요청해요.\
> \
> \### 비즈니스 오류 코드\
> \
> 아래 오류는 HTTP 200과 \`resultType: FAIL\`로 응답해요.\
> \
> \| errorCode | 설명 |\
> \| --- | --- |\
> \| \`5001\` | 토스페이 청약이 되어 있지 않아요. |\
> \| \`4010\` | 인증 정보를 찾을 수 없어요. |\
> \| \`4095\` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\
> \
> \*\*요청 한도\*\*: 앱당 분당 3,000회

```json
{"openapi":"3.1.0","info":{"title":"Apps in Toss 파트너 API","version":"1.0.0"},"tags":[{"description":"토스페이와 관련된 요청을 처리하는 API예요.","name":"toss-pay"}],"servers":[{"description":"운영 (간편 로그인·메시지 발송·토스 포인트 지급 등)","url":"https://apps-in-toss-api.toss.im"}],"security":[{"mutualTLS":[]}],"components":{"securitySchemes":{"mutualTLS":{"description":"파트너에게 발급된 클라이언트 인증서 기반 mTLS 인증이에요. 인증서의 CN으로 미니앱을 식별해요. 인증서 발급·관리 방법은 [서버 API 이용하기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/integration/server-api) 문서를 참고하세요.","type":"mutualTLS"}},"schemas":{"ExecutePaymentRequest":{"description":"사용자 인증이 된 결제 건에 대한 승인 요청 본문이에요.","properties":{"isTestPayment":{"description":"샌드박스일 경우 false, 라이브앱일 경우 true예요. true면 실결제가 이루어져요.","type":"boolean"},"orderNo":{"description":"가맹점의 상품 주문번호예요. 숫자, 영문자, 특수문자(_-:.^@)를 사용할 수 있어요.","maxLength":50,"type":"string"},"payToken":{"description":"토스페이 토큰이에요. 승인할 결제 건의 토큰값이에요.","maxLength":30,"type":"string"}},"required":["isTestPayment","payToken"],"type":"object"},"TossApiSuccessExecutePaymentResponse":{"description":"성공 응답 봉투예요.","properties":{"resultType":{"description":"처리 결과예요. 성공이면 `SUCCESS`예요.","enum":["SUCCESS"],"type":"string"},"success":{"$ref":"#/components/schemas/ExecutePaymentResponse"}},"required":["resultType","success"],"type":"object"},"ExecutePaymentResponse":{"description":"결제 승인 요청 응답이에요.","properties":{"accountBankCode":{"description":"은행 코드예요. 토스머니(계좌) 결제인 경우에만 내려와요.","type":"string"},"accountBankName":{"description":"은행 이름이에요. 토스머니(계좌) 결제인 경우에만 내려와요.","type":"string"},"accountNumber":{"description":"계좌번호예요. 일부 마스킹되어 있고, 토스머니(계좌) 결제인 경우에만 내려와요.","type":"string"},"amount":{"description":"총 결제 금액이에요.","format":"int32","type":"integer"},"approvalTime":{"description":"결제가 승인된 시간이에요. (yyyy-MM-dd HH:mm:ss 형식)","type":"string"},"cardAuthorizationNo":{"description":"카드 승인 번호예요. 카드 결제인 경우에만 내려와요.","type":"string"},"cardBinNumber":{"description":"카드 BIN 번호예요. 카드사에서 제공한 값이며 마스킹되어 있을 수 있고, 카드 결제인 경우에만 내려와요.","type":"string"},"cardCompanyCode":{"description":"카드사 코드예요. 카드 결제인 경우에만 내려와요.","format":"int32","type":"integer"},"cardCompanyName":{"description":"카드사 이름이에요. 카드 결제인 경우에만 내려와요.","type":"string"},"cardMethodType":{"description":"카드타입이에요. CREDIT(신용카드)/CHECK(체크카드)/PREPAYMENT(선불카드) 중 하나이고, 카드 결제인 경우에만 내려와요.","type":"string"},"cardNum4Print":{"description":"사용자가 선택한 카드의 끝 4자리예요. 카드 결제인 경우에만 내려와요.","type":"string"},"cardNumber":{"description":"마스킹된 카드번호예요. 카드 결제인 경우에만 내려와요.","type":"string"},"cardUserType":{"description":"카드 사용자 구분이에요. PERSONAL(본인 카드)/PERSONAL_FAMILY(가족 카드)/CORP_PERSONAL(법인지정 결제계좌 임직원)/CORP_PRIVATE(법인 공용)/CORP_COMPANY(법인지정 결제계좌 회사(하나카드만)) 중 하나이고, 카드 결제인 경우에만 내려와요.","type":"string"},"cashReceiptMgtKey":{"description":"현금영수증 관리번호 식별값이에요. 토스머니(계좌) 결제인 경우에만 내려와요.","type":"string"},"code":{"description":"결제 승인 처리 결과 코드예요. 성공이면 0, 실패면 -1이에요.","format":"int32","type":"integer"},"discountedAmount":{"description":"할인이 적용된 결제 금액이에요.","format":"int32","type":"integer"},"errorCode":{"description":"결제 실패 시 내려오는 에러 코드예요. code가 -1일 때 내려와요.","type":"string"},"mode":{"description":"결제가 처리된 환경을 나타내요. NORMAL 또는 TEST 값 중 하나예요.","type":"string"},"msg":{"description":"결제 실패 시 실패 사유를 담은 메시지예요. code가 -1일 때 내려와요.","type":"string"},"noInterest":{"description":"무이자 할부 여부예요. 카드 결제인 경우에만 내려와요.","type":"boolean"},"orderNo":{"description":"요청한 가맹점의 상품 주문번호예요.","type":"string"},"paidAmount":{"description":"지불수단으로 실제 승인된 금액이에요.","format":"int32","type":"integer"},"payMethod":{"description":"결제 수단이에요. CARD 또는 TOSS_MONEY 값을 가져요.","type":"string"},"payToken":{"description":"이 결제 건을 식별하는 토큰이에요.","type":"string"},"salesCheckLinkUrl":{"description":"매출전표 확인 URL이에요. 카드 결제인 경우에만 내려와요.","type":"string"},"spreadOut":{"description":"할부 개월 수예요. 0이면 일시불이고, 카드 결제인 경우에만 내려와요.","format":"int32","type":"integer"},"stateMsg":{"description":"결제 처리 상태를 설명하는 메시지예요.","type":"string"},"transactionId":{"description":"거래를 식별하는 트랜잭션 아이디예요.","type":"string"}},"required":["amount","approvalTime","code","discountedAmount","mode","orderNo","paidAmount","payMethod","payToken","stateMsg","transactionId"]},"TossApiFail":{"description":"실패 응답 봉투예요. 비즈니스 오류는 HTTP 200으로 응답하니 `resultType`을 반드시 확인하세요.","properties":{"error":{"$ref":"#/components/schemas/TossApiError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiValidationFail":{"description":"요청 필드 검증에 실패했을 때의 응답이에요.","properties":{"error":{"$ref":"#/components/schemas/TossApiValidationFailError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiValidationFailError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","properties":{"errorDetails":{"description":"필드별 검증 실패 상세 목록이에요.","items":{"$ref":"#/components/schemas/TossApiFieldError"},"type":"array"}},"type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiFieldError":{"description":"필드별 검증 실패 상세 목록이에요.","properties":{"field":{"description":"검증에 실패한 필드 이름이에요.","type":"string"},"message":{"description":"검증 실패 사유예요.","type":"string"},"rejectedValue":{"description":"거부된 입력 값이에요."}},"type":"object"}}},"paths":{"/api-partner/v1/apps-in-toss/pay/execute-payment":{"post":{"description":"결제 인증이 끝난 결제 건의 승인을 요청해요.\n\n### 비즈니스 오류 코드\n\n아래 오류는 HTTP 200과 `resultType: FAIL`로 응답해요.\n\n| errorCode | 설명 |\n| --- | --- |\n| `5001` | 토스페이 청약이 되어 있지 않아요. |\n| `4010` | 인증 정보를 찾을 수 없어요. |\n| `4095` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\n\n**요청 한도**: 앱당 분당 3,000회","operationId":"executePayment","parameters":[{"description":"사용자를 인증하기 위한 키예요. [사용자 정보 받기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/api/toss-login#get-api-partner-v1-apps-in-toss-user-oauth2-login-me) API를 통해 획득할 수 있어요","in":"header","name":"x-toss-user-key","required":false,"schema":{"type":"string"}},{"description":"사용자를 인증하기 위한 키예요. 미니앱 SDK의 [User.getAnonymousKey](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/sdk/domains-api/user/user.getanonymouskey) 함수로 발급받을 수 있어요","in":"header","name":"x-anon-key","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutePaymentRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"discriminator":{"mapping":{"FAIL":"#/components/schemas/TossApiFail","SUCCESS":"#/components/schemas/TossApiSuccessExecutePaymentResponse"},"propertyName":"resultType"},"oneOf":[{"$ref":"#/components/schemas/TossApiSuccessExecutePaymentResponse"},{"$ref":"#/components/schemas/TossApiFail"}]}}},"description":"결제 승인 요청이 성공적으로 처리됐어요."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiValidationFail"}}},"description":"요청 본문이 형식에 맞지 않아요. `error.data.errorDetails`에서 필드별 상세를 확인하세요."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiFail"}}},"description":"분류되지 않은 서버 오류예요. 계속 실패하면 파트너 지원 채널로 문의해 주세요."}},"summary":"결제 실행하기","tags":["toss-pay"]}}}}
```

## 결제 상태 조회하기

> 사용자가 요청한 결제 상태를 조회할 수 있어요.\
> \
> \### 비즈니스 오류 코드\
> \
> 아래 오류는 HTTP 200과 \`resultType: FAIL\`로 응답해요.\
> \
> \| errorCode | 설명 |\
> \| --- | --- |\
> \| \`5001\` | 토스페이 청약이 되어 있지 않아요. |\
> \| \`4010\` | 인증 정보를 찾을 수 없어요. |\
> \| \`4095\` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\
> \
> \*\*요청 한도\*\*: 앱당 분당 3,000회

```json
{"openapi":"3.1.0","info":{"title":"Apps in Toss 파트너 API","version":"1.0.0"},"tags":[{"description":"토스페이와 관련된 요청을 처리하는 API예요.","name":"toss-pay"}],"servers":[{"description":"운영 (간편 로그인·메시지 발송·토스 포인트 지급 등)","url":"https://apps-in-toss-api.toss.im"}],"security":[{"mutualTLS":[]}],"components":{"securitySchemes":{"mutualTLS":{"description":"파트너에게 발급된 클라이언트 인증서 기반 mTLS 인증이에요. 인증서의 CN으로 미니앱을 식별해요. 인증서 발급·관리 방법은 [서버 API 이용하기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/integration/server-api) 문서를 참고하세요.","type":"mutualTLS"}},"schemas":{"PaymentStatusRequest":{"description":"결제 상태 조회 요청 파라미터예요.","properties":{"isTestPayment":{"description":"테스트 결제인지 나타내요.","type":"boolean"},"orderNo":{"description":"주문 번호예요. 요청할 때 이 값과 `payToken` 둘 중 하나는 필수예요.","type":"string"},"payToken":{"description":"결제를 식별하는 키예요. 요청할 때 이 값과 `orderNo` 둘 중 하나는 필수예요.","type":"string"}},"required":["isTestPayment"],"type":"object"},"TossApiSuccessPaymentStatusResponse":{"description":"성공 응답 봉투예요.","properties":{"resultType":{"description":"처리 결과예요. 성공이면 `SUCCESS`예요.","enum":["SUCCESS"],"type":"string"},"success":{"$ref":"#/components/schemas/PaymentStatusResponse"}},"required":["resultType","success"],"type":"object"},"PaymentStatusResponse":{"description":"결제 상태 조회 응답 정보예요.","properties":{"accountBankCode":{"description":"계좌 결제인 경우 은행 코드예요.","type":"string"},"accountBankName":{"description":"계좌 결제인 경우 은행 이름이에요.","type":"string"},"accountNumber":{"description":"계좌 번호예요.","type":"string"},"amount":{"description":"총 결제 금액이에요.","format":"int32","type":"integer"},"amountServiceFee":{"description":"서비스 수수료 금액이에요.","format":"int32","type":"integer"},"amountTaxFree":{"description":"비과세 금액이에요.","format":"int32","type":"integer"},"amountTaxable":{"description":"과세 대상 금액이에요.","format":"int32","type":"integer"},"amountVat":{"description":"부가세 금액이에요.","format":"int32","type":"integer"},"card":{"$ref":"#/components/schemas/CardInfo","description":"카드 결제 정보예요."},"createdTs":{"description":"결제가 생성된 시간이에요 (ISO 8601 형식).","type":"string"},"discountAmountV2":{"description":"최신 할인 시스템에서 적용된 할인 금액이에요.","format":"int32","type":"integer"},"discountedAmount":{"description":"할인 적용 후 금액이에요.","format":"int32","type":"integer"},"disposableCupDeposit":{"description":"일회용 컵 보증금 금액이에요.","format":"int32","type":"integer"},"mode":{"description":"결제 처리 환경을 나타내요. NORMAL 또는 TEST 값 중 하나예요.","type":"string"},"orderNo":{"description":"주문 번호예요.","type":"string"},"paidAmount":{"description":"실제 사용자가 결제한 금액이에요.","format":"int32","type":"integer"},"paidPointV2":{"description":"적립금/포인트로 결제한 금액이에요.","format":"int32","type":"integer"},"paidTs":{"description":"결제가 완료된 시간이에요 (ISO 8601 형식).","type":"string"},"payMethod":{"description":"결제 수단이에요. 예: CARD, ACCOUNT_TRANSFER","type":"string"},"payStatus":{"description":"결제 상태예요. 예: DONE, CANCELLED, FAILED 등","type":"string"},"payToken":{"description":"결제를 식별하는 키예요.","type":"string"},"refundableAmount":{"description":"현재 환불 가능한 금액이에요.","format":"int32","type":"integer"},"transactions":{"description":"결제 처리 단계별 트랜잭션 리스트예요.","items":{"$ref":"#/components/schemas/TransactionInfo"},"type":"array"}},"required":["amount","amountServiceFee","amountTaxFree","amountTaxable","amountVat","createdTs","discountAmountV2","discountedAmount","disposableCupDeposit","mode","orderNo","paidAmount","paidPointV2","paidTs","payMethod","payStatus","payToken","refundableAmount","transactions"]},"CardInfo":{"description":"카드 결제 상세 정보예요.","properties":{"cardAuthorizationNo":{"description":"카드 승인 번호예요.","type":"string"},"cardBinNumber":{"description":"카드 BIN 번호예요.","type":"string"},"cardCompanyCode":{"description":"카드사 코드예요.","format":"int32","type":"integer"},"cardCompanyName":{"description":"카드사 이름이에요.","type":"string"},"cardMethodType":{"description":"카드 결제 방식이에요.","type":"string"},"cardNum4Print":{"description":"사용자가 선택한 카드의 끝 4자리예요.","type":"string"},"cardNumber":{"description":"마스킹된 카드번호예요.","type":"string"},"cardUserType":{"description":"개인/법인 여부예요.","type":"string"},"noInterest":{"description":"무이자 할부 여부예요.","type":"boolean"},"salesCheckLinkUrl":{"description":"매출전표 URL이에요.","type":"string"},"spreadOut":{"description":"할부 개월 수예요.","format":"int32","type":"integer"}},"required":["cardAuthorizationNo","cardBinNumber","cardCompanyCode","cardCompanyName","cardMethodType","cardNum4Print","cardNumber","cardUserType","noInterest","salesCheckLinkUrl","spreadOut"]},"TransactionInfo":{"description":"결제 처리 단계별 트랜잭션 정보예요.","properties":{"discountedAmount":{"description":"해당 단계에서 적용된 할인 금액이에요.","format":"int32","type":"integer"},"paidAmount":{"description":"해당 단계에서 실제 결제된 금액이에요.","format":"int32","type":"integer"},"pointAmount":{"description":"해당 단계에서 사용된 포인트 금액이에요.","format":"int32","type":"integer"},"regTs":{"description":"트랜잭션 등록 시간이에요 (ISO 8601 형식).","type":"string"},"stepType":{"description":"결제 처리 단계예요. 예: INIT, PAID","type":"string"},"transactionAmount":{"description":"해당 단계의 총 결제 금액이에요.","format":"int32","type":"integer"},"transactionId":{"description":"트랜잭션 식별자예요.","type":"string"}},"required":["discountedAmount","paidAmount","pointAmount","regTs","stepType","transactionAmount","transactionId"]},"TossApiFail":{"description":"실패 응답 봉투예요. 비즈니스 오류는 HTTP 200으로 응답하니 `resultType`을 반드시 확인하세요.","properties":{"error":{"$ref":"#/components/schemas/TossApiError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiValidationFail":{"description":"요청 필드 검증에 실패했을 때의 응답이에요.","properties":{"error":{"$ref":"#/components/schemas/TossApiValidationFailError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiValidationFailError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","properties":{"errorDetails":{"description":"필드별 검증 실패 상세 목록이에요.","items":{"$ref":"#/components/schemas/TossApiFieldError"},"type":"array"}},"type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiFieldError":{"description":"필드별 검증 실패 상세 목록이에요.","properties":{"field":{"description":"검증에 실패한 필드 이름이에요.","type":"string"},"message":{"description":"검증 실패 사유예요.","type":"string"},"rejectedValue":{"description":"거부된 입력 값이에요."}},"type":"object"}}},"paths":{"/api-partner/v1/apps-in-toss/pay/get-payment-status":{"post":{"description":"사용자가 요청한 결제 상태를 조회할 수 있어요.\n\n### 비즈니스 오류 코드\n\n아래 오류는 HTTP 200과 `resultType: FAIL`로 응답해요.\n\n| errorCode | 설명 |\n| --- | --- |\n| `5001` | 토스페이 청약이 되어 있지 않아요. |\n| `4010` | 인증 정보를 찾을 수 없어요. |\n| `4095` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\n\n**요청 한도**: 앱당 분당 3,000회","operationId":"getPaymentStatus","parameters":[{"description":"사용자를 인증하기 위한 키예요. [사용자 정보 받기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/api/toss-login#get-api-partner-v1-apps-in-toss-user-oauth2-login-me) API를 통해 획득할 수 있어요","in":"header","name":"x-toss-user-key","required":false,"schema":{"type":"string"}},{"description":"사용자를 인증하기 위한 키예요. 미니앱 SDK의 [User.getAnonymousKey](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/sdk/domains-api/user/user.getanonymouskey) 함수로 발급받을 수 있어요","in":"header","name":"x-anon-key","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentStatusRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"discriminator":{"mapping":{"FAIL":"#/components/schemas/TossApiFail","SUCCESS":"#/components/schemas/TossApiSuccessPaymentStatusResponse"},"propertyName":"resultType"},"oneOf":[{"$ref":"#/components/schemas/TossApiSuccessPaymentStatusResponse"},{"$ref":"#/components/schemas/TossApiFail"}]}}},"description":"결제 상태 정보가 반환돼요."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiValidationFail"}}},"description":"요청 본문이 형식에 맞지 않아요. `error.data.errorDetails`에서 필드별 상세를 확인하세요."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiFail"}}},"description":"분류되지 않은 서버 오류예요. 계속 실패하면 파트너 지원 채널로 문의해 주세요."}},"summary":"결제 상태 조회하기","tags":["toss-pay"]}}}}
```

## 결제 환불하기

> 결제 건에 대해 환불을 요청할 수 있어요. 환불 가능 여부와 잔액 조건 등을 사전에 확인해주세요.\
> \
> \### 비즈니스 오류 코드\
> \
> 아래 오류는 HTTP 200과 \`resultType: FAIL\`로 응답해요.\
> \
> \| errorCode | 설명 |\
> \| --- | --- |\
> \| \`5001\` | 토스페이 청약이 되어 있지 않아요. |\
> \| \`4010\` | 인증 정보를 찾을 수 없어요. |\
> \| \`4095\` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\
> \
> \*\*요청 한도\*\*: 앱당 분당 3,000회

```json
{"openapi":"3.1.0","info":{"title":"Apps in Toss 파트너 API","version":"1.0.0"},"tags":[{"description":"토스페이와 관련된 요청을 처리하는 API예요.","name":"toss-pay"}],"servers":[{"description":"운영 (간편 로그인·메시지 발송·토스 포인트 지급 등)","url":"https://apps-in-toss-api.toss.im"}],"security":[{"mutualTLS":[]}],"components":{"securitySchemes":{"mutualTLS":{"description":"파트너에게 발급된 클라이언트 인증서 기반 mTLS 인증이에요. 인증서의 CN으로 미니앱을 식별해요. 인증서 발급·관리 방법은 [서버 API 이용하기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/integration/server-api) 문서를 참고하세요.","type":"mutualTLS"}},"schemas":{"RefundPaymentRequest":{"description":"토스페이 환불을 위한 요청 본문이에요.","properties":{"isTestPayment":{"description":"샌드박스일 경우 false, 라이브앱일 경우 true예요. true면 실결제가 이루어져요.","type":"boolean"},"payToken":{"description":"토스페이 토큰이에요. 승인할 결제 건의 토큰값이에요.","maxLength":30,"type":"string"},"reason":{"description":"환불 사유예요.","maxLength":55,"type":"string"}},"required":["isTestPayment","payToken"],"type":"object"},"TossApiSuccessRefundPaymentResponse":{"description":"성공 응답 봉투예요.","properties":{"resultType":{"description":"처리 결과예요. 성공이면 `SUCCESS`예요.","enum":["SUCCESS"],"type":"string"},"success":{"$ref":"#/components/schemas/RefundPaymentResponse"}},"required":["resultType","success"],"type":"object"},"RefundPaymentResponse":{"description":"결제 환불 요청 응답이에요.","properties":{"accountBankCode":{"description":"은행 코드예요.","maxLength":3,"type":"string"},"accountBankName":{"description":"은행 이름이에요.","maxLength":20,"type":"string"},"accountNumber":{"description":"계좌번호예요. 일부 마스킹을 포함하고 있어요.","maxLength":30,"type":"string"},"approvalTime":{"description":"결제 건의 환불이 처리된 시간이에요. (yyyy-MM-dd HH:mm:ss 형식)","type":"string"},"cardBinNumber":{"description":"카드 BIN 번호예요. 카드사에서 준 값으로, 마스킹되어 있을 수 있어요.","maxLength":8,"type":"string"},"cardMethodType":{"description":"카드타입이에요. CREDIT(신용카드)/CHECK(체크카드)/PREPAYMENT(선불카드) 중 하나예요.","maxLength":10,"type":"string"},"cardNum4Print":{"description":"사용자가 선택한 카드의 끝 4자리예요.","maxLength":4,"type":"string"},"cardNumber":{"description":"마스킹된 카드번호예요.","maxLength":20,"type":"string"},"cardUserType":{"description":"카드 사용자 구분이에요. PERSONAL(본인 카드)/PERSONAL_FAMILY(가족 카드)/CORP_PERSONAL(법인지정 결제계좌 임직원)/CORP_PRIVATE(법인 공용)/CORP_COMPANY(법인지정 결제계좌 회사(하나카드만)) 중 하나예요.","maxLength":20,"type":"string"},"cashReceiptMgtKey":{"description":"현금영수증 관리번호 식별값이에요.","maxLength":36,"type":"string"},"discountedAmount":{"description":"할인된 금액이에요.","format":"int32","maxLength":7,"type":"integer"},"paidAmount":{"description":"지불수단 승인금액이에요.","format":"int32","maxLength":7,"type":"integer"},"payToken":{"description":"환불된 결제 토큰이에요.","maxLength":30,"type":"string"},"refundNo":{"description":"환불 번호예요.","type":"string"},"refundableAmount":{"description":"환불 가능 금액이에요.","format":"int32","maxLength":7,"type":"integer"},"refundedAmount":{"description":"환불 요청 금액이에요.","format":"int32","maxLength":7,"type":"integer"},"refundedDiscountAmount":{"description":"환불 요청 금액 중 실제 차감된 할인 금액이에요.","format":"int32","maxLength":7,"type":"integer"},"refundedPaidAmount":{"description":"환불 요청 금액 중 실제 차감된 지불수단 금액이에요.","format":"int32","maxLength":7,"type":"integer"},"transactionId":{"description":"거래 트랜잭션 아이디예요.","maxLength":36,"type":"string"}},"required":["approvalTime","discountedAmount","paidAmount","payToken","refundNo","refundableAmount","refundedAmount","refundedDiscountAmount","refundedPaidAmount","transactionId"]},"TossApiFail":{"description":"실패 응답 봉투예요. 비즈니스 오류는 HTTP 200으로 응답하니 `resultType`을 반드시 확인하세요.","properties":{"error":{"$ref":"#/components/schemas/TossApiError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiValidationFail":{"description":"요청 필드 검증에 실패했을 때의 응답이에요.","properties":{"error":{"$ref":"#/components/schemas/TossApiValidationFailError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiValidationFailError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","properties":{"errorDetails":{"description":"필드별 검증 실패 상세 목록이에요.","items":{"$ref":"#/components/schemas/TossApiFieldError"},"type":"array"}},"type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiFieldError":{"description":"필드별 검증 실패 상세 목록이에요.","properties":{"field":{"description":"검증에 실패한 필드 이름이에요.","type":"string"},"message":{"description":"검증 실패 사유예요.","type":"string"},"rejectedValue":{"description":"거부된 입력 값이에요."}},"type":"object"}}},"paths":{"/api-partner/v1/apps-in-toss/pay/refund-payment":{"post":{"description":"결제 건에 대해 환불을 요청할 수 있어요. 환불 가능 여부와 잔액 조건 등을 사전에 확인해주세요.\n\n### 비즈니스 오류 코드\n\n아래 오류는 HTTP 200과 `resultType: FAIL`로 응답해요.\n\n| errorCode | 설명 |\n| --- | --- |\n| `5001` | 토스페이 청약이 되어 있지 않아요. |\n| `4010` | 인증 정보를 찾을 수 없어요. |\n| `4095` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\n\n**요청 한도**: 앱당 분당 3,000회","operationId":"refundPayment","parameters":[{"description":"사용자를 인증하기 위한 키예요. [사용자 정보 받기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/api/toss-login#get-api-partner-v1-apps-in-toss-user-oauth2-login-me) API를 통해 획득할 수 있어요","in":"header","name":"x-toss-user-key","required":false,"schema":{"type":"string"}},{"description":"사용자를 인증하기 위한 키예요. 미니앱 SDK의 [User.getAnonymousKey](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/sdk/domains-api/user/user.getanonymouskey) 함수로 발급받을 수 있어요","in":"header","name":"x-anon-key","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundPaymentRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"discriminator":{"mapping":{"FAIL":"#/components/schemas/TossApiFail","SUCCESS":"#/components/schemas/TossApiSuccessRefundPaymentResponse"},"propertyName":"resultType"},"oneOf":[{"$ref":"#/components/schemas/TossApiSuccessRefundPaymentResponse"},{"$ref":"#/components/schemas/TossApiFail"}]}}},"description":"환불 요청이 성공적으로 처리됐어요."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiValidationFail"}}},"description":"요청 본문이 형식에 맞지 않아요. `error.data.errorDetails`에서 필드별 상세를 확인하세요."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiFail"}}},"description":"분류되지 않은 서버 오류예요. 계속 실패하면 파트너 지원 채널로 문의해 주세요."}},"summary":"결제 환불하기","tags":["toss-pay"]}}}}
```

## 빌링키 생성하기

> 자동결제를 위한 빌링키를 생성해요.\
> \
> \### 비즈니스 오류 코드\
> \
> 아래 오류는 HTTP 200과 \`resultType: FAIL\`로 응답해요.\
> \
> \| errorCode | 설명 |\
> \| --- | --- |\
> \| \`5001\` | 토스페이 청약이 되어 있지 않아요. |\
> \| \`4010\` | 인증 정보를 찾을 수 없어요. |\
> \| \`4095\` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\
> \
> \*\*요청 한도\*\*: 앱당 분당 3,000회

```json
{"openapi":"3.1.0","info":{"title":"Apps in Toss 파트너 API","version":"1.0.0"},"tags":[{"description":"토스페이와 관련된 요청을 처리하는 API예요.","name":"toss-pay"}],"servers":[{"description":"운영 (간편 로그인·메시지 발송·토스 포인트 지급 등)","url":"https://apps-in-toss-api.toss.im"}],"security":[{"mutualTLS":[]}],"components":{"securitySchemes":{"mutualTLS":{"description":"파트너에게 발급된 클라이언트 인증서 기반 mTLS 인증이에요. 인증서의 CN으로 미니앱을 식별해요. 인증서 발급·관리 방법은 [서버 API 이용하기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/integration/server-api) 문서를 참고하세요.","type":"mutualTLS"}},"schemas":{"CreateBillingKeyRequest":{"description":"빌링키 생성 요청 본문이에요.","properties":{"isTestPayment":{"description":"테스트 결제 여부예요.","type":"boolean"},"productDesc":{"description":"자동결제 상품명이에요.","type":"string"},"returnFailureUrl":{"description":"인증 실패 시 이동할 URL이에요.","type":"string"},"returnSuccessUrl":{"description":"인증 성공 후 이동할 URL이에요.","type":"string"}},"required":["isTestPayment","productDesc"]},"TossApiSuccessCreateBillingKeyResponse":{"description":"성공 응답 봉투예요.","properties":{"resultType":{"description":"처리 결과예요. 성공이면 `SUCCESS`예요.","enum":["SUCCESS"],"type":"string"},"success":{"$ref":"#/components/schemas/CreateBillingKeyResponse"}},"required":["resultType","success"],"type":"object"},"CreateBillingKeyResponse":{"description":"빌링키 생성 응답이에요.","properties":{"checkoutAndroidUri":{"description":"Android 인증 URI예요.","type":"string"},"checkoutIosUri":{"description":"iOS 인증 URI예요.","type":"string"},"checkoutUri":{"description":"토스 앱 인증 URI예요.","type":"string"},"wrappedToken":{"description":"래핑된 빌링키 토큰이에요.","type":"string"}},"required":["wrappedToken"]},"TossApiFail":{"description":"실패 응답 봉투예요. 비즈니스 오류는 HTTP 200으로 응답하니 `resultType`을 반드시 확인하세요.","properties":{"error":{"$ref":"#/components/schemas/TossApiError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiValidationFail":{"description":"요청 필드 검증에 실패했을 때의 응답이에요.","properties":{"error":{"$ref":"#/components/schemas/TossApiValidationFailError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiValidationFailError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","properties":{"errorDetails":{"description":"필드별 검증 실패 상세 목록이에요.","items":{"$ref":"#/components/schemas/TossApiFieldError"},"type":"array"}},"type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiFieldError":{"description":"필드별 검증 실패 상세 목록이에요.","properties":{"field":{"description":"검증에 실패한 필드 이름이에요.","type":"string"},"message":{"description":"검증 실패 사유예요.","type":"string"},"rejectedValue":{"description":"거부된 입력 값이에요."}},"type":"object"}}},"paths":{"/api-partner/v1/apps-in-toss/pay/create-billing-key":{"post":{"description":"자동결제를 위한 빌링키를 생성해요.\n\n### 비즈니스 오류 코드\n\n아래 오류는 HTTP 200과 `resultType: FAIL`로 응답해요.\n\n| errorCode | 설명 |\n| --- | --- |\n| `5001` | 토스페이 청약이 되어 있지 않아요. |\n| `4010` | 인증 정보를 찾을 수 없어요. |\n| `4095` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\n\n**요청 한도**: 앱당 분당 3,000회","operationId":"createBillingKey","parameters":[{"description":"사용자를 인증하기 위한 키예요. [사용자 정보 받기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/api/toss-login#get-api-partner-v1-apps-in-toss-user-oauth2-login-me) API를 통해 획득할 수 있어요","in":"header","name":"x-toss-user-key","required":false,"schema":{"type":"string"}},{"description":"사용자를 인증하기 위한 키예요. 미니앱 SDK의 [User.getAnonymousKey](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/sdk/domains-api/user/user.getanonymouskey) 함수로 발급받을 수 있어요","in":"header","name":"x-anon-key","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBillingKeyRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"discriminator":{"mapping":{"FAIL":"#/components/schemas/TossApiFail","SUCCESS":"#/components/schemas/TossApiSuccessCreateBillingKeyResponse"},"propertyName":"resultType"},"oneOf":[{"$ref":"#/components/schemas/TossApiSuccessCreateBillingKeyResponse"},{"$ref":"#/components/schemas/TossApiFail"}]}}},"description":"요청 처리 결과예요. `resultType` 값으로 성공/실패를 구분하세요."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiValidationFail"}}},"description":"요청 본문이 형식에 맞지 않아요. `error.data.errorDetails`에서 필드별 상세를 확인하세요."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiFail"}}},"description":"분류되지 않은 서버 오류예요. 계속 실패하면 파트너 지원 채널로 문의해 주세요."}},"summary":"빌링키 생성하기","tags":["toss-pay"]}}}}
```

## 빌링키 상태 조회하기

> 빌링키의 현재 상태를 조회해요.\
> \
> \### 비즈니스 오류 코드\
> \
> 아래 오류는 HTTP 200과 \`resultType: FAIL\`로 응답해요.\
> \
> \| errorCode | 설명 |\
> \| --- | --- |\
> \| \`5001\` | 토스페이 청약이 되어 있지 않아요. |\
> \| \`5006\` | 빌링키를 찾을 수 없어요. |\
> \| \`5005\` | 비활성화된 빌링키에요. |\
> \| \`4010\` | 인증 정보를 찾을 수 없어요. |\
> \| \`4095\` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\
> \
> \*\*요청 한도\*\*: 앱당 분당 3,000회

```json
{"openapi":"3.1.0","info":{"title":"Apps in Toss 파트너 API","version":"1.0.0"},"tags":[{"description":"토스페이와 관련된 요청을 처리하는 API예요.","name":"toss-pay"}],"servers":[{"description":"운영 (간편 로그인·메시지 발송·토스 포인트 지급 등)","url":"https://apps-in-toss-api.toss.im"}],"security":[{"mutualTLS":[]}],"components":{"securitySchemes":{"mutualTLS":{"description":"파트너에게 발급된 클라이언트 인증서 기반 mTLS 인증이에요. 인증서의 CN으로 미니앱을 식별해요. 인증서 발급·관리 방법은 [서버 API 이용하기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/integration/server-api) 문서를 참고하세요.","type":"mutualTLS"}},"schemas":{"BillingKeyStatusRequest":{"description":"빌링키 상태 조회 요청 본문이에요.","properties":{"isTestPayment":{"description":"테스트 결제 여부예요.","type":"boolean"},"wrappedToken":{"description":"래핑된 빌링키 토큰이에요.","type":"string"}},"required":["isTestPayment","wrappedToken"]},"TossApiSuccessBillingKeyStatusResponse":{"description":"성공 응답 봉투예요.","properties":{"resultType":{"description":"처리 결과예요. 성공이면 `SUCCESS`예요.","enum":["SUCCESS"],"type":"string"},"success":{"$ref":"#/components/schemas/BillingKeyStatusResponse"}},"required":["resultType","success"],"type":"object"},"BillingKeyStatusResponse":{"description":"빌링키 상태 조회 응답이에요.","properties":{"accountBankCode":{"description":"은행 코드예요. 계좌로 등록된 빌링키인 경우에만 내려와요.","type":"string"},"accountBankName":{"description":"은행 이름이에요. 계좌로 등록된 빌링키인 경우에만 내려와요.","type":"string"},"accountImgUrl":{"description":"은행 이미지 URL이에요. 계좌로 등록된 빌링키인 경우에만 내려와요.","type":"string"},"accountName":{"description":"예금주명이에요. 계좌로 등록된 빌링키인 경우에만 내려와요.","type":"string"},"accountNumber":{"description":"계좌번호예요. 일부 마스킹되어 있고, 계좌로 등록된 빌링키인 경우에만 내려와요.","type":"string"},"billingKeyStatus":{"description":"앱인토스 파트너 API에서 사용하는 빌링키 상태예요.","enum":["CREATED","AUTHENTICATING","ACTIVE","REMOVED","CANCELED","FAILED","UNKNOWN"],"type":"string"},"cardCompanyName":{"description":"카드사 이름이에요. 카드로 등록된 빌링키인 경우에만 내려와요.","type":"string"},"cardCompanyNo":{"description":"카드사 코드예요. 카드로 등록된 빌링키인 경우에만 내려와요.","format":"int32","type":"integer"},"cardImgUrl":{"description":"카드 이미지 URL이에요. 카드로 등록된 빌링키인 경우에만 내려와요.","type":"string"},"cardName":{"description":"카드 이름이에요. 카드로 등록된 빌링키인 경우에만 내려와요.","type":"string"},"cardNumber":{"description":"마스킹된 카드번호예요. 카드로 등록된 빌링키인 경우에만 내려와요.","type":"string"}},"required":["billingKeyStatus"]},"TossApiFail":{"description":"실패 응답 봉투예요. 비즈니스 오류는 HTTP 200으로 응답하니 `resultType`을 반드시 확인하세요.","properties":{"error":{"$ref":"#/components/schemas/TossApiError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiValidationFail":{"description":"요청 필드 검증에 실패했을 때의 응답이에요.","properties":{"error":{"$ref":"#/components/schemas/TossApiValidationFailError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiValidationFailError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","properties":{"errorDetails":{"description":"필드별 검증 실패 상세 목록이에요.","items":{"$ref":"#/components/schemas/TossApiFieldError"},"type":"array"}},"type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiFieldError":{"description":"필드별 검증 실패 상세 목록이에요.","properties":{"field":{"description":"검증에 실패한 필드 이름이에요.","type":"string"},"message":{"description":"검증 실패 사유예요.","type":"string"},"rejectedValue":{"description":"거부된 입력 값이에요."}},"type":"object"}}},"paths":{"/api-partner/v1/apps-in-toss/pay/get-billing-key-status":{"post":{"description":"빌링키의 현재 상태를 조회해요.\n\n### 비즈니스 오류 코드\n\n아래 오류는 HTTP 200과 `resultType: FAIL`로 응답해요.\n\n| errorCode | 설명 |\n| --- | --- |\n| `5001` | 토스페이 청약이 되어 있지 않아요. |\n| `5006` | 빌링키를 찾을 수 없어요. |\n| `5005` | 비활성화된 빌링키에요. |\n| `4010` | 인증 정보를 찾을 수 없어요. |\n| `4095` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\n\n**요청 한도**: 앱당 분당 3,000회","operationId":"getBillingKeyStatus","parameters":[{"description":"사용자를 인증하기 위한 키예요. [사용자 정보 받기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/api/toss-login#get-api-partner-v1-apps-in-toss-user-oauth2-login-me) API를 통해 획득할 수 있어요","in":"header","name":"x-toss-user-key","required":false,"schema":{"type":"string"}},{"description":"사용자를 인증하기 위한 키예요. 미니앱 SDK의 [User.getAnonymousKey](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/sdk/domains-api/user/user.getanonymouskey) 함수로 발급받을 수 있어요","in":"header","name":"x-anon-key","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingKeyStatusRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"discriminator":{"mapping":{"FAIL":"#/components/schemas/TossApiFail","SUCCESS":"#/components/schemas/TossApiSuccessBillingKeyStatusResponse"},"propertyName":"resultType"},"oneOf":[{"$ref":"#/components/schemas/TossApiSuccessBillingKeyStatusResponse"},{"$ref":"#/components/schemas/TossApiFail"}]}}},"description":"요청 처리 결과예요. `resultType` 값으로 성공/실패를 구분하세요."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiValidationFail"}}},"description":"요청 본문이 형식에 맞지 않아요. `error.data.errorDetails`에서 필드별 상세를 확인하세요."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiFail"}}},"description":"분류되지 않은 서버 오류예요. 계속 실패하면 파트너 지원 채널로 문의해 주세요."}},"summary":"빌링키 상태 조회하기","tags":["toss-pay"]}}}}
```

## 자동결제 승인하기

> 빌링키를 이용해 결제를 승인해요.\
> \
> \### 비즈니스 오류 코드\
> \
> 아래 오류는 HTTP 200과 \`resultType: FAIL\`로 응답해요.\
> \
> \| errorCode | 설명 |\
> \| --- | --- |\
> \| \`5001\` | 토스페이 청약이 되어 있지 않아요. |\
> \| \`5006\` | 빌링키를 찾을 수 없어요. |\
> \| \`5005\` | 비활성화된 빌링키에요. |\
> \| \`4010\` | 인증 정보를 찾을 수 없어요. |\
> \| \`4095\` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\
> \
> \*\*요청 한도\*\*: 앱당 분당 3,000회

```json
{"openapi":"3.1.0","info":{"title":"Apps in Toss 파트너 API","version":"1.0.0"},"tags":[{"description":"토스페이와 관련된 요청을 처리하는 API예요.","name":"toss-pay"}],"servers":[{"description":"운영 (간편 로그인·메시지 발송·토스 포인트 지급 등)","url":"https://apps-in-toss-api.toss.im"}],"security":[{"mutualTLS":[]}],"components":{"securitySchemes":{"mutualTLS":{"description":"파트너에게 발급된 클라이언트 인증서 기반 mTLS 인증이에요. 인증서의 CN으로 미니앱을 식별해요. 인증서 발급·관리 방법은 [서버 API 이용하기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/integration/server-api) 문서를 참고하세요.","type":"mutualTLS"}},"schemas":{"ExecuteBillingRequest":{"description":"자동결제 승인 요청 본문이에요.","properties":{"amount":{"description":"결제 금액이에요.","format":"int64","type":"integer"},"amountServiceFee":{"description":"봉사료예요.","format":"int64","type":"integer"},"amountTaxFree":{"description":"비과세 금액이에요.","format":"int64","type":"integer"},"amountTaxable":{"description":"과세 금액이에요.","format":"int64","type":"integer"},"amountVat":{"description":"부가세예요.","format":"int64","type":"integer"},"cashReceipt":{"description":"현금영수증 발급 여부예요. 값이 없으면 true로 처리돼요.","type":"boolean"},"cashReceiptTradeOption":{"description":"현금영수증 발급 타입이에요. GENERAL/CULTURE/PUBLIC_TP 중 하나이고, 값이 없으면 GENERAL로 처리돼요.","type":"string"},"isTestPayment":{"description":"테스트 결제 여부예요.","type":"boolean"},"orderNo":{"description":"주문번호예요.","type":"string"},"productDesc":{"description":"상품 설명이에요.","type":"string"},"sendFailPush":{"description":"결제 실패 시 푸시 발송 여부예요. 값이 없으면 true로 처리돼요.","type":"boolean"},"spreadOut":{"description":"할부 개월 수예요. 0이면 일시불이에요.","format":"int32","type":"integer"},"wrappedToken":{"description":"래핑된 빌링키 토큰이에요.","type":"string"}},"required":["amount","amountTaxFree","isTestPayment","orderNo","productDesc","spreadOut","wrappedToken"]},"TossApiSuccessExecuteBillingResponse":{"description":"성공 응답 봉투예요.","properties":{"resultType":{"description":"처리 결과예요. 성공이면 `SUCCESS`예요.","enum":["SUCCESS"],"type":"string"},"success":{"$ref":"#/components/schemas/ExecuteBillingResponse"}},"required":["resultType","success"],"type":"object"},"ExecuteBillingResponse":{"description":"자동결제 승인 응답이에요.","properties":{"accountBankCode":{"description":"은행 코드예요. 토스머니(계좌) 결제인 경우에만 내려와요.","type":"string"},"accountBankName":{"description":"은행 이름이에요. 토스머니(계좌) 결제인 경우에만 내려와요.","type":"string"},"accountNumber":{"description":"계좌번호예요. 일부 마스킹되어 있고, 토스머니(계좌) 결제인 경우에만 내려와요.","type":"string"},"amount":{"description":"총 결제 금액이에요.","format":"int64","type":"integer"},"approvalTime":{"description":"자동결제가 승인된 시간이에요. (yyyy-MM-dd HH:mm:ss 형식)","type":"string"},"cardAuthorizationNo":{"description":"카드 승인 번호예요. 카드 결제인 경우에만 내려와요.","type":"string"},"cardBinNumber":{"description":"카드 BIN 번호예요. 카드사에서 제공한 값이며 마스킹되어 있을 수 있고, 카드 결제인 경우에만 내려와요.","type":"string"},"cardCompanyCode":{"description":"카드사 코드예요. 카드 결제인 경우에만 내려와요.","format":"int32","type":"integer"},"cardCompanyName":{"description":"카드사 이름이에요. 카드 결제인 경우에만 내려와요.","type":"string"},"cardMethodType":{"description":"카드타입이에요. CREDIT(신용카드)/CHECK(체크카드)/PREPAYMENT(선불카드) 중 하나이고, 카드 결제인 경우에만 내려와요.","type":"string"},"cardNum4Print":{"description":"사용자가 선택한 카드의 끝 4자리예요. 카드 결제인 경우에만 내려와요.","type":"string"},"cardNumber":{"description":"마스킹된 카드번호예요. 카드 결제인 경우에만 내려와요.","type":"string"},"cardUserType":{"description":"카드 사용자 구분이에요. PERSONAL(본인 카드)/PERSONAL_FAMILY(가족 카드)/CORP_PERSONAL(법인지정 결제계좌 임직원)/CORP_PRIVATE(법인 공용)/CORP_COMPANY(법인지정 결제계좌 회사(하나카드만)) 중 하나이고, 카드 결제인 경우에만 내려와요.","type":"string"},"cashReceiptMgtKey":{"description":"현금영수증 관리번호 식별값이에요. 토스머니(계좌) 결제인 경우에만 내려와요.","type":"string"},"code":{"description":"자동결제 승인 처리 결과 코드예요. 성공이면 0, 실패면 -1이에요.","format":"int32","type":"integer"},"discountedAmount":{"description":"할인이 적용된 결제 금액이에요.","format":"int64","type":"integer"},"errorCode":{"description":"자동결제 실패 시 내려오는 에러 코드예요. code가 -1일 때 내려와요.","type":"string"},"mode":{"description":"결제가 처리된 환경을 나타내요. NORMAL 또는 TEST 값 중 하나예요.","type":"string"},"msg":{"description":"자동결제 실패 시 실패 사유를 담은 메시지예요. code가 -1일 때 내려와요.","type":"string"},"noInterest":{"description":"무이자 할부 여부예요. 카드 결제인 경우에만 내려와요.","type":"boolean"},"orderNo":{"description":"요청한 주문번호예요.","type":"string"},"paidAmount":{"description":"지불수단으로 실제 승인된 금액이에요.","format":"int64","type":"integer"},"payMethod":{"description":"결제 수단이에요. CARD 또는 TOSS_MONEY 값을 가져요.","type":"string"},"payToken":{"description":"이 자동결제 건을 식별하는 토큰이에요.","type":"string"},"salesCheckLinkUrl":{"description":"매출전표 확인 URL이에요. 카드 결제인 경우에만 내려와요.","type":"string"},"spreadOut":{"description":"할부 개월 수예요. 0이면 일시불이고, 카드 결제인 경우에만 내려와요.","format":"int32","type":"integer"},"transactionId":{"description":"거래를 식별하는 트랜잭션 아이디예요.","type":"string"}},"required":["code"]},"TossApiFail":{"description":"실패 응답 봉투예요. 비즈니스 오류는 HTTP 200으로 응답하니 `resultType`을 반드시 확인하세요.","properties":{"error":{"$ref":"#/components/schemas/TossApiError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiValidationFail":{"description":"요청 필드 검증에 실패했을 때의 응답이에요.","properties":{"error":{"$ref":"#/components/schemas/TossApiValidationFailError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiValidationFailError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","properties":{"errorDetails":{"description":"필드별 검증 실패 상세 목록이에요.","items":{"$ref":"#/components/schemas/TossApiFieldError"},"type":"array"}},"type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiFieldError":{"description":"필드별 검증 실패 상세 목록이에요.","properties":{"field":{"description":"검증에 실패한 필드 이름이에요.","type":"string"},"message":{"description":"검증 실패 사유예요.","type":"string"},"rejectedValue":{"description":"거부된 입력 값이에요."}},"type":"object"}}},"paths":{"/api-partner/v1/apps-in-toss/pay/execute-billing":{"post":{"description":"빌링키를 이용해 결제를 승인해요.\n\n### 비즈니스 오류 코드\n\n아래 오류는 HTTP 200과 `resultType: FAIL`로 응답해요.\n\n| errorCode | 설명 |\n| --- | --- |\n| `5001` | 토스페이 청약이 되어 있지 않아요. |\n| `5006` | 빌링키를 찾을 수 없어요. |\n| `5005` | 비활성화된 빌링키에요. |\n| `4010` | 인증 정보를 찾을 수 없어요. |\n| `4095` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\n\n**요청 한도**: 앱당 분당 3,000회","operationId":"executeBilling","parameters":[{"description":"사용자를 인증하기 위한 키예요. [사용자 정보 받기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/api/toss-login#get-api-partner-v1-apps-in-toss-user-oauth2-login-me) API를 통해 획득할 수 있어요","in":"header","name":"x-toss-user-key","required":false,"schema":{"type":"string"}},{"description":"사용자를 인증하기 위한 키예요. 미니앱 SDK의 [User.getAnonymousKey](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/sdk/domains-api/user/user.getanonymouskey) 함수로 발급받을 수 있어요","in":"header","name":"x-anon-key","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecuteBillingRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"discriminator":{"mapping":{"FAIL":"#/components/schemas/TossApiFail","SUCCESS":"#/components/schemas/TossApiSuccessExecuteBillingResponse"},"propertyName":"resultType"},"oneOf":[{"$ref":"#/components/schemas/TossApiSuccessExecuteBillingResponse"},{"$ref":"#/components/schemas/TossApiFail"}]}}},"description":"요청 처리 결과예요. `resultType` 값으로 성공/실패를 구분하세요."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiValidationFail"}}},"description":"요청 본문이 형식에 맞지 않아요. `error.data.errorDetails`에서 필드별 상세를 확인하세요."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiFail"}}},"description":"분류되지 않은 서버 오류예요. 계속 실패하면 파트너 지원 채널로 문의해 주세요."}},"summary":"자동결제 승인하기","tags":["toss-pay"]}}}}
```

## 자동결제 환불하기

> 자동결제로 승인된 결제 건을 환불해요.\
> \
> \### 비즈니스 오류 코드\
> \
> 아래 오류는 HTTP 200과 \`resultType: FAIL\`로 응답해요.\
> \
> \| errorCode | 설명 |\
> \| --- | --- |\
> \| \`5001\` | 토스페이 청약이 되어 있지 않아요. |\
> \| \`4010\` | 인증 정보를 찾을 수 없어요. |\
> \| \`4095\` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\
> \
> \*\*요청 한도\*\*: 앱당 분당 3,000회

```json
{"openapi":"3.1.0","info":{"title":"Apps in Toss 파트너 API","version":"1.0.0"},"tags":[{"description":"토스페이와 관련된 요청을 처리하는 API예요.","name":"toss-pay"}],"servers":[{"description":"운영 (간편 로그인·메시지 발송·토스 포인트 지급 등)","url":"https://apps-in-toss-api.toss.im"}],"security":[{"mutualTLS":[]}],"components":{"securitySchemes":{"mutualTLS":{"description":"파트너에게 발급된 클라이언트 인증서 기반 mTLS 인증이에요. 인증서의 CN으로 미니앱을 식별해요. 인증서 발급·관리 방법은 [서버 API 이용하기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/integration/server-api) 문서를 참고하세요.","type":"mutualTLS"}},"schemas":{"RefundBillingRequest":{"description":"자동결제 환불 요청 본문이에요.","properties":{"isTestPayment":{"description":"테스트 결제 여부예요.","type":"boolean"},"payToken":{"description":"환불할 자동결제 건의 토스페이 토큰이에요.","type":"string"},"reason":{"description":"환불 사유예요.","type":"string"}},"required":["isTestPayment","payToken"]},"TossApiSuccessRefundBillingResponse":{"description":"성공 응답 봉투예요.","properties":{"resultType":{"description":"처리 결과예요. 성공이면 `SUCCESS`예요.","enum":["SUCCESS"],"type":"string"},"success":{"$ref":"#/components/schemas/RefundBillingResponse"}},"required":["resultType","success"],"type":"object"},"RefundBillingResponse":{"description":"자동결제 환불 응답이에요.","properties":{"accountBankCode":{"description":"은행 코드예요.","type":"string"},"accountBankName":{"description":"은행 이름이에요.","type":"string"},"accountNumber":{"description":"계좌번호예요. 일부 마스킹되어 있어요.","type":"string"},"approvalTime":{"description":"환불이 처리된 시간이에요. (yyyy-MM-dd HH:mm:ss 형식)","type":"string"},"cardBinNumber":{"description":"카드 BIN 번호예요. 카드사에서 제공한 값이며 마스킹되어 있을 수 있어요.","type":"string"},"cardMethodType":{"description":"카드타입이에요. CREDIT(신용카드)/CHECK(체크카드)/PREPAYMENT(선불카드) 중 하나예요.","type":"string"},"cardNum4Print":{"description":"사용자가 선택한 카드의 끝 4자리예요.","type":"string"},"cardNumber":{"description":"마스킹된 카드번호예요.","type":"string"},"cardUserType":{"description":"카드 사용자 구분이에요. PERSONAL(본인 카드)/PERSONAL_FAMILY(가족 카드)/CORP_PERSONAL(법인지정 결제계좌 임직원)/CORP_PRIVATE(법인 공용)/CORP_COMPANY(법인지정 결제계좌 회사(하나카드만)) 중 하나예요.","type":"string"},"cashReceiptMgtKey":{"description":"현금영수증 관리번호 식별값이에요.","type":"string"},"discountedAmount":{"description":"할인된 금액이에요.","format":"int32","type":"integer"},"paidAmount":{"description":"지불수단 승인금액이에요.","format":"int32","type":"integer"},"payToken":{"description":"환불된 결제 토큰이에요.","type":"string"},"refundNo":{"description":"환불 번호예요.","type":"string"},"refundableAmount":{"description":"환불 가능 금액이에요.","format":"int32","type":"integer"},"refundedAmount":{"description":"환불 요청 금액이에요.","format":"int32","type":"integer"},"refundedDiscountAmount":{"description":"환불 요청 금액 중 실제 차감된 할인 금액이에요.","format":"int32","type":"integer"},"refundedPaidAmount":{"description":"환불 요청 금액 중 실제 차감된 지불수단 금액이에요.","format":"int32","type":"integer"},"transactionId":{"description":"거래 트랜잭션 아이디예요.","type":"string"}},"required":["approvalTime","discountedAmount","paidAmount","payToken","refundNo","refundableAmount","refundedAmount","refundedDiscountAmount","refundedPaidAmount","transactionId"]},"TossApiFail":{"description":"실패 응답 봉투예요. 비즈니스 오류는 HTTP 200으로 응답하니 `resultType`을 반드시 확인하세요.","properties":{"error":{"$ref":"#/components/schemas/TossApiError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiValidationFail":{"description":"요청 필드 검증에 실패했을 때의 응답이에요.","properties":{"error":{"$ref":"#/components/schemas/TossApiValidationFailError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiValidationFailError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","properties":{"errorDetails":{"description":"필드별 검증 실패 상세 목록이에요.","items":{"$ref":"#/components/schemas/TossApiFieldError"},"type":"array"}},"type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiFieldError":{"description":"필드별 검증 실패 상세 목록이에요.","properties":{"field":{"description":"검증에 실패한 필드 이름이에요.","type":"string"},"message":{"description":"검증 실패 사유예요.","type":"string"},"rejectedValue":{"description":"거부된 입력 값이에요."}},"type":"object"}}},"paths":{"/api-partner/v1/apps-in-toss/pay/refund-billing":{"post":{"description":"자동결제로 승인된 결제 건을 환불해요.\n\n### 비즈니스 오류 코드\n\n아래 오류는 HTTP 200과 `resultType: FAIL`로 응답해요.\n\n| errorCode | 설명 |\n| --- | --- |\n| `5001` | 토스페이 청약이 되어 있지 않아요. |\n| `4010` | 인증 정보를 찾을 수 없어요. |\n| `4095` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\n\n**요청 한도**: 앱당 분당 3,000회","operationId":"refundBilling","parameters":[{"description":"사용자를 인증하기 위한 키예요. [사용자 정보 받기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/api/toss-login#get-api-partner-v1-apps-in-toss-user-oauth2-login-me) API를 통해 획득할 수 있어요","in":"header","name":"x-toss-user-key","required":false,"schema":{"type":"string"}},{"description":"사용자를 인증하기 위한 키예요. 미니앱 SDK의 [User.getAnonymousKey](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/sdk/domains-api/user/user.getanonymouskey) 함수로 발급받을 수 있어요","in":"header","name":"x-anon-key","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundBillingRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"discriminator":{"mapping":{"FAIL":"#/components/schemas/TossApiFail","SUCCESS":"#/components/schemas/TossApiSuccessRefundBillingResponse"},"propertyName":"resultType"},"oneOf":[{"$ref":"#/components/schemas/TossApiSuccessRefundBillingResponse"},{"$ref":"#/components/schemas/TossApiFail"}]}}},"description":"요청 처리 결과예요. `resultType` 값으로 성공/실패를 구분하세요."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiValidationFail"}}},"description":"요청 본문이 형식에 맞지 않아요. `error.data.errorDetails`에서 필드별 상세를 확인하세요."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiFail"}}},"description":"분류되지 않은 서버 오류예요. 계속 실패하면 파트너 지원 채널로 문의해 주세요."}},"summary":"자동결제 환불하기","tags":["toss-pay"]}}}}
```

## 빌링키 삭제하기

> 빌링키를 삭제(해지)해요.\
> \
> \### 비즈니스 오류 코드\
> \
> 아래 오류는 HTTP 200과 \`resultType: FAIL\`로 응답해요.\
> \
> \| errorCode | 설명 |\
> \| --- | --- |\
> \| \`5001\` | 토스페이 청약이 되어 있지 않아요. |\
> \| \`5006\` | 빌링키를 찾을 수 없어요. |\
> \| \`4010\` | 인증 정보를 찾을 수 없어요. |\
> \| \`4095\` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\
> \
> \*\*요청 한도\*\*: 앱당 분당 3,000회

```json
{"openapi":"3.1.0","info":{"title":"Apps in Toss 파트너 API","version":"1.0.0"},"tags":[{"description":"토스페이와 관련된 요청을 처리하는 API예요.","name":"toss-pay"}],"servers":[{"description":"운영 (간편 로그인·메시지 발송·토스 포인트 지급 등)","url":"https://apps-in-toss-api.toss.im"}],"security":[{"mutualTLS":[]}],"components":{"securitySchemes":{"mutualTLS":{"description":"파트너에게 발급된 클라이언트 인증서 기반 mTLS 인증이에요. 인증서의 CN으로 미니앱을 식별해요. 인증서 발급·관리 방법은 [서버 API 이용하기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/integration/server-api) 문서를 참고하세요.","type":"mutualTLS"}},"schemas":{"RemoveBillingKeyRequest":{"description":"빌링키 삭제 요청 본문이에요.","properties":{"isTestPayment":{"description":"테스트 결제 여부예요.","type":"boolean"},"wrappedToken":{"description":"래핑된 빌링키 토큰이에요.","type":"string"}},"required":["isTestPayment","wrappedToken"]},"TossApiSuccessRemoveBillingKeyResponse":{"description":"성공 응답 봉투예요.","properties":{"resultType":{"description":"처리 결과예요. 성공이면 `SUCCESS`예요.","enum":["SUCCESS"],"type":"string"},"success":{"$ref":"#/components/schemas/RemoveBillingKeyResponse"}},"required":["resultType","success"],"type":"object"},"RemoveBillingKeyResponse":{"description":"빌링키 삭제 응답이에요.","properties":{"code":{"description":"빌링키 삭제 처리 결과 코드예요. 성공이면 0이에요.","format":"int32","type":"integer"},"msg":{"description":"빌링키 삭제 실패 시 실패 사유를 담은 메시지예요.","type":"string"}},"required":["code"]},"TossApiFail":{"description":"실패 응답 봉투예요. 비즈니스 오류는 HTTP 200으로 응답하니 `resultType`을 반드시 확인하세요.","properties":{"error":{"$ref":"#/components/schemas/TossApiError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiValidationFail":{"description":"요청 필드 검증에 실패했을 때의 응답이에요.","properties":{"error":{"$ref":"#/components/schemas/TossApiValidationFailError"},"resultType":{"description":"처리 결과예요. `SUCCESS`가 아닌 값은 모두 실패로 처리하세요. 일반적으로 `FAIL`이에요.","enum":["FAIL","HTTP_TIMEOUT","NETWORK_ERROR","EXECUTION_FAIL","INTERRUPTED","INTERNAL_ERROR"],"type":"string"},"success":{"description":"실패 시 항상 null이에요."}},"required":["error","resultType"],"type":"object"},"TossApiValidationFailError":{"description":"오류 상세 정보예요.","properties":{"data":{"description":"오류 부가 정보예요. 요청 한도 초과 시 `retryAfterSeconds`가 담겨요.","properties":{"errorDetails":{"description":"필드별 검증 실패 상세 목록이에요.","items":{"$ref":"#/components/schemas/TossApiFieldError"},"type":"array"}},"type":"object"},"errorCode":{"description":"오류 코드예요. 각 API의 비즈니스 오류 코드 표를 참고하세요.","type":"string"},"errorType":{"description":"내부 오류 분류 값이에요. 오류 구분에는 `errorCode`를 사용하세요.","format":"int32","type":"integer"},"reason":{"description":"사람이 읽을 수 있는 오류 설명이에요.","type":"string"},"title":{"description":"오류 제목이에요. 대부분 null이에요.","type":"string"}},"required":["errorCode","reason"],"type":"object"},"TossApiFieldError":{"description":"필드별 검증 실패 상세 목록이에요.","properties":{"field":{"description":"검증에 실패한 필드 이름이에요.","type":"string"},"message":{"description":"검증 실패 사유예요.","type":"string"},"rejectedValue":{"description":"거부된 입력 값이에요."}},"type":"object"}}},"paths":{"/api-partner/v1/apps-in-toss/pay/remove-billing-key":{"post":{"description":"빌링키를 삭제(해지)해요.\n\n### 비즈니스 오류 코드\n\n아래 오류는 HTTP 200과 `resultType: FAIL`로 응답해요.\n\n| errorCode | 설명 |\n| --- | --- |\n| `5001` | 토스페이 청약이 되어 있지 않아요. |\n| `5006` | 빌링키를 찾을 수 없어요. |\n| `4010` | 인증 정보를 찾을 수 없어요. |\n| `4095` | 요청 한도를 초과했어요. 잠시 후 다시 시도해주세요. |\n\n**요청 한도**: 앱당 분당 3,000회","operationId":"removeBillingKey","parameters":[{"description":"사용자를 인증하기 위한 키예요. [사용자 정보 받기](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/api/toss-login#get-api-partner-v1-apps-in-toss-user-oauth2-login-me) API를 통해 획득할 수 있어요","in":"header","name":"x-toss-user-key","required":false,"schema":{"type":"string"}},{"description":"사용자를 인증하기 위한 키예요. 미니앱 SDK의 [User.getAnonymousKey](https://appsintoss.gitbook.io/appsintoss-docs/gS3ttrb5Le6IDbEbyixR/documentation/sdk/domains-api/user/user.getanonymouskey) 함수로 발급받을 수 있어요","in":"header","name":"x-anon-key","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveBillingKeyRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"discriminator":{"mapping":{"FAIL":"#/components/schemas/TossApiFail","SUCCESS":"#/components/schemas/TossApiSuccessRemoveBillingKeyResponse"},"propertyName":"resultType"},"oneOf":[{"$ref":"#/components/schemas/TossApiSuccessRemoveBillingKeyResponse"},{"$ref":"#/components/schemas/TossApiFail"}]}}},"description":"요청 처리 결과예요. `resultType` 값으로 성공/실패를 구분하세요."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiValidationFail"}}},"description":"요청 본문이 형식에 맞지 않아요. `error.data.errorDetails`에서 필드별 상세를 확인하세요."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TossApiFail"}}},"description":"분류되지 않은 서버 오류예요. 계속 실패하면 파트너 지원 채널로 문의해 주세요."}},"summary":"빌링키 삭제하기","tags":["toss-pay"]}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers-apps-in-toss.toss.im/documentation/api/toss-pay.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
