---
title: Result objects
description: Understand identified products, candidate replacements, and batch results.
sidebar:
  icon: brackets
  hidden: true
---

For a single product, Research Agent returns one structured result at the top level. A batch returns the same result objects inside `researchResults`.

## Identified product

`productBeingReplaced` is Research Agent's interpretation of the query.

| Field | Type | Description |
| --- | --- | --- |
| `manufacturer` | `string` | Product manufacturer. |
| `model` | `string` | Manufacturer model number or SKU. |
| `description` | `string` | Concise product description. |
| `specifications` | `string` | Technical details such as capacity, dimensions, finish, electrical requirements, and features. |
| `imageUrl` | `string` | Direct URL to a product image. |

## Candidate replacements

Each item in `candidateReplacements` is a potential substitute.

| Field | Type | Description |
| --- | --- | --- |
| `manufacturer` | `string` | Candidate manufacturer. |
| `model` | `string` | Manufacturer model number or SKU. |
| `description` | `string` | Concise candidate description. |
| `specifications` | `string` | Technical details used to evaluate the candidate. |
| `msrp` | `number \| null` | Estimated manufacturer suggested retail price when available. |
| `matchReasoning` | `string` | Plain-language explanation of the match and relevant differences. |
| `availableOnSibi` | `boolean` | Whether the candidate was confirmed as orderable on SIBI. |
| `imageUrl` | `string` | Direct URL to a product image. |
| `sibiProductId` | `string \| null` | SIBI product ID when the candidate was found on SIBI. |
| `sibiManufacturer` | `string \| null` | Manufacturer value returned by the SIBI catalog. |
| `sibiPrice` | `number \| null` | Current price returned by SIBI. |
| `sibiCheckoutLink` | `string \| null` | SIBI checkout URL for the candidate. |

> **Nullable commerce fields**
>
> `msrp` and the `sibi*` fields can be `null`. Use `availableOnSibi` as the explicit availability signal and check that a checkout link is present before rendering an order action.

## Batch results

When one task researches multiple products, the response contains a `researchResults` array:

```json
{
  "status": "complete",
  "taskId": "<TASK_ID>",
  "taskUrl": "https://agents.sibi.ai/agents/<AGENT_ID>/tasks/<TASK_ID>",
  "researchResults": [
    {
      "label": "Kitchen refrigerator",
      "index": 1,
      "productBeingReplaced": {
        "manufacturer": "GE",
        "model": "GTS18GTHWW",
        "description": "Top-freezer refrigerator",
        "specifications": "...",
        "imageUrl": "https://example.com/source.jpg"
      },
      "candidateReplacements": []
    },
    {
      "label": "Laundry appliance",
      "index": 2,
      "error": "Could not identify the supplied model."
    }
  ]
}
```

`index` is the one-based position of the item in the original request. `label` identifies the item Research Agent processed. Results are ordered by `index` when an index is available.

A mixed batch can contain successful results and item-level errors while the task itself is `complete`. Check each entry for `error` before reading its product fields.

## Failed tasks

A task-level failure returns `status: "failed"` and a top-level `error`:

```json
{
  "status": "failed",
  "taskId": "<TASK_ID>",
  "taskUrl": "https://agents.sibi.ai/agents/<AGENT_ID>/tasks/<TASK_ID>",
  "error": "Task failed: <ERROR_MESSAGE>"
}
```
