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

# Vendor API

> Read and manage your team's listings, inventory, opportunities, estimations, and earnings over HTTP.

export const Endpoint = ({method, path, note}) => <span className="api-sig">
    <span className="api-method-col">
      <span className={`api-method api-${method.toLowerCase()}`}>{method}</span>
    </span>
    <span className="api-path">
      {path.split(/(\{[^}]+\})/).map((part, i) => part.startsWith("{") ? <span className="api-param" key={i}>
            {part}
          </span> : part)}
    </span>
    {note && <span className="api-note">{note}</span>}
  </span>;

The **vendor API** is the HTTP surface for agents and scripts working on a vendor team: read the
catalog, your listings and their quality runs, the opportunities you can respond to, your sales
and earnings, and estimations, and manage inventory. Publishing and moving money stay in the web
app.

Base URL `https://api.datavendor.ai`, every route under `/v2`, authenticated with a team API key.
Keys, conventions, and errors are shared with the buyer API and described on
[Using the API](/overview/api). The
[OpenAPI document](https://api.datavendor.ai/vendor/openapi.json) behind this page is served with
an [interactive reference](https://api.datavendor.ai/vendor/docs). A first call, returning your
team's listings:

```bash theme={"dark"}
curl https://api.datavendor.ai/v2/listings \
  -H "Authorization: Bearer $HUD_API_KEY"
```

<div className="page-nav">
  **Orientation** [Objects](#objects) · [Using the API](/overview/api)

  **Endpoint reference** [Catalog](#catalog) · [Selling](#selling) · [Inventory](#inventory) · [Account](#account)
</div>

## Objects

| Object | What it is |
| - | - |
| **Listing** | Your offer of assets with pricing and delivery terms. Published listings form the catalog. |
| **Asset** | One unit of supply in your inventory: a codebase, a Raw data archive, or an imported task. Codebases and raw data may be proposed before their artifacts arrive; tasks are imported platform versions. |
| **Group** | A folder for inventory. Every team has a default group. |
| **Opportunity** | A buyer's listing request your team can respond to. Historical project opportunities and your bids on them have separate read-only routes. |
| **Estimation** | A dated, advisory quote for one source (a repository today) as one asset type, visible to the whole team. |
| **Wallet** | Your team's credits balance and earnings. |

The same reads are available as [MCP tools](/sell/api/mcp) for coding agents.

<div className="section-eyebrow">Endpoint reference</div>

## Catalog

The same view of published listings a buyer has, including each listing's vendor organization
(`team_name`). A vendor-only team is behind the [browse gate](/overview/glossary#browse-gate) until it
has enough live listings of its own: browse then serves only the first unfiltered page, and
`GET /v2/listings/browse/access` reports your progress.

### Browse

Browse is filtered and sorted server-side. The first page carries tab counts and filter facets;
follow `next_cursor` for the rest. Vocabularies for the filters come from the
[taxonomy](#taxonomy) endpoints.

<div className="api-endpoints">
  <AccordionGroup>
    <Accordion title={<Endpoint method="GET" path="/v2/listings/browse" note="Search and filter the published catalog." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `query` | query | `string?` | | |
      | `tags` | query | `string[]?` | | |
      | `tag_slugs` | query | `string[]?` | | |
      | `asset_types` | query | `string[]?` | | |
      | `owned` | query | `boolean` | | Defaults to `False`. |
      | `verified_only` | query | `boolean` | | When true, only DV quality certified listings. Defaults to `False`. |
      | `min_price` | query | `number?` | | Buy-now price floor. |
      | `max_price` | query | `number?` | | Buy-now price ceiling. |
      | `has_active_bids` | query | `boolean` | | Only listings with at least one submitted bid. Defaults to `False`. |
      | `sample_available` | query | `boolean?` | | True: only listings offering a sample; False: only listings without; omit: any. |
      | `min_sample_price` | query | `number?` | | Sample price floor (implies sample available). |
      | `max_sample_price` | query | `number?` | | Sample price ceiling (implies sample available). |
      | `min_vendor_tier` | query | `integer?` | | |
      | `vendor_tiers` | query | `integer[]?` | | Exact seller vendor tiers. |
      | `min_tasks` | query | `integer?` | | Minimum HUD taskset plus Harbor bundle task count. |
      | `max_tasks` | query | `integer?` | | Maximum HUD taskset plus Harbor bundle task count. |
      | `min_price_per_task` | query | `number?` | | Floor on buy-now price divided by task count; listings without tasks never match. |
      | `max_price_per_task` | query | `number?` | | Ceiling on buy-now price divided by task count; listings without tasks never match. |
      | `min_loc` | query | `integer?` | | |
      | `max_loc` | query | `integer?` | | |
      | `min_zip_files` | query | `integer?` | | |
      | `max_zip_files` | query | `integer?` | | |
      | `min_zip_size_gb` | query | `number?` | | |
      | `max_zip_size_gb` | query | `number?` | | |
      | `min_codebases` | query | `integer?` | | Minimum attached codebases. |
      | `max_codebases` | query | `integer?` | | Maximum attached codebases. |
      | `min_tasksets` | query | `integer?` | | Minimum attached HUD tasksets plus Harbor bundles. |
      | `max_tasksets` | query | `integer?` | | Maximum attached HUD tasksets plus Harbor bundles. |
      | `min_environments` | query | `integer?` | | Minimum attached environments. |
      | `max_environments` | query | `integer?` | | Maximum attached environments. |
      | `min_robotics_datasets` | query | `integer?` | | Minimum attached robotics datasets. |
      | `max_robotics_datasets` | query | `integer?` | | Maximum attached robotics datasets. |
      | `min_raw_data` | query | `integer?` | | Minimum attached Raw data zips. |
      | `max_raw_data` | query | `integer?` | | Maximum attached Raw data zips. |
      | `languages` | query | `string[]?` | | Codebase languages. |
      | `rare_languages_only` | query | `boolean` | | Only listings whose codebases are at most 40% JavaScript, TypeScript, and Python combined, by language bytes; listings without a language byte breakdown never match. Defaults to `False`. |
      | `file_extensions` | query | `string[]?` | | Raw data file extensions, lowercase without the dot. |
      | `robotics_formats` | query | `string[]?` | | Declared robotics dataset formats. |
      | `capabilities` | query | `string[]?` | | Environment capabilities. |
      | `sort` | query | `recommended \| recent \| price_low \| price_high` | | recommended prefers DV quality certified, then recency; with no filters it leads with the admin-featured listings in their curated order. Defaults to `recommended`. |
      | `limit` | query | `integer` | | Defaults to `24`. |
      | `cursor` | query | `string?` | | Keyset position from the previous page's next\_cursor; omit for the first page (which also carries counts and facets). |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/browse \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "items": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "title": "string",
            "review_status": "string",
            "catalog_status": "string",
            "created_at": "2026-07-26T17:04:11Z",
            "archived_at": "2026-07-26T17:04:11Z",
            "asset_types": [
              "string"
            ],
            "assets": [],
            "carries_retired_sku": false,
            "catalog_scale": {
              "asset_counts": {},
              "languages": [],
              "loc": 0,
              "task_count": 0,
              "zip_file_count": 0,
              "zip_size_bytes": 0
            },
            "deprecation": {
              "types": [],
              "retires_at": "2026-07-26T17:04:11Z"
            },
            "domain_tags": [
              "string"
            ]
          }
        ],
        "limit": 0,
        "counts": {
          "all": 0,
          "owned": 0
        },
        "facets": {
          "tags": {},
          "asset_types": {},
          "capabilities": {},
          "file_extensions": {},
          "languages": {},
          "lifecycle_stages": {},
          "robotics_formats": {},
          "tag_slugs": {}
        },
        "locked": false,
        "next_cursor": "string"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/listings/browse/access" note="Whether your team can browse, and progress toward the vendor browse gate." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/browse/access \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "published_count": 0,
        "required_count": 0,
        "unlocked": false
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/listings/browse/by-ids" note="Resolve specific published listings; missing ids are no longer published." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `ids` | query | `string[]?` | | |
      | `sort` | query | `recommended \| recent \| price_low \| price_high` | | Defaults to `recent`. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/browse/by-ids \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "listings": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "title": "string",
            "review_status": "string",
            "catalog_status": "string",
            "created_at": "2026-07-26T17:04:11Z",
            "archived_at": "2026-07-26T17:04:11Z",
            "asset_types": [
              "string"
            ],
            "assets": [],
            "carries_retired_sku": false,
            "catalog_scale": {
              "asset_counts": {},
              "languages": [],
              "loc": 0,
              "task_count": 0,
              "zip_file_count": 0,
              "zip_size_bytes": 0
            },
            "deprecation": {
              "types": [],
              "retires_at": "2026-07-26T17:04:11Z"
            },
            "domain_tags": [
              "string"
            ]
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/listings/browse/{listing_id}" note="The buyer-facing record: pricing, inventory, delivery, terms." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `listing_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/browse/<listing_id> \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "title": "string",
        "review_status": "string",
        "catalog_status": "string",
        "created_at": "2026-07-26T17:04:11Z",
        "archived_at": "2026-07-26T17:04:11Z",
        "asset_types": [
          "string"
        ],
        "assets": [],
        "available_from": "string",
        "bundle_download_url": "string",
        "bundle_manifest": {},
        "bundle_url": "string"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/listings/browse/{listing_id}/quality" note="The evidence behind the DV quality badge, buyer-redacted." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `listing_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/browse/<listing_id>/quality \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "certified": false,
        "certified_at": "2026-07-26T17:04:11Z",
        "checks": [],
        "environment_checks_passed": 0,
        "environment_checks_total": 0
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/listings/browse/{listing_id}/tasksets/{taskset_id}" note="Preview one of a listing's tasksets." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `listing_id` | path | `uuid` | yes | |
      | `taskset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/browse/<listing_id>/tasksets/<taskset_id> \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "name": "string",
        "created_at": "2026-07-26T17:04:11Z",
        "column_order": [
          "string"
        ],
        "columns": {}
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/listings/browse/{listing_id}/tasksets/{taskset_id}/tasks" note="First-page task preview for a listing's taskset." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `listing_id` | path | `uuid` | yes | |
      | `taskset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/browse/<listing_id>/tasksets/<taskset_id>/tasks \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "tasks": [
          {
            "task": {
              "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "taskset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "name": "string",
              "created_at": "2026-07-26T17:04:11Z",
              "activity_log": [],
              "assignee_user_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "binarized": false,
              "column_values": {},
              "description": "string",
              "external_id": "string",
              "latest_version_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "tags": []
            },
            "version": {
              "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "task_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "version": 0,
              "created_at": "2026-07-26T17:04:11Z",
              "agent_config": {},
              "brief": {},
              "build_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "current_state": "draft",
              "environment": {},
              "internally_reviewed_at": "2026-07-26T17:04:11Z",
              "internally_reviewed_by": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "lifecycle_stage": "string"
            }
          }
        ],
        "task_stats": [
          {
            "task_version_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "traces": [
              {}
            ],
            "last_run_build_version": 0,
            "latest_env_build_version": 0
          }
        ],
        "derived_column_values": {}
      }
      ```
    </Accordion>
  </AccordionGroup>
</div>

### Taxonomy

The vocabularies vendors classify with and buyers filter by. Pass the returned values into browse
filters; an unknown value matches nothing rather than erroring.

<div className="api-endpoints">
  <AccordionGroup>
    <Accordion title={<Endpoint method="GET" path="/v2/domains" note="The marketplace domain taxonomy." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/domains \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "domains": [
          {
            "slug": "string",
            "label": "string"
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/inventory-tags" note="Tags vendors may apply and buyers may filter by." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/inventory-tags \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "inventory_tags": [
          {
            "slug": "string",
            "label": "string",
            "description": "string",
            "category": "string"
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/content-tags" note="Content tags a vendor may declare on an Others asset." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/content-tags \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "content_tags": [
          {
            "slug": "string",
            "label": "string"
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/asset-types" note="Enabled asset types a vendor may compose from." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/asset-types \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "asset_types": [
          {
            "slug": "string",
            "label": "string",
            "is_enabled": false,
            "supports_proposals": false,
            "deprecation": {
              "deprecated_at": "2026-07-26T17:04:11Z",
              "retires_at": "2026-07-26T17:04:11Z",
              "retired": false,
              "accepts_new_listings": false,
              "message": "string"
            }
          }
        ],
        "deprecated_asset_types": [
          {
            "slug": "string",
            "label": "string",
            "is_enabled": false,
            "deprecation": {
              "deprecated_at": "2026-07-26T17:04:11Z",
              "retires_at": "2026-07-26T17:04:11Z",
              "retired": false,
              "accepts_new_listings": false,
              "message": "string"
            },
            "listing_kinds": [
              "string"
            ]
          }
        ]
      }
      ```
    </Accordion>
  </AccordionGroup>
</div>

## Selling

The key-holding team's vendor side: its listings, their quality runs, sales, and the open
listing requests it can respond to.

### Listings

Listings are composed, submitted, and published in the web app. The API reads them and manages
which codebase assets a listing carries.

<div className="api-endpoints">
  <AccordionGroup>
    <Accordion title={<Endpoint method="GET" path="/v2/listings" note="Your team's listings, filtered and paged." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `workspace_view` | query | `all \| drafts \| submitted \| live \| archived` | | Sidebar workspace slice: all, drafts, submitted, live, archived. Defaults to `all`. |
      | `lifecycle_stages` | query | `string[]?` | | Vendor-facing lifecycle stages (Draft, Review, Ready, Active). |
      | `query` | query | `string?` | | |
      | `tags` | query | `string[]?` | | |
      | `asset_types` | query | `string[]?` | | |
      | `verified_only` | query | `boolean` | | Defaults to `False`. |
      | `min_price` | query | `number?` | | |
      | `max_price` | query | `number?` | | |
      | `has_active_bids` | query | `boolean` | | Only listings with at least one submitted bid. Defaults to `False`. |
      | `no_assets` | query | `boolean` | | Only listings with no attached assets. Defaults to `False`. |
      | `sample_available` | query | `boolean?` | | |
      | `min_sample_price` | query | `number?` | | |
      | `max_sample_price` | query | `number?` | | |
      | `min_tasks` | query | `integer?` | | |
      | `max_tasks` | query | `integer?` | | |
      | `min_loc` | query | `integer?` | | |
      | `max_loc` | query | `integer?` | | |
      | `min_zip_files` | query | `integer?` | | |
      | `max_zip_files` | query | `integer?` | | |
      | `min_zip_size_gb` | query | `number?` | | |
      | `max_zip_size_gb` | query | `number?` | | |
      | `sort` | query | `recommended \| recent \| price_low \| price_high` | | Defaults to `recent`. |
      | `limit` | query | `integer` | | Defaults to `24`. |
      | `offset` | query | `integer` | | Defaults to `0`. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "items": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "title": "string",
            "review_status": "string",
            "catalog_status": "string",
            "created_at": "2026-07-26T17:04:11Z",
            "archived_at": "2026-07-26T17:04:11Z",
            "asset_types": [
              "string"
            ],
            "assets": [],
            "carries_retired_sku": false,
            "catalog_scale": {
              "asset_counts": {},
              "languages": [],
              "loc": 0,
              "task_count": 0,
              "zip_file_count": 0,
              "zip_size_bytes": 0
            },
            "deprecation": {
              "types": [],
              "retires_at": "2026-07-26T17:04:11Z"
            },
            "domain_tags": [
              "string"
            ]
          }
        ],
        "limit": 0,
        "offset": 0,
        "counts": {
          "all": 0,
          "owned": 0
        },
        "facets": {
          "tags": {},
          "asset_types": {},
          "capabilities": {},
          "file_extensions": {},
          "languages": {},
          "lifecycle_stages": {},
          "robotics_formats": {},
          "tag_slugs": {}
        },
        "summary": {
          "active": 0,
          "in_review": 0,
          "drafts": 0,
          "listed_value": 0.0
        }
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/listings/{listing_id}" note="One listing your team owns." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `listing_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/<listing_id> \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "title": "string",
        "review_status": "string",
        "catalog_status": "string",
        "created_at": "2026-07-26T17:04:11Z",
        "archived_at": "2026-07-26T17:04:11Z",
        "asset_types": [
          "string"
        ],
        "assets": [],
        "available_from": "string",
        "bundle_download_url": "string",
        "bundle_manifest": {},
        "bundle_url": "string"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/listings/{listing_id}/history" note="Lifecycle events for a listing, newest first." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `listing_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/<listing_id>/history \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "events": [
          {
            "event_type": "string",
            "actor": "team",
            "occurred_at": "2026-07-26T17:04:11Z",
            "from_status": "string",
            "to_status": "string"
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/listings/{listing_id}/assets" note="The assets composed into a listing." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `listing_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/<listing_id>/assets \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "assets": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "listable": false,
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "title": "string",
            "domain_tags": [
              "string"
            ],
            "created_at": "2026-07-26T17:04:11Z",
            "sku": "string",
            "stage": "incomplete",
            "data": {
              "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "channel": "github",
              "archive_status": "pending",
              "analysis_status": "pending",
              "attached_at": "2026-07-26T17:04:11Z",
              "analysis_error": "string",
              "analyzed_at": "2026-07-26T17:04:11Z",
              "archive_bytes": 0,
              "archive_error": "string",
              "commit_sha": "string",
              "manifest_url": "string",
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            },
            "deprecation": {
              "deprecated_at": "2026-07-26T17:04:11Z",
              "retires_at": "2026-07-26T17:04:11Z",
              "retired": false,
              "accepts_new_listings": false,
              "message": "string"
            },
            "description": "string",
            "environment": {
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "extra_columns": {},
              "build_version": 0,
              "built_at": "2026-07-26T17:04:11Z",
              "capabilities": [],
              "task_count": 0
            }
          }
        ],
        "total": 0
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="POST" path="/v2/listings/{listing_id}/assets" note="Add codebase assets with data objects to a listing." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `listing_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/<listing_id>/assets \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X POST \
        -H "Content-Type: application/json" \
        -d '{
          "asset_ids": [
            "3fa85f64-5717-4562-b3fc-2c963f66afa6"
          ],
          "matches": [
            {
              "deprecated": false,
              "exclude_ids": [
                "3fa85f64-5717-4562-b3fc-2c963f66afa6"
              ],
              "filters": [
                "string"
              ],
              "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "sku": "string"
            }
          ]
        }'
      ```

      ```json Response 201 theme={"dark"}
      {
        "assets": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "listable": false,
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "title": "string",
            "domain_tags": [
              "string"
            ],
            "created_at": "2026-07-26T17:04:11Z",
            "sku": "string",
            "stage": "incomplete",
            "data": {
              "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "channel": "github",
              "archive_status": "pending",
              "analysis_status": "pending",
              "attached_at": "2026-07-26T17:04:11Z",
              "analysis_error": "string",
              "analyzed_at": "2026-07-26T17:04:11Z",
              "archive_bytes": 0,
              "archive_error": "string",
              "commit_sha": "string",
              "manifest_url": "string",
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            },
            "deprecation": {
              "deprecated_at": "2026-07-26T17:04:11Z",
              "retires_at": "2026-07-26T17:04:11Z",
              "retired": false,
              "accepts_new_listings": false,
              "message": "string"
            },
            "description": "string",
            "environment": {
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "extra_columns": {},
              "build_version": 0,
              "built_at": "2026-07-26T17:04:11Z",
              "capabilities": [],
              "task_count": 0
            }
          }
        ],
        "total": 0,
        "attached": 0,
        "skipped": [
          {
            "reason": "not_listable",
            "count": 0
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="DELETE" path="/v2/listings/{listing_id}/assets/{asset_id}" note="Remove an asset from a listing." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `listing_id` | path | `uuid` | yes | |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/<listing_id>/assets/<asset_id> \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X DELETE
      ```

      Returns `204` with an empty body.
    </Accordion>
  </AccordionGroup>
</div>

### Quality and sales

<div className="api-endpoints">
  <AccordionGroup>
    <Accordion title={<Endpoint method="GET" path="/v2/listings/{listing_id}/qc" note="The listing's latest quality-check run, per asset." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `listing_id` | path | `uuid` | yes | |
      | `task_rows` | query | `failing \| all` | | Task-scope rows to include: failing (default) or all. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/<listing_id>/qc \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "listing_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "listing_status": "string",
        "dv_quality_certified": false,
        "latest_run": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "run_number": 0,
          "status": "string",
          "mandatory_passed": false,
          "review_feedback": "string",
          "error": "string",
          "triggered_by": "string",
          "charge_total": 0.0,
          "started_at": "2026-07-26T17:04:11Z",
          "completed_at": "2026-07-26T17:04:11Z",
          "checks": [
            {
              "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "scope": "string",
              "asset_type": "string",
              "asset_name": "string",
              "asset_reference": "string",
              "listing_asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "kind": "string",
              "key": "string",
              "label": "string",
              "mandatory": false,
              "informational": false,
              "status": "string"
            }
          ],
          "task_summaries": [
            {
              "check_key": "string",
              "label": "string",
              "listing_asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "asset_name": "string",
              "queued": 0,
              "running": 0,
              "passed": 0,
              "failed": 0,
              "error": 0,
              "total": 0
            }
          ]
        },
        "hub_ingest": [
          {
            "dataset_id": "string",
            "status": "pending",
            "bytes_copied": 0,
            "error": "string"
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/listings/qc-reports" note="Every quality-check run across your listings, with credits charged." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `limit` | query | `integer` | | Defaults to `50`. |
      | `offset` | query | `integer` | | Defaults to `0`. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/qc-reports \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "reports": [
          {
            "run_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "listing_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "listing_title": "string",
            "run_number": 0,
            "status": "string",
            "mandatory_passed": false,
            "environment_checks_passed": 0,
            "environment_checks_total": 0,
            "charge_total": 0.0,
            "started_at": "2026-07-26T17:04:11Z",
            "completed_at": "2026-07-26T17:04:11Z"
          }
        ],
        "total": 0
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/listings/sales" note="Your settled sales and lifetime earnings. Buyer identity is never included." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/listings/sales \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "sales": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "listing_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "listing_title": "string",
            "purchase_kind": "string",
            "amount": 0.0,
            "currency": "string",
            "paid_at": "2026-07-26T17:04:11Z"
          }
        ],
        "total_earnings": 0.0,
        "currency": "usd"
      }
      ```
    </Accordion>
  </AccordionGroup>
</div>

### Opportunities

Open listing requests your team can view, and read-only project bid history.
Project opportunities and bids cannot be created or changed. Listing submissions
remain available in the web app.

<div className="api-endpoints">
  <AccordionGroup>
    <Accordion title={<Endpoint method="GET" path="/v2/opportunities" note="Published open opportunities your team can view." />}>
      | Parameter | In | Type | Required | Description | | | | |
      | - | - | - | - | - | - | - | - | - |
      | `query` | query | `string?` | | Text search across title, overview, tags, buyer. | | | | |
      | `tags` | query | `string[]?` | | Domain tags (any-of). | | | | |
      | `asset_types` | query | `string[]?` | | Requested asset type slugs (any-of). | | | | |
      | `max_budget` | query | `number?` | | Approximate budget ceiling (metadata.budget\_min). | | | | |
      | `budget_unit` | query | `per_task \| total?` | | per\_task | total - omit for any unit. | | | |
      | `sort` | query | `deadline \| recent \| title \| budget_low \| budget_high` | | deadline | recent | title | budget\_low | budget\_high. Defaults to `deadline`. |
      | `offset` | query | `integer` | | Defaults to `0`. | | | | |
      | `limit` | query | `integer` | | Defaults to `50`. | | | | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/opportunities \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "items": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "title": "string",
            "status": "string",
            "owner_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "created_at": "2026-07-26T17:04:11Z",
            "updated_at": "2026-07-26T17:04:11Z",
            "accepted_asset_types": [
              "string"
            ],
            "closed_at": "2026-07-26T17:04:11Z",
            "deadline": "2026-07-26T17:04:11Z",
            "description": "string",
            "metadata": {},
            "owner_team_avatar_url": "string"
          }
        ],
        "limit": 0,
        "offset": 0,
        "counts": {
          "all": 0
        },
        "facets": {
          "tags": {}
        }
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/opportunities/{opportunity_id}" note="One opportunity your team can view." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `opportunity_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/opportunities/<opportunity_id> \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "title": "string",
        "status": "string",
        "owner_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "created_at": "2026-07-26T17:04:11Z",
        "updated_at": "2026-07-26T17:04:11Z",
        "accepted_asset_types": [
          "string"
        ],
        "closed_at": "2026-07-26T17:04:11Z",
        "deadline": "2026-07-26T17:04:11Z",
        "description": "string",
        "metadata": {},
        "owner_team_avatar_url": "string"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/project-opportunities/{opportunity_id}" note="A historical project brief visible to your team." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `opportunity_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/project-opportunities/<opportunity_id> \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "title": "string",
        "status": "string",
        "owner_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "created_at": "2026-07-26T17:04:11Z",
        "updated_at": "2026-07-26T17:04:11Z",
        "accepted_asset_types": [
          "string"
        ],
        "closed_at": "2026-07-26T17:04:11Z",
        "deadline": "2026-07-26T17:04:11Z",
        "description": "string",
        "evaluation_date": "2026-07-26T17:04:11Z",
        "metadata": {}
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/project-opportunities/bids/mine" note="Your team's historical project bids." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `offset` | query | `integer` | | Defaults to `0`. |
      | `limit` | query | `integer` | | Defaults to `50`. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/project-opportunities/bids/mine \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "items": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "opportunity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "team_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "num_tasks": 0,
            "status": "string",
            "created_at": "2026-07-26T17:04:11Z",
            "updated_at": "2026-07-26T17:04:11Z",
            "attachments": [],
            "completed_at": "2026-07-26T17:04:11Z",
            "delivery_taskset_ids": [],
            "delivery_taskset_names": {},
            "expected_timeline_days": 0
          }
        ],
        "total": 0,
        "limit": 0,
        "offset": 0
      }
      ```
    </Accordion>
  </AccordionGroup>
</div>

## Inventory

A vendor team's supply before and after it is listed. Every offering is an **asset**, in an asset
**group**. Codebases and raw data support metadata-only proposals; tasks are imported platform
versions and never have a proposed stage. `supports_proposals` on the asset-type catalog
identifies this capability.

Use the SKU collections for typed details and writes. `GET /v2/assets` returns cross-SKU
summaries. These collections return `items`, `total`, `limit`, and `offset`, default to 50 rows,
and accept at most 200 rows per page. They share repeated `id`, `group_id`, `listing_id`, `stage`,
`filter`, `sort`, and `sort_direction` parameters. Use `GET /v2/assets/window` for grouped
inventory with `leaf_budget`, `header_budget`, and `after_group_id`; follow up inside one group
with `GET /v2/assets?group_id=...&limit=...&offset=...`.

Stages are derived: missing metadata makes an asset `incomplete`; complete metadata without an
artifact makes a proposal-capable asset `proposed`; complete metadata with its artifact makes
it `complete`. A task's platform version counts as its artifact. Archive and analysis progress
are separate from stage. PATCH changes only supplied fields; nullable fields can be cleared
with `null`, while arrays and maps clear with `[]` and `{}`.

### Assets

<div className="api-endpoints">
  <AccordionGroup>
    <Accordion title={<Endpoint method="GET" path="/v2/assets" note="Your team's inventory across asset kinds; filter by sku, stage, or listing, and sort by a field." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `sku` | query | `string?` | | |
      | `deprecated` | query | `boolean?` | | true keeps only the assets of deprecated or retired SKUs, false drops them; omitted keeps both. |
      | `stage` | query | `incomplete \| proposed \| complete?` | | |
      | `listing_id` | query | `uuid?` | | |
      | `group_id` | query | `uuid?` | | |
      | `id` | query | `string[]?` | | |
      | `limit` | query | `integer` | | Defaults to `50`. |
      | `offset` | query | `integer` | | Defaults to `0`. |
      | `attach_to` | query | `uuid?` | | The listing `attachable` counts toward: assets already on it are not attachable. |
      | `filter` | query | `string[]?` | | AND filters as field:operator:value. Asset fields: stage (incomplete, proposed, complete), name, type, domain, channel (github, gitlab, bitbucket, zip, or not\_linked for assets without a data object). Codebase fields: exclusivity, private\_data. Task fields: task\_type (coding, finance, legal, general), has\_traces, has\_qa\_results, has\_environment (true or false), ran\_on\_model (a model name), qa\_agent (a QA agent key). |
      | `sort` | query | `enum?` | | Order rows by this column instead of newest first. Text sorts case-insensitively; rows without the value come last in either direction and ties stay newest first. stage runs incomplete, proposed, complete. Codebase metrics, exclusivity, private\_data and estimate are empty on other SKUs. |
      | `sort_direction` | query | `asc \| desc` | | Defaults to `asc`. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/assets \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "items": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "listable": false,
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "title": "string",
            "domain_tags": [
              "string"
            ],
            "created_at": "2026-07-26T17:04:11Z",
            "sku": "string",
            "stage": "incomplete",
            "data": {
              "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "channel": "github",
              "archive_status": "pending",
              "analysis_status": "pending",
              "attached_at": "2026-07-26T17:04:11Z",
              "analysis_error": "string",
              "analyzed_at": "2026-07-26T17:04:11Z",
              "archive_bytes": 0,
              "archive_error": "string",
              "commit_sha": "string",
              "manifest_url": "string",
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            },
            "deprecation": {
              "deprecated_at": "2026-07-26T17:04:11Z",
              "retires_at": "2026-07-26T17:04:11Z",
              "retired": false,
              "accepts_new_listings": false,
              "message": "string"
            },
            "description": "string",
            "environment": {
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "extra_columns": {},
              "build_version": 0,
              "built_at": "2026-07-26T17:04:11Z",
              "capabilities": [],
              "task_count": 0
            }
          }
        ],
        "groups": [
          {
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "total": 0,
            "attachable": 0
          }
        ],
        "limit": 50,
        "offset": 0,
        "skus": [
          {
            "sku": "string",
            "total": 0
          }
        ],
        "total": 0
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/assets/{asset_id}" note="One asset: shared columns, stage, and data object." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/assets/<asset_id> \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "listable": false,
        "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "title": "string",
        "domain_tags": [
          "string"
        ],
        "created_at": "2026-07-26T17:04:11Z",
        "sku": "string",
        "stage": "incomplete",
        "data": {
          "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "channel": "github",
          "archive_status": "pending",
          "analysis_status": "pending",
          "attached_at": "2026-07-26T17:04:11Z",
          "analysis_error": "string",
          "analyzed_at": "2026-07-26T17:04:11Z",
          "archive_bytes": 0,
          "archive_error": "string",
          "commit_sha": "string",
          "manifest_url": "string",
          "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
        },
        "deprecation": {
          "deprecated_at": "2026-07-26T17:04:11Z",
          "retires_at": "2026-07-26T17:04:11Z",
          "retired": false,
          "accepts_new_listings": false,
          "message": "string"
        },
        "description": "string",
        "environment": {
          "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "extra_columns": {},
          "build_version": 0,
          "built_at": "2026-07-26T17:04:11Z",
          "capabilities": [
            "string"
          ],
          "task_count": 0
        }
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="PUT" path="/v2/asset-groups/{group_id}/assets/{asset_id}" note="Move an asset to another of your groups." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `group_id` | path | `uuid` | yes | |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/asset-groups/<group_id>/assets/<asset_id> \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X PUT
      ```

      ```json Response 200 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "listable": false,
        "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "title": "string",
        "domain_tags": [
          "string"
        ],
        "created_at": "2026-07-26T17:04:11Z",
        "sku": "string",
        "stage": "incomplete",
        "data": {
          "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "channel": "github",
          "archive_status": "pending",
          "analysis_status": "pending",
          "attached_at": "2026-07-26T17:04:11Z",
          "analysis_error": "string",
          "analyzed_at": "2026-07-26T17:04:11Z",
          "archive_bytes": 0,
          "archive_error": "string",
          "commit_sha": "string",
          "manifest_url": "string",
          "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
        },
        "deprecation": {
          "deprecated_at": "2026-07-26T17:04:11Z",
          "retires_at": "2026-07-26T17:04:11Z",
          "retired": false,
          "accepts_new_listings": false,
          "message": "string"
        },
        "description": "string",
        "environment": {
          "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "extra_columns": {},
          "build_version": 0,
          "built_at": "2026-07-26T17:04:11Z",
          "capabilities": [
            "string"
          ],
          "task_count": 0
        }
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="POST" path="/v2/codebases/{asset_id}/data" note="Attach a repository or completed zip upload to a codebase." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/codebases/<asset_id>/data \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X POST \
        -H "Content-Type: application/json" \
        -d '{
          "channel": "github",
          "repo_full_name": "string"
        }'
      ```

      ```json Response 201 theme={"dark"}
      {
        "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "channel": "github",
        "archive_status": "pending",
        "analysis_status": "pending",
        "attached_at": "2026-07-26T17:04:11Z",
        "analysis_error": "string",
        "analyzed_at": "2026-07-26T17:04:11Z",
        "archive_bytes": 0,
        "archive_error": "string",
        "commit_sha": "string",
        "manifest_url": "string",
        "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="DELETE" path="/v2/codebases/{asset_id}/data" note="Detach codebase data and recompute its stage from the remaining metadata." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/codebases/<asset_id>/data \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X DELETE
      ```

      Returns `204` with an empty body.
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/codebases/{asset_id}/data/structure" note="The data object's file tree, once it has been read." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/codebases/<asset_id>/data/structure \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "analysis_status": "pending",
        "max_depth": 0,
        "roots": [
          {
            "name": "string",
            "kind": "folder",
            "children": [
              {}
            ]
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/assets/window" note="A bounded window of inventory groups and assets." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `sku` | query | `string?` | | |
      | `deprecated` | query | `boolean?` | | true keeps only the assets of deprecated or retired SKUs, false drops them; omitted keeps both. |
      | `stage` | query | `incomplete \| proposed \| complete?` | | |
      | `listing_id` | query | `uuid?` | | |
      | `leaf_budget` | query | `integer` | | Defaults to `50`. |
      | `header_budget` | query | `integer` | | Defaults to `10`. |
      | `after_group_id` | query | `uuid?` | | |
      | `include_empty_groups` | query | `boolean` | | Defaults to `False`. |
      | `attach_to` | query | `uuid?` | | The listing `attachable` counts toward: assets already on it are not attachable. |
      | `filter` | query | `string[]?` | | AND filters as field:operator:value. Asset fields: stage (incomplete, proposed, complete), name, type, domain, channel (github, gitlab, bitbucket, zip, or not\_linked for assets without a data object). Codebase fields: exclusivity, private\_data. Task fields: task\_type (coding, finance, legal, general), has\_traces, has\_qa\_results, has\_environment (true or false), ran\_on\_model (a model name), qa\_agent (a QA agent key). |
      | `sort` | query | `enum?` | | Order rows by this column instead of newest first. Text sorts case-insensitively; rows without the value come last in either direction and ties stay newest first. stage runs incomplete, proposed, complete. Codebase metrics, exclusivity, private\_data and estimate are empty on other SKUs. |
      | `sort_direction` | query | `asc \| desc` | | Defaults to `asc`. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/assets/window \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "items": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "listable": false,
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "title": "string",
            "domain_tags": [
              "string"
            ],
            "created_at": "2026-07-26T17:04:11Z",
            "sku": "string",
            "stage": "incomplete",
            "data": {
              "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "channel": "github",
              "archive_status": "pending",
              "analysis_status": "pending",
              "attached_at": "2026-07-26T17:04:11Z",
              "analysis_error": "string",
              "analyzed_at": "2026-07-26T17:04:11Z",
              "archive_bytes": 0,
              "archive_error": "string",
              "commit_sha": "string",
              "manifest_url": "string",
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            },
            "deprecation": {
              "deprecated_at": "2026-07-26T17:04:11Z",
              "retires_at": "2026-07-26T17:04:11Z",
              "retired": false,
              "accepts_new_listings": false,
              "message": "string"
            },
            "description": "string",
            "environment": {
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "extra_columns": {},
              "build_version": 0,
              "built_at": "2026-07-26T17:04:11Z",
              "capabilities": [],
              "task_count": 0
            }
          }
        ],
        "groups": [
          {
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "total": 0,
            "attachable": 0
          }
        ],
        "has_more_groups": false,
        "limit": 50,
        "offset": 0,
        "remaining_groups": 0,
        "skus": [
          {
            "sku": "string",
            "total": 0
          }
        ],
        "total": 0,
        "window": [
          {
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "name": "string",
            "is_default": false,
            "total": 0,
            "attachable": 0
          }
        ]
      }
      ```
    </Accordion>
  </AccordionGroup>
</div>

### Tasks

Import the tasks you build on the platform as inventory, one asset per task version. A task asset
exists or it does not: there is nothing to propose up front, so `POST /v2/tasks/import` is the one
way a task asset comes to exist. Send one taskset id to import every live task in it, or up to 500
task ids to pick tasks by hand, plus the `task_type` every imported task gets (`coding`, `finance`,
`legal` or `general`; QC runs per type, so the type is required and has no default); the server
resolves each task to its latest version and imports it when that version's build succeeded. You can import from the tasksets you can view; a task you
cannot view reads as not found. Tasks left out are listed in `skipped` with a reason (`no_version`,
`no_build`, `build_not_succeeded`, `deleted`, `foreign`). A version imports once: importing again
returns its asset under `existing`, and a task you edit on the platform imports again as a new
asset titled with its version. A task asset has no data object to link; its `task` block names the
version it stands for, and typed details read through `GET /v2/tasks/{asset_id}`. Imported assets
arrive without a domain or asking price (and without a description when the task has none), so
they are `incomplete` until you fill those in with `PATCH /v2/tasks/{asset_id}`; once the
description, domain and asking price are set the asset is `complete`. The same call changes a
task's `task_type` later; the type never affects the stage. Without `group_id` they land
in a group named after the taskset, or in your default group when the picked tasks span several
tasksets. One import creates at most 500 assets; a larger taskset is imported in batches of
`task_ids`.

The `task` block also carries the task's QC metadata, read from the platform when the task is
imported, counting your team's own traces on it: `qc.pass_at_k` lists every model that has graded
runs on the version, by model name, with its `pass_at_k` (the mean reward over the newest five
runs), `k`, `runs`, `avg_reward` and `last_run_at` (graded runs whose trace names no catalog model
sit apart in `qc.unattributed_runs`, same shape); `qc.qa_agents` lists the standard QA checks whose result is in effect on the
version's latest trace, by agent key (`false_positive`, `false_negative`, `reward_hacking`,
`prompt_alignment`, `failure_analysis`), each with its `status`, `verdict` and the number of
`findings`. The document holds aggregates only: trace ids and the checks' write-ups stay on the
platform, where project access applies; `qc.environment` says
whether the version's build is `built`. Three facts derive from that document for filtering:
`has_traces` (any graded run), `has_qa_results` (any completed check) and `has_environment`. `qc_refreshed_at` is when the platform was last read; `POST /v2/tasks/refresh-qc`
reads it again for every task asset of your team, in the background, one refresh per team at a
time (a request while one runs answers with that one), and `GET /v2/tasks/refresh-qc` reports the
refresh in flight or the last one with its `total` and `refreshed` counts. Filter the inventory on
`GET /v2/assets` with `has_traces`, `has_qa_results`, `has_environment` (`true` or `false`),
`ran_on_model:is:<model name>` and `qa_agent:is:<agent key>`; `GET /v2/tasks/qc-facets` lists the
model names and agent keys your tasks carry, to pick from.

<div className="api-endpoints">
  <AccordionGroup>
    <Accordion title={<Endpoint method="POST" path="/v2/tasks/import" note="Import a taskset's live tasks, or picked tasks, as one asset per task version." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/tasks/import \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X POST \
        -H "Content-Type: application/json" \
        -d '{
          "task_type": "coding",
          "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "task_ids": [
            "3fa85f64-5717-4562-b3fc-2c963f66afa6"
          ],
          "taskset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
        }'
      ```

      ```json Response 200 theme={"dark"}
      {
        "imported": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "listable": false,
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "title": "string",
            "domain_tags": [
              "string"
            ],
            "created_at": "2026-07-26T17:04:11Z",
            "sku": "string",
            "stage": "incomplete",
            "task": {
              "task_version_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "task_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "task_name": "string",
              "version": 0,
              "task_type": "coding",
              "has_traces": false,
              "has_qa_results": false,
              "has_environment": false,
              "qc": {},
              "qc_refreshed_at": "2026-07-26T17:04:11Z",
              "extra_columns": {}
            },
            "data": {
              "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "channel": "github",
              "archive_status": "pending",
              "analysis_status": "pending",
              "attached_at": "2026-07-26T17:04:11Z",
              "analysis_error": "string",
              "analyzed_at": "2026-07-26T17:04:11Z",
              "archive_bytes": 0,
              "archive_error": "string",
              "commit_sha": "string",
              "manifest_url": "string",
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            },
            "deprecation": {
              "deprecated_at": "2026-07-26T17:04:11Z",
              "retires_at": "2026-07-26T17:04:11Z",
              "retired": false,
              "accepts_new_listings": false,
              "message": "string"
            },
            "description": "string"
          }
        ],
        "existing": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "listable": false,
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "title": "string",
            "domain_tags": [
              "string"
            ],
            "created_at": "2026-07-26T17:04:11Z",
            "sku": "string",
            "stage": "incomplete",
            "task": {
              "task_version_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "task_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "task_name": "string",
              "version": 0,
              "task_type": "coding",
              "has_traces": false,
              "has_qa_results": false,
              "has_environment": false,
              "qc": {},
              "qc_refreshed_at": "2026-07-26T17:04:11Z",
              "extra_columns": {}
            },
            "data": {
              "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "channel": "github",
              "archive_status": "pending",
              "analysis_status": "pending",
              "attached_at": "2026-07-26T17:04:11Z",
              "analysis_error": "string",
              "analyzed_at": "2026-07-26T17:04:11Z",
              "archive_bytes": 0,
              "archive_error": "string",
              "commit_sha": "string",
              "manifest_url": "string",
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            },
            "deprecation": {
              "deprecated_at": "2026-07-26T17:04:11Z",
              "retires_at": "2026-07-26T17:04:11Z",
              "retired": false,
              "accepts_new_listings": false,
              "message": "string"
            },
            "description": "string"
          }
        ],
        "skipped": [
          {
            "task_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "reason": "no_version"
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="PATCH" path="/v2/tasks/{asset_id}" note="Edit a task asset's description, domain, notes, asking price or task type." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/tasks/<asset_id> \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X PATCH \
        -H "Content-Type: application/json" \
        -d '{
          "description": "string",
          "domain_tags": [
            "string"
          ],
          "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "notes": "string",
          "other_domain": "string",
          "price_usd": 0.0,
          "task_type": "coding"
        }'
      ```

      ```json Response 200 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "listable": false,
        "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "title": "string",
        "domain_tags": [
          "string"
        ],
        "created_at": "2026-07-26T17:04:11Z",
        "sku": "string",
        "stage": "incomplete",
        "task": {
          "task_version_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "task_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "task_name": "string",
          "version": 0,
          "task_type": "coding",
          "has_traces": false,
          "has_qa_results": false,
          "has_environment": false,
          "qc": {
            "environment": {
              "built": false
            },
            "pass_at_k": {},
            "qa_agents": {},
            "unattributed_runs": {
              "avg_reward": 0.0,
              "k": 0,
              "last_run_at": "2026-07-26T17:04:11Z",
              "pass_at_k": 0.0,
              "runs": 0
            }
          },
          "qc_refreshed_at": "2026-07-26T17:04:11Z",
          "extra_columns": {}
        },
        "data": {
          "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "channel": "github",
          "archive_status": "pending",
          "analysis_status": "pending",
          "attached_at": "2026-07-26T17:04:11Z",
          "analysis_error": "string",
          "analyzed_at": "2026-07-26T17:04:11Z",
          "archive_bytes": 0,
          "archive_error": "string",
          "commit_sha": "string",
          "manifest_url": "string",
          "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
        },
        "deprecation": {
          "deprecated_at": "2026-07-26T17:04:11Z",
          "retires_at": "2026-07-26T17:04:11Z",
          "retired": false,
          "accepts_new_listings": false,
          "message": "string"
        },
        "description": "string"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="POST" path="/v2/tasks/refresh-qc" note="Refresh the QC metadata of every task asset of the team from the platform." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/tasks/refresh-qc \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X POST
      ```

      ```json Response 202 theme={"dark"}
      {
        "refresh": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "status": "queued",
          "requested_at": "2026-07-26T17:04:11Z",
          "started_at": "2026-07-26T17:04:11Z",
          "finished_at": "2026-07-26T17:04:11Z",
          "total": 0,
          "refreshed": 0,
          "error": "string"
        },
        "qc_refreshed_at": "2026-07-26T17:04:11Z"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/tasks/refresh-qc" note="The team's task QC refresh in flight or its last one." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/tasks/refresh-qc \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "refresh": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "status": "queued",
          "requested_at": "2026-07-26T17:04:11Z",
          "started_at": "2026-07-26T17:04:11Z",
          "finished_at": "2026-07-26T17:04:11Z",
          "total": 0,
          "refreshed": 0,
          "error": "string"
        },
        "qc_refreshed_at": "2026-07-26T17:04:11Z"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/tasks/qc-facets" note="The model names and QA agent keys the team's tasks carry." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/tasks/qc-facets \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "models": [
          "string"
        ],
        "qa_agents": [
          "string"
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/tasks" note="A page of imported tasks and their QC metadata." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `stage` | query | `incomplete \| complete?` | | |
      | `id` | query | `string[]?` | | |
      | `group_id` | query | `uuid?` | | |
      | `listing_id` | query | `uuid?` | | |
      | `filter` | query | `string[]?` | | |
      | `sort` | query | `enum?` | | |
      | `sort_direction` | query | `asc \| desc` | | Defaults to `asc`. |
      | `limit` | query | `integer` | | Defaults to `50`. |
      | `offset` | query | `integer` | | Defaults to `0`. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/tasks \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "items": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "listable": false,
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "title": "string",
            "domain_tags": [
              "string"
            ],
            "created_at": "2026-07-26T17:04:11Z",
            "sku": "string",
            "stage": "incomplete",
            "task": {
              "task_version_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "task_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "task_name": "string",
              "version": 0,
              "task_type": "coding",
              "has_traces": false,
              "has_qa_results": false,
              "has_environment": false,
              "qc": {},
              "qc_refreshed_at": "2026-07-26T17:04:11Z",
              "extra_columns": {}
            },
            "data": {
              "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "channel": "github",
              "archive_status": "pending",
              "analysis_status": "pending",
              "attached_at": "2026-07-26T17:04:11Z",
              "analysis_error": "string",
              "analyzed_at": "2026-07-26T17:04:11Z",
              "archive_bytes": 0,
              "archive_error": "string",
              "commit_sha": "string",
              "manifest_url": "string",
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            },
            "deprecation": {
              "deprecated_at": "2026-07-26T17:04:11Z",
              "retires_at": "2026-07-26T17:04:11Z",
              "retired": false,
              "accepts_new_listings": false,
              "message": "string"
            },
            "description": "string"
          }
        ],
        "total": 0,
        "limit": 0,
        "offset": 0
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/tasks/{asset_id}" note="One imported task asset." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/tasks/<asset_id> \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "listable": false,
        "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "title": "string",
        "domain_tags": [
          "string"
        ],
        "created_at": "2026-07-26T17:04:11Z",
        "sku": "string",
        "stage": "incomplete",
        "task": {
          "task_version_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "task_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "task_name": "string",
          "version": 0,
          "task_type": "coding",
          "has_traces": false,
          "has_qa_results": false,
          "has_environment": false,
          "qc": {
            "environment": {
              "built": false
            },
            "pass_at_k": {},
            "qa_agents": {},
            "unattributed_runs": {
              "avg_reward": 0.0,
              "k": 0,
              "last_run_at": "2026-07-26T17:04:11Z",
              "pass_at_k": 0.0,
              "runs": 0
            }
          },
          "qc_refreshed_at": "2026-07-26T17:04:11Z",
          "extra_columns": {}
        },
        "data": {
          "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "channel": "github",
          "archive_status": "pending",
          "analysis_status": "pending",
          "attached_at": "2026-07-26T17:04:11Z",
          "analysis_error": "string",
          "analyzed_at": "2026-07-26T17:04:11Z",
          "archive_bytes": 0,
          "archive_error": "string",
          "commit_sha": "string",
          "manifest_url": "string",
          "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
        },
        "deprecation": {
          "deprecated_at": "2026-07-26T17:04:11Z",
          "retires_at": "2026-07-26T17:04:11Z",
          "retired": false,
          "accepts_new_listings": false,
          "message": "string"
        },
        "description": "string"
      }
      ```
    </Accordion>
  </AccordionGroup>
