curl --request PUT \
--url "https://rtb.example.com/v1/weights" \
--header "Authorization: <api-key>" \
--header "Content-Type: application/json" \
--data '{
"version": "w-1",
"weights": { "views": 1, "comments": 0, "up": 0, "downvote_share": 0 },
"note": "first trial: views only"
}'
import requests
response = requests.put(
"https://rtb.example.com/v1/weights",
headers={"Authorization": "<api-key>"},
json={
"version": "w-1",
"weights": {"views": 1, "comments": 0, "up": 0, "downvote_share": 0},
"note": "first trial: views only",
},
)
ack = response.json()
const response = await fetch("https://rtb.example.com/v1/weights", {
method: "PUT",
headers: { Authorization: "<api-key>", "Content-Type": "application/json" },
body: JSON.stringify({
version: "w-1",
weights: { views: 1, comments: 0, up: 0, downvote_share: 0 },
note: "first trial: views only",
}),
});
const ack = await response.json();
{
"version": "w-1",
"first_cycle_time": "2026-09-29T02:10:00+09:00"
}
{
"error": {
"code": "unprocessable",
"message": "weights are not acceptable",
"fields": [
{
"path": "weights",
"problem": "at least one of views, comments and up must be above 0"
}
]
}
}
Learning API
Set Weights
Sets the weights of the publish score. They apply from the next cycle.
PUT
/
v1
/
weights
curl --request PUT \
--url "https://rtb.example.com/v1/weights" \
--header "Authorization: <api-key>" \
--header "Content-Type: application/json" \
--data '{
"version": "w-1",
"weights": { "views": 1, "comments": 0, "up": 0, "downvote_share": 0 },
"note": "first trial: views only"
}'
import requests
response = requests.put(
"https://rtb.example.com/v1/weights",
headers={"Authorization": "<api-key>"},
json={
"version": "w-1",
"weights": {"views": 1, "comments": 0, "up": 0, "downvote_share": 0},
"note": "first trial: views only",
},
)
ack = response.json()
const response = await fetch("https://rtb.example.com/v1/weights", {
method: "PUT",
headers: { Authorization: "<api-key>", "Content-Type": "application/json" },
body: JSON.stringify({
version: "w-1",
weights: { views: 1, comments: 0, up: 0, downvote_share: 0 },
note: "first trial: views only",
}),
});
const ack = await response.json();
{
"version": "w-1",
"first_cycle_time": "2026-09-29T02:10:00+09:00"
}
{
"error": {
"code": "unprocessable",
"message": "weights are not acceptable",
"fields": [
{
"path": "weights",
"problem": "at least one of views, comments and up must be above 0"
}
]
}
}
Overview
Not in MVP scope. Until this call is available, the weights stay at the first-trial setting:
views = 1 and every other weight 0.w_v·P(views) + w_c·P(comments) + w_u·P(up) − w_d·downvote_share. DCinside chooses the weights and the version name. The new weights apply from the next cycle, and every cycle response carries the weights_version that produced its scores.The first trial sets
views to 1 and the rest to 0, so the score equals p_views. The example on this page is that setting.If the request fails validation, the previous weights stay in force and nothing changes.
hide and deletion are reserved for later heads and must be 0 or left out. At least one of views, comments and up must be above 0.Cadence
When you change them
There is no schedule. Send new weights whenever DCinside wants to change the ranking.
Takes effect next cycle
The response names the first cycle the weights apply to. Read the current and previous version with
GET /v1/weights.Request Attributes
string
required
Chosen by DCinside. Letters, digits,
., _ and -, up to 64 characters. Never reused: the same version with the same body is accepted again, and with a different body it returns 409.object
required
Publish-score weights. At least one of
views, comments and up must be above 0.Show properties
Show properties
number
required
Weight on
p_views.number
required
Weight on
p_comments.number
required
Weight on
p_up.number
required
Weight on the predicted down-vote share. It is subtracted, so send it as a positive number.
integer
Reserved for the later hide head. Must be 0 or left out.
integer
Reserved for the later deletion head. Must be 0 or left out.
string
Optional, up to 500 characters.
Response Attributes
string
required
The version now in force.
string
required
The first cycle the weights apply to, which is the next one.
curl --request PUT \
--url "https://rtb.example.com/v1/weights" \
--header "Authorization: <api-key>" \
--header "Content-Type: application/json" \
--data '{
"version": "w-1",
"weights": { "views": 1, "comments": 0, "up": 0, "downvote_share": 0 },
"note": "first trial: views only"
}'
import requests
response = requests.put(
"https://rtb.example.com/v1/weights",
headers={"Authorization": "<api-key>"},
json={
"version": "w-1",
"weights": {"views": 1, "comments": 0, "up": 0, "downvote_share": 0},
"note": "first trial: views only",
},
)
ack = response.json()
const response = await fetch("https://rtb.example.com/v1/weights", {
method: "PUT",
headers: { Authorization: "<api-key>", "Content-Type": "application/json" },
body: JSON.stringify({
version: "w-1",
weights: { views: 1, comments: 0, up: 0, downvote_share: 0 },
note: "first trial: views only",
}),
});
const ack = await response.json();
{
"version": "w-1",
"first_cycle_time": "2026-09-29T02:10:00+09:00"
}
{
"error": {
"code": "unprocessable",
"message": "weights are not acceptable",
"fields": [
{
"path": "weights",
"problem": "at least one of views, comments and up must be above 0"
}
]
}
}
Authorizations
The API key issued for the environment, sent as the whole header value. Two keys are valid during a rotation.
Body
application/json
Chosen by DCinside. Letters, digits, ., _ and -, up to 64 characters. Never reused: the same version with the same body is accepted again, and with a different body it returns 409.
Pattern:
^[A-Za-z0-9._-]{1,64}$Example:
"w-1"
Publish-score weights. At least one of views, comments and up must be above 0.
Show child attributes
Show child attributes
Optional, up to 500 characters.
Maximum string length:
500Example:
"first trial: views only"