티 매물 등록
curl --request POST \
--url https://golfjoin.co.kr/api/v1/manager/contents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"golfCourseId": 3,
"playDate": "2026-12-20",
"teeTime": "07:12",
"courseLabel": "레이크",
"playerCount": 1,
"joinCondition": "무관",
"price": 150000,
"deposit": 0,
"caddyType": "일반캐디",
"holeCount": 18,
"cartIncluded": true,
"mealIncluded": true,
"allowCall": true,
"contentText": "카트비 포함, 캐디피 별도입니다.",
"title": "<string>",
"externalId": "ext-20261220-0001"
}
'import requests
url = "https://golfjoin.co.kr/api/v1/manager/contents"
payload = {
"golfCourseId": 3,
"playDate": "2026-12-20",
"teeTime": "07:12",
"courseLabel": "레이크",
"playerCount": 1,
"joinCondition": "무관",
"price": 150000,
"deposit": 0,
"caddyType": "일반캐디",
"holeCount": 18,
"cartIncluded": True,
"mealIncluded": True,
"allowCall": True,
"contentText": "카트비 포함, 캐디피 별도입니다.",
"title": "<string>",
"externalId": "ext-20261220-0001"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
golfCourseId: 3,
playDate: '2026-12-20',
teeTime: '07:12',
courseLabel: '레이크',
playerCount: 1,
joinCondition: '무관',
price: 150000,
deposit: 0,
caddyType: '일반캐디',
holeCount: 18,
cartIncluded: true,
mealIncluded: true,
allowCall: true,
contentText: '카트비 포함, 캐디피 별도입니다.',
title: '<string>',
externalId: 'ext-20261220-0001'
})
};
fetch('https://golfjoin.co.kr/api/v1/manager/contents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://golfjoin.co.kr/api/v1/manager/contents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'golfCourseId' => 3,
'playDate' => '2026-12-20',
'teeTime' => '07:12',
'courseLabel' => '레이크',
'playerCount' => 1,
'joinCondition' => '무관',
'price' => 150000,
'deposit' => 0,
'caddyType' => '일반캐디',
'holeCount' => 18,
'cartIncluded' => true,
'mealIncluded' => true,
'allowCall' => true,
'contentText' => '카트비 포함, 캐디피 별도입니다.',
'title' => '<string>',
'externalId' => 'ext-20261220-0001'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://golfjoin.co.kr/api/v1/manager/contents"
payload := strings.NewReader("{\n \"golfCourseId\": 3,\n \"playDate\": \"2026-12-20\",\n \"teeTime\": \"07:12\",\n \"courseLabel\": \"레이크\",\n \"playerCount\": 1,\n \"joinCondition\": \"무관\",\n \"price\": 150000,\n \"deposit\": 0,\n \"caddyType\": \"일반캐디\",\n \"holeCount\": 18,\n \"cartIncluded\": true,\n \"mealIncluded\": true,\n \"allowCall\": true,\n \"contentText\": \"카트비 포함, 캐디피 별도입니다.\",\n \"title\": \"<string>\",\n \"externalId\": \"ext-20261220-0001\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://golfjoin.co.kr/api/v1/manager/contents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"golfCourseId\": 3,\n \"playDate\": \"2026-12-20\",\n \"teeTime\": \"07:12\",\n \"courseLabel\": \"레이크\",\n \"playerCount\": 1,\n \"joinCondition\": \"무관\",\n \"price\": 150000,\n \"deposit\": 0,\n \"caddyType\": \"일반캐디\",\n \"holeCount\": 18,\n \"cartIncluded\": true,\n \"mealIncluded\": true,\n \"allowCall\": true,\n \"contentText\": \"카트비 포함, 캐디피 별도입니다.\",\n \"title\": \"<string>\",\n \"externalId\": \"ext-20261220-0001\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://golfjoin.co.kr/api/v1/manager/contents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"golfCourseId\": 3,\n \"playDate\": \"2026-12-20\",\n \"teeTime\": \"07:12\",\n \"courseLabel\": \"레이크\",\n \"playerCount\": 1,\n \"joinCondition\": \"무관\",\n \"price\": 150000,\n \"deposit\": 0,\n \"caddyType\": \"일반캐디\",\n \"holeCount\": 18,\n \"cartIncluded\": true,\n \"mealIncluded\": true,\n \"allowCall\": true,\n \"contentText\": \"카트비 포함, 캐디피 별도입니다.\",\n \"title\": \"<string>\",\n \"externalId\": \"ext-20261220-0001\"\n}"
response = http.request(request)
puts response.read_body{
"id": 188201,
"usage": {
"plan": {
"id": 1,
"name": "베이직",
"monthlyPostLimit": 999999
},
"posts": {
"used": 12,
"limit": 999999
},
"month": "2026-11"
},
"duplicate": true
}{
"error": "invalid_input"
}{
"error": "forbidden"
}{
"error": "course_not_found"
}{
"error": "post_quota_exceeded",
"usage": {
"plan": {
"id": 1,
"name": "베이직",
"monthlyPostLimit": 999999
},
"posts": {
"used": 12,
"limit": 999999
},
"month": "2026-11"
}
}티 매물
티 매물 등록
티 매물을 등록하고 바로 노출합니다. 월 게시 한도를 1건 차감합니다. 같은 externalId로 이미 등록한 매물이 있으면 새로 만들지 않고 그 번호와 duplicate: true를 돌려줍니다(한도 차감 없음).
POST
/
api
/
v1
/
manager
/
contents
티 매물 등록
curl --request POST \
--url https://golfjoin.co.kr/api/v1/manager/contents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"golfCourseId": 3,
"playDate": "2026-12-20",
"teeTime": "07:12",
"courseLabel": "레이크",
"playerCount": 1,
"joinCondition": "무관",
"price": 150000,
"deposit": 0,
"caddyType": "일반캐디",
"holeCount": 18,
"cartIncluded": true,
"mealIncluded": true,
"allowCall": true,
"contentText": "카트비 포함, 캐디피 별도입니다.",
"title": "<string>",
"externalId": "ext-20261220-0001"
}
'import requests
url = "https://golfjoin.co.kr/api/v1/manager/contents"
payload = {
"golfCourseId": 3,
"playDate": "2026-12-20",
"teeTime": "07:12",
"courseLabel": "레이크",
"playerCount": 1,
"joinCondition": "무관",
"price": 150000,
"deposit": 0,
"caddyType": "일반캐디",
"holeCount": 18,
"cartIncluded": True,
"mealIncluded": True,
"allowCall": True,
"contentText": "카트비 포함, 캐디피 별도입니다.",
"title": "<string>",
"externalId": "ext-20261220-0001"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
golfCourseId: 3,
playDate: '2026-12-20',
teeTime: '07:12',
courseLabel: '레이크',
playerCount: 1,
joinCondition: '무관',
price: 150000,
deposit: 0,
caddyType: '일반캐디',
holeCount: 18,
cartIncluded: true,
mealIncluded: true,
allowCall: true,
contentText: '카트비 포함, 캐디피 별도입니다.',
title: '<string>',
externalId: 'ext-20261220-0001'
})
};
fetch('https://golfjoin.co.kr/api/v1/manager/contents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://golfjoin.co.kr/api/v1/manager/contents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'golfCourseId' => 3,
'playDate' => '2026-12-20',
'teeTime' => '07:12',
'courseLabel' => '레이크',
'playerCount' => 1,
'joinCondition' => '무관',
'price' => 150000,
'deposit' => 0,
'caddyType' => '일반캐디',
'holeCount' => 18,
'cartIncluded' => true,
'mealIncluded' => true,
'allowCall' => true,
'contentText' => '카트비 포함, 캐디피 별도입니다.',
'title' => '<string>',
'externalId' => 'ext-20261220-0001'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://golfjoin.co.kr/api/v1/manager/contents"
payload := strings.NewReader("{\n \"golfCourseId\": 3,\n \"playDate\": \"2026-12-20\",\n \"teeTime\": \"07:12\",\n \"courseLabel\": \"레이크\",\n \"playerCount\": 1,\n \"joinCondition\": \"무관\",\n \"price\": 150000,\n \"deposit\": 0,\n \"caddyType\": \"일반캐디\",\n \"holeCount\": 18,\n \"cartIncluded\": true,\n \"mealIncluded\": true,\n \"allowCall\": true,\n \"contentText\": \"카트비 포함, 캐디피 별도입니다.\",\n \"title\": \"<string>\",\n \"externalId\": \"ext-20261220-0001\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://golfjoin.co.kr/api/v1/manager/contents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"golfCourseId\": 3,\n \"playDate\": \"2026-12-20\",\n \"teeTime\": \"07:12\",\n \"courseLabel\": \"레이크\",\n \"playerCount\": 1,\n \"joinCondition\": \"무관\",\n \"price\": 150000,\n \"deposit\": 0,\n \"caddyType\": \"일반캐디\",\n \"holeCount\": 18,\n \"cartIncluded\": true,\n \"mealIncluded\": true,\n \"allowCall\": true,\n \"contentText\": \"카트비 포함, 캐디피 별도입니다.\",\n \"title\": \"<string>\",\n \"externalId\": \"ext-20261220-0001\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://golfjoin.co.kr/api/v1/manager/contents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"golfCourseId\": 3,\n \"playDate\": \"2026-12-20\",\n \"teeTime\": \"07:12\",\n \"courseLabel\": \"레이크\",\n \"playerCount\": 1,\n \"joinCondition\": \"무관\",\n \"price\": 150000,\n \"deposit\": 0,\n \"caddyType\": \"일반캐디\",\n \"holeCount\": 18,\n \"cartIncluded\": true,\n \"mealIncluded\": true,\n \"allowCall\": true,\n \"contentText\": \"카트비 포함, 캐디피 별도입니다.\",\n \"title\": \"<string>\",\n \"externalId\": \"ext-20261220-0001\"\n}"
response = http.request(request)
puts response.read_body{
"id": 188201,
"usage": {
"plan": {
"id": 1,
"name": "베이직",
"monthlyPostLimit": 999999
},
"posts": {
"used": 12,
"limit": 999999
},
"month": "2026-11"
},
"duplicate": true
}{
"error": "invalid_input"
}{
"error": "forbidden"
}{
"error": "course_not_found"
}{
"error": "post_quota_exceeded",
"usage": {
"plan": {
"id": 1,
"name": "베이직",
"monthlyPostLimit": 999999
},
"posts": {
"used": 12,
"limit": 999999
},
"month": "2026-11"
}
}Authorizations
OAuth 로그인으로 받은 access token. 1시간 동안 유효합니다.
Body
application/json
골프장 ID
Example:
3
JOIN(조인) 또는 TRANSFER(양도)
Available options:
JOIN, TRANSFER 플레이 날짜 YYYY-MM-DD (KST)
Example:
"2026-12-20"
티업 시간 HH:MM, 24시간제 (KST)
Example:
"07:12"
코스 이름. 골프장 목록의 fields[].name. <, > 불가
Maximum string length:
30Example:
"레이크"
조인은 모집 인원, 양도는 팀 인원(1~4)
Example:
1
조인 조건: 무관, 부부커플, 남자, 여자. 양도는 null
Example:
"무관"
1인 그린피, 원 단위
Example:
150000
선입금, 원 단위. 0은 선입금 없음
Required range:
x >= 0Example:
0
캐디 조건: 일반캐디, 노캐디, 운전캐디, 새싹캐디
Example:
"일반캐디"
9, 18, 27, 36
Example:
18
카트비 포함 여부
식사 포함 여부
전화 문의 허용. 기본 true, false면 문자 문의만
매물 안내문(메모)
Example:
"카트비 포함, 캐디피 별도입니다."
제목. 비우면 '골프장명 날짜 시간' 자동. <, > 불가
Maximum string length:
100연동 프로그램 쪽 고유 번호. 같은 값으로 다시 등록하면 기존 매물 번호를 돌려줍니다.
Pattern:
^[\w.:-]{1,100}$Example:
"ext-20261220-0001"