Skip to content

Pull every weather source for a point and date now

POST
/conditions/pulls
curl --request POST \
--url https://quikstik-core.fly.dev/conditions/pulls \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example' \
--header 'x-tenant-id: 2489E9AD-2EE2-8E00-8EC9-32D5F69181C0' \
--data '{ "point_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "date": "2026-04-15" }'

Pulls NWS and the Open-Meteo NBM / ECMWF models for {point_id, date?} (date is the local date at the point; absent = today there), stores each result raw, and re-scores that day’s departures at the point. Each source is independent: a failed source is reported in pulls[] and simply absent from the blend. Requires x-idempotency-key; a replay returns the stored pulls and re-tries only sources that had failed. 502 no_source_available when every source failed.

x-tenant-id
required
string format: uuid

Tenant identifier (UUID).

Authn/authz semantics are intentionally TBD for this contract slice; this header exists to keep the contract explicitly multi-tenant from day 0.

Idempotency-Key
required
string
>= 1 characters

Idempotency key for the command envelope. A retry with the same key is a no-op.

Media typeapplication/json
object
point_id
required
string format: uuid
date

Local date at the point; absent = today there.

string format: date

Example generated

{
"point_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"date": "2026-04-15"
}

Per-source results and the re-score summary.

Media typeapplication/json
object
reason

no_source_available on 502, else null.

string
nullable
point_id
required
string format: uuid
date
required
string format: date
pulls
required
Array<object>
object
source
required

A declared weather source. openmeteo_meteoblue and accuweather are declared but have no adapter yet; they never appear in a pull.

string
Allowed values: nws openmeteo_nbm openmeteo_ecmwf openmeteo_meteoblue accuweather
ok
required
boolean
pull_id

Present when ok.

string format: uuid
error

Present when not ok; carries no URL or secret.

string
score

Re-score of that day’s departures at the point; null when no source landed.

object
scored
integer
first_states
integer
state_changes
integer
unplaced
integer
no_data
integer
bad_time
integer

Example

{
"pulls": [
{
"source": "nws"
}
]
}

idempotency_key_required.

Missing or invalid session bearer token

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}

The session’s effect authority does not cover this operation

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}

point_not_found.

invalid_body, invalid_date or unknown_time_zone.

Every source failed (no_source_available); the body carries the per-source errors.

Media typeapplication/json
object
reason

no_source_available on 502, else null.

string
nullable
point_id
required
string format: uuid
date
required
string format: date
pulls
required
Array<object>
object
source
required

A declared weather source. openmeteo_meteoblue and accuweather are declared but have no adapter yet; they never appear in a pull.

string
Allowed values: nws openmeteo_nbm openmeteo_ecmwf openmeteo_meteoblue accuweather
ok
required
boolean
pull_id

Present when ok.

string format: uuid
error

Present when not ok; carries no URL or secret.

string
score

Re-score of that day’s departures at the point; null when no source landed.

object
scored
integer
first_states
integer
state_changes
integer
unplaced
integer
no_data
integer
bad_time
integer

Example

{
"pulls": [
{
"source": "nws"
}
]
}

No durable backend is wired for this operation (fail-closed)

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}