</div>

### Codebases

Register repositories your team could supply, one at a time or in an atomic metadata-only batch
with `POST /v2/codebases/batch` and body `{"items": [...]}` (at most 500 rows). Only `title` and
`exclusivity` are required. Anything else you leave out, including the description, domain
and asking price, is listed in `missing` and keeps the proposal `incomplete` until a `PATCH`
fills it. A proposal stays
editable, and can be deleted until a data object is attached. Once the linked data is read, a
description you left blank is filled from the repository's root README, or failing that from the
repository's About text or your manifest's description. A description you wrote is never replaced.
Metadata read from the linked data, and metadata you send with an API key, is locked: `locked_fields` maps each
such field to its source (`github`, `gitlab`, `bitbucket` or `zip` for the linked data, `api`
for an API-key request). A locked field can't be edited in the inventory, only through the API
or a new reading of the data.

<div className="api-endpoints">
  <AccordionGroup>
    <Accordion title={<Endpoint method="GET" path="/v2/codebases" note="Your team's codebase rows across all groups." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `stage` | query | `incomplete \| proposed \| complete?` | | |
      | `id` | query | `string[]?` | | |
      | `group_id` | query | `uuid?` | | |
      | `listing_id` | query | `uuid?` | | |
      | `filter` | query | `string[]?` | | |
      | `sort` | query | `enum?` | | |
      | `sort_direction` | query | `asc \| desc` | | Defaults to `asc`. |
      | `limit` | query | `integer` | | Defaults to `50`. |
      | `offset` | query | `integer` | | Defaults to `0`. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/codebases \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "items": [
          {
            "sku": "string",
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "stage": "incomplete",
            "title": "string",
            "domain_tags": [
              "string"
            ],
            "exclusivity": "available",
            "created_at": "2026-07-26T17:04:11Z",
            "ci_on_prs": false,
            "commits": 0,
            "contributors": 0,
            "data": {
              "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "channel": "github",
              "archive_status": "pending",
              "analysis_status": "pending",
              "attached_at": "2026-07-26T17:04:11Z",
              "analysis_error": "string",
              "analyzed_at": "2026-07-26T17:04:11Z",
              "archive_bytes": 0,
              "archive_error": "string",
              "commit_sha": "string",
              "manifest_url": "string",
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            }
          }
        ],
        "total": 0,
        "limit": 0,
        "offset": 0
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="POST" path="/v2/codebases" note="Register one repository, optionally with its data object." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/codebases \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X POST \
        -H "Content-Type: application/json" \
        -d '{
          "title": "string",
          "exclusivity": "available",
          "ci_on_prs": false,
          "commits": 0,
          "contributors": 0,
          "data": {
            "channel": "github",
            "repo_full_name": "string"
          },
          "description": "string",
          "domain_tags": [
            "string"
          ],
          "extra_columns": {},
          "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "history_end": "2026-07-26",
          "history_start": "2026-07-26"
        }'
      ```

      ```json Response 201 theme={"dark"}
      {
        "sku": "string",
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "stage": "incomplete",
        "title": "string",
        "domain_tags": [
          "string"
        ],
        "exclusivity": "available",
        "created_at": "2026-07-26T17:04:11Z",
        "ci_on_prs": false,
        "commits": 0,
        "contributors": 0,
        "data": {
          "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "channel": "github",
          "archive_status": "pending",
          "analysis_status": "pending",
          "attached_at": "2026-07-26T17:04:11Z",
          "analysis_error": "string",
          "analyzed_at": "2026-07-26T17:04:11Z",
          "archive_bytes": 0,
          "archive_error": "string",
          "commit_sha": "string",
          "manifest_url": "string",
          "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
        }
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="POST" path="/v2/codebases/batch" note="Register many repositories in one request, all or nothing." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/codebases/batch \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X POST \
        -H "Content-Type: application/json" \
        -d '{
          "items": [
            {
              "title": "string",
              "exclusivity": "available",
              "ci_on_prs": false,
              "commits": 0,
              "contributors": 0,
              "description": "string",
              "domain_tags": [
                "string"
              ],
              "extra_columns": {},
              "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "history_end": "2026-07-26",
              "history_start": "2026-07-26",
              "lines_of_code": 0
            }
          ]
        }'
      ```

      ```json Response 201 theme={"dark"}
      {
        "items": [
          {
            "sku": "string",
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "stage": "incomplete",
            "title": "string",
            "domain_tags": [
              "string"
            ],
            "exclusivity": "available",
            "created_at": "2026-07-26T17:04:11Z",
            "ci_on_prs": false,
            "commits": 0,
            "contributors": 0,
            "data": {
              "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "channel": "github",
              "archive_status": "pending",
              "analysis_status": "pending",
              "attached_at": "2026-07-26T17:04:11Z",
              "analysis_error": "string",
              "analyzed_at": "2026-07-26T17:04:11Z",
              "archive_bytes": 0,
              "archive_error": "string",
              "commit_sha": "string",
              "manifest_url": "string",
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            }
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/codebases/languages" note="Languages a proposal may declare." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/codebases/languages \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "languages": [
          {
            "slug": "string",
            "name": "string",
            "aliases": [
              "string"
            ]
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/codebases/{asset_id}" note="One codebase asset, with its metadata and optional data object." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/codebases/<asset_id> \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "sku": "string",
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "stage": "incomplete",
        "title": "string",
        "domain_tags": [
          "string"
        ],
        "exclusivity": "available",
        "created_at": "2026-07-26T17:04:11Z",
        "ci_on_prs": false,
        "commits": 0,
        "contributors": 0,
        "data": {
          "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "channel": "github",
          "archive_status": "pending",
          "analysis_status": "pending",
          "attached_at": "2026-07-26T17:04:11Z",
          "analysis_error": "string",
          "analyzed_at": "2026-07-26T17:04:11Z",
          "archive_bytes": 0,
          "archive_error": "string",
          "commit_sha": "string",
          "manifest_url": "string",
          "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
        }
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="PATCH" path="/v2/codebases/{asset_id}" note="Edit a codebase asset." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/codebases/<asset_id> \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X PATCH \
        -H "Content-Type: application/json" \
        -d '{
          "ci_on_prs": false,
          "commits": 0,
          "contributors": 0,
          "description": "string",
          "domain_tags": [
            "string"
          ],
          "exclusivity": "available",
          "extra_columns": {},
          "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "history_end": "2026-07-26",
          "history_start": "2026-07-26",
          "lines_of_code": 0,
          "merged_prs": 0
        }'
      ```

      ```json Response 200 theme={"dark"}
      {
        "sku": "string",
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "stage": "incomplete",
        "title": "string",
        "domain_tags": [
          "string"
        ],
        "exclusivity": "available",
        "created_at": "2026-07-26T17:04:11Z",
        "ci_on_prs": false,
        "commits": 0,
        "contributors": 0,
        "data": {
          "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "channel": "github",
          "archive_status": "pending",
          "analysis_status": "pending",
          "attached_at": "2026-07-26T17:04:11Z",
          "analysis_error": "string",
          "analyzed_at": "2026-07-26T17:04:11Z",
          "archive_bytes": 0,
          "archive_error": "string",
          "commit_sha": "string",
          "manifest_url": "string",
          "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
        }
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="DELETE" path="/v2/codebases/{asset_id}" note="Soft-delete a codebase whose data object is detached." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/codebases/<asset_id> \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X DELETE
      ```

      Returns `204` with an empty body.
    </Accordion>

    <Accordion title={<Endpoint method="POST" path="/v2/codebases/{asset_id}/qc/runs" note="Start codebase quality checks after its archive is read." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/codebases/<asset_id>/qc/runs \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X POST
      ```

      ```json Response 202 theme={"dark"}
      {
        "status": "string",
        "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "run_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "run_number": 0
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/codebases/{asset_id}/qc" note="The latest codebase quality-check run." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/codebases/<asset_id>/qc \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "latest_run": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "run_number": 0,
          "status": "string",
          "mandatory_passed": false,
          "review_feedback": "string",
          "error": "string",
          "triggered_by": "string",
          "charge_total": 0.0,
          "started_at": "2026-07-26T17:04:11Z",
          "completed_at": "2026-07-26T17:04:11Z",
          "checks": [
            {
              "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "scope": "string",
              "asset_type": "string",
              "asset_name": "string",
              "asset_reference": "string",
              "listing_asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "kind": "string",
              "key": "string",
              "label": "string",
              "mandatory": false,
              "informational": false,
              "status": "string"
            }
          ],
          "passed": false
        }
      }
      ```
    </Accordion>
  </AccordionGroup>
</div>

### Raw data

Register the raw data your team can supply, with an optional completed upload as `data`.
Complete metadata without an upload is `proposed`. With an upload, a row sent with its
description, domain and asking price is `complete` from the start;
one without them lists them in `missing` and stays `incomplete` until a `PATCH` fills them. A
blank description is filled from the archive's root README once the upload is read.
Its columns can be edited until it is deleted. Exclusivity is a codebase field: raw data rows
do not carry it, and an `exclusivity` value sent here is refused.

<div className="api-endpoints">
  <AccordionGroup>
    <Accordion title={<Endpoint method="GET" path="/v2/raw-data" note="Your team's Raw data rows across all groups." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `stage` | query | `incomplete \| proposed \| complete?` | | |
      | `id` | query | `string[]?` | | |
      | `group_id` | query | `uuid?` | | |
      | `listing_id` | query | `uuid?` | | |
      | `filter` | query | `string[]?` | | |
      | `sort` | query | `enum?` | | |
      | `sort_direction` | query | `asc \| desc` | | Defaults to `asc`. |
      | `limit` | query | `integer` | | Defaults to `50`. |
      | `offset` | query | `integer` | | Defaults to `0`. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/raw-data \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "items": [
          {
            "sku": "string",
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "stage": "incomplete",
            "title": "string",
            "domain_tags": [
              "string"
            ],
            "created_at": "2026-07-26T17:04:11Z",
            "data": {
              "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "channel": "github",
              "archive_status": "pending",
              "analysis_status": "pending",
              "attached_at": "2026-07-26T17:04:11Z",
              "analysis_error": "string",
              "analyzed_at": "2026-07-26T17:04:11Z",
              "archive_bytes": 0,
              "archive_error": "string",
              "commit_sha": "string",
              "manifest_url": "string",
              "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            },
            "description": "string",
            "extra_columns": {},
            "missing": [
              "string"
            ],
            "notes": "string"
          }
        ],
        "total": 0,
        "limit": 0,
        "offset": 0
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="POST" path="/v2/raw-data" note="Register raw data, optionally with its completed upload." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/raw-data \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X POST \
        -H "Content-Type: application/json" \
        -d '{
          "title": "string",
          "data": {
            "channel": "string",
            "url": "string",
            "manifest_url": "string"
          },
          "description": "string",
          "domain_tags": [
            "string"
          ],
          "extra_columns": {},
          "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "notes": "string",
          "other_domain": "string",
          "price_usd": 0.0,
          "suffix_title": false
        }'
      ```

      ```json Response 201 theme={"dark"}
      {
        "sku": "string",
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "stage": "incomplete",
        "title": "string",
        "domain_tags": [
          "string"
        ],
        "created_at": "2026-07-26T17:04:11Z",
        "data": {
          "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "channel": "github",
          "archive_status": "pending",
          "analysis_status": "pending",
          "attached_at": "2026-07-26T17:04:11Z",
          "analysis_error": "string",
          "analyzed_at": "2026-07-26T17:04:11Z",
          "archive_bytes": 0,
          "archive_error": "string",
          "commit_sha": "string",
          "manifest_url": "string",
          "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
        },
        "description": "string",
        "extra_columns": {},
        "missing": [
          "string"
        ],
        "notes": "string"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/raw-data/{asset_id}" note="One row, with its data object." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/raw-data/<asset_id> \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "sku": "string",
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "stage": "incomplete",
        "title": "string",
        "domain_tags": [
          "string"
        ],
        "created_at": "2026-07-26T17:04:11Z",
        "data": {
          "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "channel": "github",
          "archive_status": "pending",
          "analysis_status": "pending",
          "attached_at": "2026-07-26T17:04:11Z",
          "analysis_error": "string",
          "analyzed_at": "2026-07-26T17:04:11Z",
          "archive_bytes": 0,
          "archive_error": "string",
          "commit_sha": "string",
          "manifest_url": "string",
          "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
        },
        "description": "string",
        "extra_columns": {},
        "missing": [
          "string"
        ],
        "notes": "string"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="PATCH" path="/v2/raw-data/{asset_id}" note="Edit a row; extra_columns replaces the whole map." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/raw-data/<asset_id> \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X PATCH \
        -H "Content-Type: application/json" \
        -d '{
          "description": "string",
          "domain_tags": [
            "string"
          ],
          "extra_columns": {},
          "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "notes": "string",
          "other_domain": "string",
          "price_usd": 0.0,
          "title": "string"
        }'
      ```

      ```json Response 200 theme={"dark"}
      {
        "sku": "string",
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "group_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "stage": "incomplete",
        "title": "string",
        "domain_tags": [
          "string"
        ],
        "created_at": "2026-07-26T17:04:11Z",
        "data": {
          "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "channel": "github",
          "archive_status": "pending",
          "analysis_status": "pending",
          "attached_at": "2026-07-26T17:04:11Z",
          "analysis_error": "string",
          "analyzed_at": "2026-07-26T17:04:11Z",
          "archive_bytes": 0,
          "archive_error": "string",
          "commit_sha": "string",
          "manifest_url": "string",
          "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
        },
        "description": "string",
        "extra_columns": {},
        "missing": [
          "string"
        ],
        "notes": "string"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="DELETE" path="/v2/raw-data/{asset_id}" note="Soft-delete a row whose archive is detached." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/raw-data/<asset_id> \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X DELETE
      ```

      Returns `204` with an empty body.
    </Accordion>

    <Accordion title={<Endpoint method="POST" path="/v2/raw-data/{asset_id}/data" note="Attach a completed zip upload." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/raw-data/<asset_id>/data \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X POST \
        -H "Content-Type: application/json" \
        -d '{
          "channel": "string",
          "url": "string",
          "manifest_url": "string"
        }'
      ```

      ```json Response 201 theme={"dark"}
      {
        "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "channel": "github",
        "archive_status": "pending",
        "analysis_status": "pending",
        "attached_at": "2026-07-26T17:04:11Z",
        "analysis_error": "string",
        "analyzed_at": "2026-07-26T17:04:11Z",
        "archive_bytes": 0,
        "archive_error": "string",
        "commit_sha": "string",
        "manifest_url": "string",
        "registry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="DELETE" path="/v2/raw-data/{asset_id}/data" note="Detach the upload and recompute the stage." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/raw-data/<asset_id>/data \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X DELETE
      ```

      Returns `204` with an empty body.
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/raw-data/{asset_id}/data/structure" note="The archive file tree after analysis." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/raw-data/<asset_id>/data/structure \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "analysis_status": "pending",
        "max_depth": 0,
        "roots": [
          {
            "name": "string",
            "kind": "folder",
            "children": [
              {}
            ]
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="POST" path="/v2/raw-data/{asset_id}/qc/runs" note="Start raw-data quality checks." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/raw-data/<asset_id>/qc/runs \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X POST
      ```

      ```json Response 202 theme={"dark"}
      {
        "status": "string",
        "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "run_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "run_number": 0
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/raw-data/{asset_id}/qc" note="The latest raw-data quality-check run." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/raw-data/<asset_id>/qc \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "latest_run": {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "run_number": 0,
          "status": "string",
          "mandatory_passed": false,
          "review_feedback": "string",
          "error": "string",
          "triggered_by": "string",
          "charge_total": 0.0,
          "started_at": "2026-07-26T17:04:11Z",
          "completed_at": "2026-07-26T17:04:11Z",
          "checks": [
            {
              "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "scope": "string",
              "asset_type": "string",
              "asset_name": "string",
              "asset_reference": "string",
              "listing_asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "kind": "string",
              "key": "string",
              "label": "string",
              "mandatory": false,
              "informational": false,
              "status": "string"
            }
          ],
          "passed": false
        }
      }
      ```
    </Accordion>
  </AccordionGroup>
</div>

### Groups

<div className="api-endpoints">
  <AccordionGroup>
    <Accordion title={<Endpoint method="GET" path="/v2/asset-groups" note="Your team's groups, newest first." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/asset-groups \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "groups": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "name": "string",
            "is_default": false,
            "created_at": "2026-07-26T17:04:11Z",
            "updated_at": "2026-07-26T17:04:11Z"
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="POST" path="/v2/asset-groups" note="Create a group; names are unique per team." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/asset-groups \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X POST \
        -H "Content-Type: application/json" \
        -d '{
          "name": "string"
        }'
      ```

      ```json Response 201 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "name": "string",
        "is_default": false,
        "created_at": "2026-07-26T17:04:11Z",
        "updated_at": "2026-07-26T17:04:11Z"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/asset-groups/{group_id}" note="One group." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `group_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/asset-groups/<group_id> \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "name": "string",
        "is_default": false,
        "created_at": "2026-07-26T17:04:11Z",
        "updated_at": "2026-07-26T17:04:11Z"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="PATCH" path="/v2/asset-groups/{group_id}" note="Rename a group." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `group_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/asset-groups/<group_id> \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X PATCH \
        -H "Content-Type: application/json" \
        -d '{
          "name": "string"
        }'
      ```

      ```json Response 200 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "name": "string",
        "is_default": false,
        "created_at": "2026-07-26T17:04:11Z",
        "updated_at": "2026-07-26T17:04:11Z"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="DELETE" path="/v2/asset-groups/{group_id}" note="Soft-delete a group; its assets move to Default." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `group_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/asset-groups/<group_id> \
        -H "Authorization: Bearer $HUD_API_KEY" \
        -X DELETE
      ```

      Returns `204` with an empty body.
    </Accordion>
  </AccordionGroup>
</div>

## Account

### Estimations

<div className="api-endpoints">
  <AccordionGroup>
    <Accordion title={<Endpoint method="GET" path="/v2/estimations" note="Your team's estimations, newest first; filter by status, type, name, channel, or inventory, and sort by a field." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `limit` | query | `integer` | | Defaults to `50`. |
      | `offset` | query | `integer` | | Defaults to `0`. |
      | `filter` | query | `string[]?` | | AND filters as field:operator:value. Fields: status (pending, estimated, unpriced, failed), type, name, channel (github, gitlab, bitbucket, zip), inventory (added or not\_added). |
      | `sort` | query | `enum?` | | Order rows by this column instead of newest first. Text sorts case-insensitively; rows without the value come last in either direction and ties stay newest first. status runs pending, estimated, unpriced, failed. date is completion, or creation while pending. |
      | `sort_direction` | query | `asc \| desc` | | Defaults to `asc`. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/estimations \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "estimations": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "sku_slug": "string",
            "source": {
              "channel": "string",
              "repo_full_name": "string"
            },
            "name": "string",
            "status": "pending",
            "created_at": "2026-07-26T17:04:11Z",
            "completed_at": "2026-07-26T17:04:11Z",
            "created_by": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "failure_message": "string",
            "inventory_asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "quote_high_cents": 0,
            "quote_low_cents": 0
          }
        ],
        "total": 0
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/estimations/summary" note="Quote totals, a value distribution, and status counts over the estimations the same filters match." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `filter` | query | `string[]?` | | The same AND filters as GET /v2/estimations. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/estimations/summary \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "estimated_sources": 0,
        "bins": [
          {
            "low_cents": 0,
            "high_cents": 0,
            "count": 0
          }
        ],
        "status_counts": {
          "estimated": 0,
          "failed": 0,
          "pending": 0,
          "unpriced": 0
        },
        "quote_high_cents": 0,
        "quote_low_cents": 0
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/estimations/latest" note="The latest estimation of each listed inventory asset's data." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `asset_id` | query | `string[]` | yes | |

      ```bash Request theme={"dark"}
      curl "https://api.datavendor.ai/v2/estimations/latest?asset_id=<asset_id>" \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "estimations": [
          {
            "asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "estimation": {
              "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "sku_slug": "string",
              "source": {},
              "name": "string",
              "status": "pending",
              "created_at": "2026-07-26T17:04:11Z",
              "completed_at": "2026-07-26T17:04:11Z",
              "created_by": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "failure_message": "string",
              "inventory_asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              "quote_high_cents": 0,
              "quote_low_cents": 0
            }
          }
        ]
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/estimations/{estimation_id}" note="One estimation." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `estimation_id` | path | `uuid` | yes | |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/estimations/<estimation_id> \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "sku_slug": "string",
        "source": {
          "channel": "string",
          "repo_full_name": "string"
        },
        "name": "string",
        "status": "pending",
        "created_at": "2026-07-26T17:04:11Z",
        "completed_at": "2026-07-26T17:04:11Z",
        "created_by": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "failure_message": "string",
        "inventory_asset_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "quote_high_cents": 0,
        "quote_low_cents": 0
      }
      ```
    </Accordion>
  </AccordionGroup>
</div>

### Wallet and notifications

Converting, withdrawing, and payout setup stay in the web app.

<div className="api-endpoints">
  <AccordionGroup>
    <Accordion title={<Endpoint method="GET" path="/v2/wallet" note="Credits balance and earnings balances." />}>
      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/wallet \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "credits_balance": "string",
        "earnings": {
          "total": "string",
          "pending": "string",
          "available": "string"
        },
        "currency": "usd"
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/wallet/earnings" note="The earnings ledger, newest first." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `limit` | query | `integer` | | Defaults to `50`. |
      | `offset` | query | `integer` | | Defaults to `0`. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/wallet/earnings \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "items": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "entry_type": "string",
            "amount": "string",
            "currency": "string",
            "created_at": "2026-07-26T17:04:11Z",
            "available_at": "2026-07-26T17:04:11Z",
            "description": "string",
            "purchase_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
          }
        ],
        "total": 0,
        "limit": 0,
        "offset": 0
      }
      ```
    </Accordion>

    <Accordion title={<Endpoint method="GET" path="/v2/vendor/notifications" note="Your team's notification feed with unread count." />}>
      | Parameter | In | Type | Required | Description |
      | - | - | - | - | - |
      | `limit` | query | `integer` | | Defaults to `50`. |

      ```bash Request theme={"dark"}
      curl https://api.datavendor.ai/v2/vendor/notifications \
        -H "Authorization: Bearer $HUD_API_KEY"
      ```

      ```json Response 200 theme={"dark"}
      {
        "notifications": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "team_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "type": "opportunity_published",
            "title": "string",
            "message": "string",
            "read": false,
            "created_at": "2026-07-26T17:04:11Z",
            "link": "string",
            "opportunity_bid_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "opportunity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "project_opportunity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "task_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
          }
        ],
        "unread_count": 0
      }
      ```
    </Accordion>
  </AccordionGroup>
</div>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.