---
title: "Cross-venue executable-edge signals"
method: GET
path: "/v1/signals/arbitrage"
tags: ["surface"]
---

# Cross-venue executable-edge signals

`GET /v1/signals/arbitrage`

§5.4 — cross-venue arb signals swept across EVERY live horizon's
latest snapshot (not just the default: real edge can live at a
non-default horizon, and the public "zero executable arb" claim is
measured against everything we serve). Each signal carries the
horizon_target where the edge was found. Populated rarely; empty array
is the honest, normal case.

No Age header: signals span horizons of different cycle ages —
freshness is per-signal via detected_at (+ horizon_target); a single
response-level age would misstate the stale ones. Age stays on
/surface and /expiries, whose responses are single snapshots.

## Query parameters

- `metal` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `403` — plan_gated — requires the Pro tier or higher.
- `404` — unknown_metal, or no snapshot ever written for this metal.
- `422` — metal query param required and must be xau|xag.

---

[API](https://skmtc.net/goldprice/apis/gold-api.md) · [All operations](https://skmtc.net/goldprice/apis/gold-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/goldprice/gold-api/revisions/5e6518098e6e/schema)
