---
title: "Read one opportunity"
method: GET
path: "/v1/opportunities/{id}"
tags: ["opportunities"]
---

# Read one opportunity

`GET /v1/opportunities/{id}`

## Request

- Base URL: `https://api.indraft.io`
- URL: `https://api.indraft.io/v1/opportunities/{id}`
- Auth: HTTP bearer

One deal by its id. Its stage carries a status derived from the stage's kind, so a deal cannot be open and won at the same time.

## Path parameters

- `id` string, required

## Response `200`

Success

- object
  - `opportunity` object, required
    - `id` string, required
    - `name` string, required
    - `pipelineId` string, required
    - `stageId` string, required
    - `status` 'open' | 'won' | 'lost', required
    - `amountMinor` integer, required
    - `currency` string, required
    - `probabilityBps` integer, required
    - `expectedCloseDate` string, required
    - `companyName` string
    - `lastActor` object
      - `id` string, required
      - `kind` 'human' | 'agent' | 'api_token' | 'system', required
      - `label` string, required
    - `ownerActorId` string, required
    - `externalProvider` string, required
    - `externalId` string, required
    - `version` integer, required
    - `createdAt` string, required
    - `updatedAt` string, required
    - `archivedAt` string, required
  - `derived` object[], required
    - `name` string, required
    - `value` integer, required
    - `unit` 'minor_units' | 'days', required
    - `currency` string, required
    - `inputs` object, required
  - `standing` object, required: Per field: which kind of claim is standing on it, who asserted it, and when. This is the provenance the product is sold on, keyed by column name so it lines up with `changes`, `held[]` and the unconfirmed queue. `confirmed` means a person checked it and outranks everything an agent can assert; `inferred` is the weakest and is what an agent's own conclusion should carry. A write whose claim ranks below what is here is held rather than applied.
  - `requestId` string, required

## Other responses

- `401`: No credential, or one that has been revoked.
- `403`: Authenticated, and this capability is not held.
- `404`: No such record, or it belongs to another workspace.
- `429`: Infrastructure protection tripped. This is not a product quota.
- `500`: A defect on our side. The hint says so, and carries an incident id.

---

[API](https://skmtc.dev/indraft/apis/indraft-api.md) · [All operations](https://skmtc.dev/indraft/apis/indraft-api/llms.txt) · [OpenAPI document](https://skmtc.dev/indraft/apis/indraft-api/revisions/d9bb05346d66?raw)
