---
title: "List milestones"
method: GET
path: "/api/v1/milestones"
tags: ["Milestones"]
---

# List milestones

`GET /api/v1/milestones`

## Request

- Base URL: `https://www.vestiarion.xyz`
- URL: `https://www.vestiarion.xyz/api/v1/milestones`
- Auth: HTTP bearer

Contractor milestones, newest first, with the row id breaking equal timestamps: how each was verified, and whether it was paid. Only a real `0x` transaction is exposed as `txHash`.

## Query parameters

- `limit` integer
- `cursor` string
- `status` 'pending' | 'verified' | 'paid' | 'held' | 'closed'
- `contractorId` string

## Response `200`

OK

- ListMilestonesResponse
  - `data` object[], required
    - `id` string, required
    - `title` string, required
    - `amount` number, required
    - `status` 'pending' | 'verified' | 'paid' | 'held' | 'closed', required
    - `verificationSource` string, nullable, required
    - `verificationMethod` 'unverified' | 'github' | 'manual' | 'seed' | 'asana', required
    - `verificationStatus` 'unverified' | 'verified' | 'not_merged' | 'unavailable' | 'failed', required
    - `verificationCheckedAt` string, nullable, required
    - `verifiedAt` string, nullable, required
    - `verificationDetail` object, required
    - `verified` boolean, required
    - `decidedAt` string, nullable, required
    - `settledAt` string, nullable, required
    - `closedAt` string, nullable, required: When a person closed the milestone without paying it (status closed), else null.
    - `closeReason` string, nullable, required: The reason the person gave for closing it without paying, else null.
    - `agentReasoning` string, nullable, required
    - `txHash` string, nullable, required: An on-chain hash when the payment settled on Arc, else null.
    - `contractor` object, nullable, required
      - `id` string, required
      - `name` string, required
      - `riskLevel` string, required
    - `createdAt` string, required
  - `page` object, required: Where this page sits in the collection.
    - `nextCursor` string, nullable, required: Pass back as `?cursor=` to continue. Null when the end is reached.
    - `hasMore` boolean, required: Whether another page follows this one.
    - `count` integer, required: How many items this response carries.

## Other responses

- `400`: invalid_request
- `401`: unauthorized
- `403`: forbidden
- `500`: internal

---

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