Skip to main content
POST
Score a Cycle

Proposed rehearsal behavior

DCinside sends new candidates, engagement updates for all pending posts and removals. Surf proposes returning refreshed scores for every pending candidate in the response. Five minutes is the initial cadence proposed for review; it is not an agreed exclusive interval.
This endpoint reference describes the rehearsal proposal. The deployed implementation’s timing and model still need the changes listed in Rehearsal and acceptance.

Request guidance

extracted_at means entry into DCinside’s queue. It is the start of the first-score measurement, not the start of a separate wait. Candidate metadata and the exact required-field list remain part of the payload review. Use the field reference below for proposed types and examples. JSON may be plain or gzip-compressed. Current size and array protections are listed in Conventions; do not truncate the full queue to fit them.

Response and retry semantics

The proposed response contains post IDs, final scores, model and weight versions, scoring times and counts. Per-part predictions are optional. New cycles may change a pending post’s score; retries of the same completed cycle return its original result. The response deadline is to be agreed. A late response is skipped for that cycle, but its data must still be reconciled. Recover using GET /v1/scores/{cycle_id} or replay the original request. See the worker integration notes for retry budgeting. Examples below illustrate the proposed contract, not captured outputs from the current placeholder model.

Authorizations

Authorization
string
header
required

Proposed API key sent as the whole Authorization header value. Long-lived credential scope, handoff and rotation need confirmation. Per-endpoint scopes are not currently enforced.

Headers

Content-Encoding
enum<string>

Optional compression. Set to gzip only for a gzip-compressed body; plain JSON is also supported.

Available options:
gzip

Body

application/json

Proposed rehearsal wire shape. Required arrays and extra metadata need payload review. Current other-array and request-size protections are engineering limits, not client quotas.

cycle_id
string
required

Idempotency key: the cycle time in KST as YYYYMMDDTHHMM, for example 20260929T0205. The same id with the same body returns the stored response. The same id with a different body returns 409.

Pattern: ^\d{8}T\d{4}$
Example:

"20260929T0205"

cycle_time
string<date-time>
required

Scheduled cycle time with an explicit offset; normalize to KST for cycle_id. Five minutes is proposed initially within the stated 2–5-minute range. The current server enforces five-minute boundaries and rejects future cycles; changing cadence requires implementation support.

Pattern: ^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:[Zz]|[+-]\d{2}:\d{2})$
Example:

"2026-09-29T02:05:00+09:00"

candidates
object[]
required

All posts that became candidates since the last successful call. Each post is sent once. May be empty. There is no candidate-count cap; the complete JSON body must fit within 16 MiB after decompression. Pending candidates are retained across cycles until removed.

engagement
object[]
required

One row for every pending candidate, every cycle. Pending means sent in this or an earlier call and not yet in removals. The current 5,000-row cap is an engineering protection, not an agreed business quota; validate it against full-queue delivery.

Maximum array length: 5000
candidate_scores
object[]
required

Available admin snapshots, when present. Existing wire shape requires the array but permits []. Confirm feature mapping and requiredness with the client and delivered model. The current 5,000-row cap is an engineering protection, not an agreed business quota; validate it against full-queue delivery.

Maximum array length: 5000
removals
object[]
required

Posts leaving the pending pool since the last successful call. May be empty. The current 5,000-row cap is an engineering protection, not an agreed business quota; validate it against full-queue delivery.

Maximum array length: 5000

Response

The scores for this cycle.

cycle_id
string
required

Echoed from the request.

Pattern: ^\d{8}T\d{4}$
Example:

"20260929T0205"

cycle_time
string<date-time>
required

Echoed from the request.

Pattern: ^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:[Zz]|[+-]\d{2}:\d{2})$
Example:

"2026-09-29T02:05:00+09:00"

received_at
string<date-time>
required

Our clock when the call arrived.

Pattern: ^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:[Zz]|[+-]\d{2}:\d{2})$
Example:

"2026-09-29T02:05:03+09:00"

scored_at
string<date-time>
required

Proposed meaning: actual scoring completion time. The current handler records its pre-processing time here; fix and verify before using this field for latency measurement. Measure client receipt time separately.

Pattern: ^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:[Zz]|[+-]\d{2}:\d{2})$
Example:

"2026-09-29T02:05:09+09:00"

model_version
string
required

Identity of the actual model that produced the results. The current transport adapter uses a Model-0924-like label; that label alone is not proof the delivered artifact is loaded.

Example:

"m0924-weight0"

weights_version
string
required

Weights that actually produced this cycle's scores. Verify that refreshed scores and their version match; do not relabel cached scores.

Example:

"w-1"

counts
object
required

Row counts for this cycle.

missing_feature_share
number
required

Implementation-specific diagnostic. The current adapter counts missing request counters, not missing values across a verified 62-feature model. It is not a rehearsal acceptance metric.

Required range: 0 <= x <= 1
Example:

0.11

warnings
string[]
required

Implementation warnings. Unknown fields are not guaranteed to be listed. An empty list does not prove model or data readiness.

Example:
results
object[]
required

One result per pending candidate under the proposed refresh policy. Scores may change across new cycles; replay of a completed cycle is unchanged. Removed posts are absent from subsequent cycles.