> ## Documentation Index
> Fetch the complete documentation index at: https://docs.golfjoin.co.kr/llms.txt
> Use this file to discover all available pages before exploring further.

# 티 매물 등록

> 티 매물을 등록하고 바로 노출합니다. 월 게시 한도를 1건 차감합니다. 같은 externalId로 이미 등록한 매물이 있으면 새로 만들지 않고 그 번호와 `duplicate: true`를 돌려줍니다(한도 차감 없음).



## OpenAPI

````yaml /api-reference/openapi.yaml post /api/v1/manager/contents
openapi: 3.1.0
info:
  title: 조인성공 파트너 API
  version: '2026-11-02'
  description: 매니저 본인의 권한으로 조인성공 티 매물을 등록·수정·마감합니다.
servers:
  - url: https://golfjoin.co.kr
security:
  - bearerAuth: []
paths:
  /api/v1/manager/contents:
    post:
      tags:
        - 티 매물
      summary: 티 매물 등록
      description: >-
        티 매물을 등록하고 바로 노출합니다. 월 게시 한도를 1건 차감합니다. 같은 externalId로 이미 등록한 매물이 있으면 새로
        만들지 않고 그 번호와 `duplicate: true`를 돌려줍니다(한도 차감 없음).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContentCreate'
      responses:
        '200':
          description: 등록됨, 또는 externalId 중복으로 기존 매물 반환
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    example: 188201
                  usage:
                    $ref: '#/components/schemas/Usage'
                  duplicate:
                    type: boolean
                    description: externalId 중복으로 기존 매물을 돌려준 경우 true
        '400':
          $ref: '#/components/responses/InvalidInput'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: 없는 골프장 ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: course_not_found
        '429':
          description: 월 게시 한도 초과
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: post_quota_exceeded
                  usage:
                    $ref: '#/components/schemas/Usage'
components:
  schemas:
    ContentCreate:
      allOf:
        - $ref: '#/components/schemas/ContentFields'
        - type: object
          required:
            - golfCourseId
            - contentType
            - playDate
            - teeTime
          properties:
            externalId:
              type: string
              pattern: ^[\w.:-]{1,100}$
              description: 연동 프로그램 쪽 고유 번호. 같은 값으로 다시 등록하면 기존 매물 번호를 돌려줍니다.
              example: ext-20261220-0001
    Usage:
      type: object
      properties:
        plan:
          type:
            - object
            - 'null'
          description: 이용 중인 플랜. 없으면 null
          properties:
            id:
              type: integer
              example: 1
            name:
              type: string
              example: 베이직
            monthlyPostLimit:
              type: integer
              description: 월 게시 한도. -1은 무제한
              example: 999999
        posts:
          type: object
          properties:
            used:
              type: integer
              description: 이번 달 게시 횟수(등록 + 끌어올리기)
              example: 12
            limit:
              type: integer
              description: 월 한도. -1은 무제한
              example: 999999
        month:
          type: string
          description: 집계 월 YYYY-MM (KST)
          example: 2026-11
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: 오류 코드
          example: invalid_input
    ContentFields:
      type: object
      properties:
        golfCourseId:
          type: integer
          description: 골프장 ID
          example: 3
        contentType:
          type: string
          enum:
            - JOIN
            - TRANSFER
          description: JOIN(조인) 또는 TRANSFER(양도)
        playDate:
          type: string
          description: 플레이 날짜 YYYY-MM-DD (KST)
          example: '2026-12-20'
        teeTime:
          type: string
          description: 티업 시간 HH:MM, 24시간제 (KST)
          example: '07:12'
        courseLabel:
          type:
            - string
            - 'null'
          maxLength: 30
          description: 코스 이름. 골프장 목록의 fields[].name. <, > 불가
          example: 레이크
        playerCount:
          type:
            - integer
            - 'null'
          description: 조인은 모집 인원, 양도는 팀 인원(1~4)
          example: 1
        joinCondition:
          type:
            - string
            - 'null'
          description: '조인 조건: 무관, 부부커플, 남자, 여자. 양도는 null'
          example: 무관
        price:
          type:
            - integer
            - 'null'
          description: 1인 그린피, 원 단위
          example: 150000
        deposit:
          type:
            - integer
            - 'null'
          minimum: 0
          description: 선입금, 원 단위. 0은 선입금 없음
          example: 0
        caddyType:
          type:
            - string
            - 'null'
          description: '캐디 조건: 일반캐디, 노캐디, 운전캐디, 새싹캐디'
          example: 일반캐디
        holeCount:
          type:
            - integer
            - 'null'
          description: 9, 18, 27, 36
          example: 18
        cartIncluded:
          type:
            - boolean
            - 'null'
          description: 카트비 포함 여부
        mealIncluded:
          type:
            - boolean
            - 'null'
          description: 식사 포함 여부
        allowCall:
          type: boolean
          description: 전화 문의 허용. 기본 true, false면 문자 문의만
        contentText:
          type:
            - string
            - 'null'
          description: 매물 안내문(메모)
          example: 카트비 포함, 캐디피 별도입니다.
        title:
          type:
            - string
            - 'null'
          maxLength: 100
          description: 제목. 비우면 '골프장명 날짜 시간' 자동. <, > 불가
  responses:
    InvalidInput:
      description: 필수 필드 누락 또는 형식 오류
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: invalid_input
    Forbidden:
      description: 토큰 없음·만료·무효, 권한 범위 밖, 매니저 승인 해제(forbidden) 또는 플랜 없음(no_plan)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: forbidden
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: OAuth 로그인으로 받은 access token. 1시간 동안 유효합니다.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.