Toss Payments Cash Receipts API

Korean cash receipt (현금영수증) issuance and cancellation.

OpenAPI Specification

toss-payments-cash-receipts-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Toss Payments Core Billing Cash Receipts API
  description: 'The Toss Payments Core API is a REST interface for accepting and managing online payments in South Korea across cards, easy-pay wallets (Toss Pay, KakaoPay, Naver Pay), virtual accounts, bank transfer, and mobile-phone billing. This document models a representative, grounded subset of the Core API: payment confirmation and cancellation, recurring billing keys, virtual account issuance, cash receipts, transaction and settlement queries, and marketplace payouts. All requests authenticate with HTTP Basic auth - the secret API key is used as the username with an empty password, Base64 encoded (`Authorization: Basic base64(secretKey:)`). Asynchronous results (virtual account deposits, foreign payment cancellations, Brandpay and payout status changes) are delivered by webhooks, which are out of scope for this REST document. Field names follow the Korean documentation, translated where helpful. This is a modeled subset authored by API Evangelist from the public documentation, not an official Toss Payments OpenAPI artifact.'
  version: '2022-11-16'
  contact:
    name: Toss Payments Developer Center
    url: https://docs.tosspayments.com/en
  termsOfService: https://www.tosspayments.com
servers:
- url: https://api.tosspayments.com
  description: Toss Payments Core API (test and live selected by secret key prefix)
security:
- basicAuth: []
tags:
- name: Cash Receipts
  description: Korean cash receipt (현금영수증) issuance and cancellation.
paths:
  /v1/cash-receipts:
    post:
      operationId: issueCashReceipt
      tags:
      - Cash Receipts
      summary: Issue a cash receipt
      description: Issues a Korean cash receipt for income deduction or expense evidence.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CashReceiptRequest'
      responses:
        '200':
          description: The issued CashReceipt object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CashReceipt'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
    get:
      operationId: listCashReceipts
      tags:
      - Cash Receipts
      summary: Query cash receipts
      description: Queries issued cash receipts by request date with cursor pagination.
      parameters:
      - name: requestDate
        in: query
        required: true
        description: The date (YYYY-MM-DD) cash receipts were requested.
        schema:
          type: string
          format: date
      - name: limit
        in: query
        required: false
        description: Maximum number of records to return (up to 10000).
        schema:
          type: integer
          default: 100
      - name: startingAfter
        in: query
        required: false
        description: Cursor - return records after this receiptKey.
        schema:
          type: string
      responses:
        '200':
          description: A list of CashReceipt objects.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CashReceipt'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/cash-receipts/{receiptKey}/cancel:
    parameters:
    - name: receiptKey
      in: path
      required: true
      description: The key identifying the cash receipt.
      schema:
        type: string
    post:
      operationId: cancelCashReceipt
      tags:
      - Cash Receipts
      summary: Cancel a cash receipt
      description: Cancels a cash receipt in full or in part.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - amount
              properties:
                amount:
                  type: integer
                  description: The amount to cancel.
      responses:
        '200':
          description: The updated CashReceipt object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CashReceipt'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  responses:
    Unauthorized:
      description: Missing or invalid secret key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: The request was invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    CashReceiptRequest:
      type: object
      required:
      - amount
      - orderId
      - orderName
      - customerIdentityNumber
      - type
      properties:
        amount:
          type: integer
        orderId:
          type: string
        orderName:
          type: string
        customerIdentityNumber:
          type: string
          description: Phone number, card number, or business/national ID.
        type:
          type: string
          enum:
          - 소득공제
          - 지출증빙
        taxFreeAmount:
          type: integer
    CashReceipt:
      type: object
      properties:
        receiptKey:
          type: string
        orderId:
          type: string
        type:
          type: string
        issueNumber:
          type: string
        receiptUrl:
          type: string
        amount:
          type: integer
        taxFreeAmount:
          type: integer
        issueStatus:
          type: string
          enum:
          - IN_PROGRESS
          - COMPLETED
          - FAILED
    Error:
      type: object
      description: Standard Toss Payments error body.
      properties:
        code:
          type: string
          description: Machine-readable error code (for example INVALID_CARD_EXPIRATION).
        message:
          type: string
          description: Human-readable error message (Korean by default).
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic authentication. Use your Toss Payments secret key as the username and leave the password empty, then Base64 encode `secretKey:` for the Authorization header. Test keys are prefixed `test_sk_` / `test_gsk_` and live keys `live_sk_` / `live_gsk_`.