> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gpuoutlet.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Radar

> Browse whole-node listings, send inquiries, and propose your own — with a key.

Everything the [Radar](/concepts/radar) page does, an API key can do: read the
nodes, send an inquiry, propose a node of your own, and manage that proposal.

<Note>
  Radar sells **whole physical nodes**, booked by inquiry — not instances you
  start yourself. If you want a machine running in the next minute, that is
  [`/offers`](/api/offers) and [`/rentals`](/api/renting).
</Note>

## Scopes

<ParamField path="radar:read" type="scope">
  Read nodes and your own submissions.
</ParamField>

<ParamField path="radar:write" type="scope">
  Send inquiries and propose nodes. Spends nothing — but a proposal becomes text
  published under our name once a reviewer approves it.
</ParamField>

Scopes are fixed when a key is created. A key minted before these existed does
not carry them; mint a new one rather than expecting an old key to gain access.

## Browsing nodes

<CodeGroup>
  ```bash List nodes theme={null}
  curl https://api.gpuoutlet.ai/v1/radar/nodes \
    -H "Authorization: Bearer $GPUOUTLET_API_KEY"
  ```

  ```bash One node theme={null}
  curl https://api.gpuoutlet.ai/v1/radar/nodes/{id} \
    -H "Authorization: Bearer $GPUOUTLET_API_KEY"
  ```
</CodeGroup>

You see exactly what the website shows a signed-in buyer: nodes that are
approved and currently on offer. A node that is hidden, withdrawn or still
awaiting review answers `404` — the same answer as an id that never existed,
because whether an id exists is itself information.

There is no cursor here. Radar is a small curated catalog, not the live offer
table, and inventing pagination for a few dozen rows would commit us to it
forever.

<ResponseField name="quantity_available" type="integer" required>
  How many **nodes** are on offer. Never a card count — `gpu_count` is what one
  node holds, so the total silicon is the two multiplied.
</ResponseField>

<ResponseField name="price_per_hour_cents" type="integer | null">
  Per GPU-hour, matching the catalog's unit. `null` while a rate is still being
  agreed: a node gets listed before its price settles.
</ResponseField>

<ResponseField name="duration_min / duration_max" type="string | null">
  The bookable term. `duration_max` may be absent — some nodes are open-ended.
</ResponseField>

We deliberately do not publish who proposed a node. Radar is capacity our team
verified, and that is what the listing represents.

## Sending an inquiry

```bash theme={null}
curl -X POST https://api.gpuoutlet.ai/v1/radar/nodes/{id}/inquiries \
  -H "Authorization: Bearer $GPUOUTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_name": "Ada Lovelace",
    "contact_email": "ada@example.com",
    "desired_duration": "6-12 months, flexible on start",
    "comments": "Two of these if they can ship together."
  }'
```

`desired_duration` is free text on purpose. Terms on this side are negotiated,
not picked from a menu, and "6-12 months, flexible on start" is a real answer
that no enum holds.

An inquiry is a lead, not a booking: nothing is reserved and nothing is charged.
Our team confirms the capacity is still there and takes it from your email.

## Proposing a node

```bash theme={null}
curl -X POST https://api.gpuoutlet.ai/v1/radar/submissions \
  -H "Authorization: Bearer $GPUOUTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "8x NVIDIA B300 SXM6",
    "gpu_model": "NVIDIA B300 SXM6",
    "gpu_count": 8,
    "quantity_available": 4,
    "interconnect": "InfiniBand NDR 400G",
    "region": "Frankfurt",
    "price_per_hour_cents": 640
  }'
```

Only `title` is required. Propose a node with whatever you have to hand; the
rest is filled in during review.

Your proposal lands as `pending` and no buyer sees it until a reviewer approves
it. There is no field for authorship or review state — those come from your key
and from moderation, so sending them changes nothing.

### Reading what became of it

```bash theme={null}
curl https://api.gpuoutlet.ai/v1/radar/submissions \
  -H "Authorization: Bearer $GPUOUTLET_API_KEY"
```

<ResponseField name="status" type="string" required>
  `pending`, `approved` or `rejected`.
</ResponseField>

<ResponseField name="rejection_reason" type="string | null">
  Why it was turned down, written for you to act on.
</ResponseField>

<ResponseField name="listed" type="boolean" required>
  Whether buyers can see it **right now**. Not the same as `status`: an approved
  node you have withdrawn is `approved` and not `listed`. Check this one when
  you want to know if the node is on the grid.
</ResponseField>

### Managing it

<CodeGroup>
  ```bash Withdraw theme={null}
  curl -X POST https://api.gpuoutlet.ai/v1/radar/submissions/{id}/withdraw \
    -H "Authorization: Bearer $GPUOUTLET_API_KEY"
  ```

  ```bash Put back theme={null}
  curl -X POST https://api.gpuoutlet.ai/v1/radar/submissions/{id}/republish \
    -H "Authorization: Bearer $GPUOUTLET_API_KEY"
  ```

  ```bash Edit theme={null}
  curl -X PUT https://api.gpuoutlet.ai/v1/radar/submissions/{id} \
    -H "Authorization: Bearer $GPUOUTLET_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "title": "8x NVIDIA B300 SXM6", "quantity_available": 2 }'
  ```
</CodeGroup>

The two are not the same operation, and the difference matters if you automate
this:

* **Withdrawing is immediate** and keeps the approval. Hardware sold elsewhere
  must stop being advertised now, so this does not wait for anyone. Putting it
  back needs no second review.
* **Editing sends it back for review**, and the node leaves the grid until it is
  approved again. Approval describes specific text; once the text changes, the
  approval no longer describes it.

So a script that rewrites a listing to change one number takes it off the grid.
If you only need to stop selling for a while, withdraw instead.

<Card title="Radar, explained" icon="satellite-dish" href="/concepts/radar">
  What Radar is and how it differs from the self-serve catalog.
</Card>
