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

# List quotes

> Returns every quote recorded for the caller's organization. Use this list
to monitor pending proposals, track which quotes have already been accepted
or expired, and review pricing history before moving to the detail or
acceptance endpoints.



## OpenAPI

````yaml https://devs.adaptyvbio.com/api/v1/openapi.json get /api/v1/quotes
openapi: 3.1.0
info:
  title: Adaptyv Foundry API
  description: >

    The Foundry API enables programmatic access to Adaptyv Bio's protein
    characterization services.


    ## Getting Started


    1. **Obtain an API token** from the [Adaptyv
    Portal](https://foundry.adaptyvbio.com) or by
       contacting Adaptyv directly
    2. **Authenticate requests** using Bearer token in the Authorization header

    3. **Create experiments** to submit protein sequences for characterization

    4. **Monitor status** via webhooks or polling the experiment detail endpoint


    ## Authentication


    All requests require a Bearer token:


    ```

    Authorization: Bearer <your-token>

    ```


    Tokens can be attenuated (restricted) to specific organizations or
    capabilities via the `/tokens` endpoint.


    ## Pagination


    List endpoints support offset-based pagination:


    | Parameter | Description | Default |

    |-----------|-------------|---------|

    | `limit` | Maximum items per page | 50 |

    | `offset` | Number of items to skip | 0 |


    ## Filtering


    Most list endpoints support filtering via query parameters using comparison
    operators:


    - `equ(field)=value` — equals

    - `geq(field)=value` — greater than or equal

    - `gtr(field)=value` — greater than

    - `leq(field)=value` — less than or equal

    - `lss(field)=value` — less than


    Example: `GET /experiments?geq(created_at)=2025-01-01&status=draft`


    ## Environments


    | Environment | Base URL |

    |-------------|----------|

    | Production | `https://foundry-api-public.adaptyvbio.com` |


    ## Support


    - **Email**: support@adaptyvbio.com

    - **Documentation**: [docs.adaptyvbio.com](https://docs.adaptyvbio.com)
  version: 0.0.2
servers:
  - url: https://foundry-api-public.adaptyvbio.com/
    description: Production API (Public)
security:
  - adaptyv_biscuits_v0: []
tags:
  - name: experiments
    description: >

      Experiments are the core resource for submitting protein sequences to
      Adaptyv's characterization services.


      ## Lifecycle


      Experiments progress through these stages:


      1. **Draft** — Initial state for designing your experiment

      2. **In Review** — Submitted for validation and quote generation

      3. **Quote Sent** — Adaptyv has sent a pricing quote

      4. **Waiting for Confirmation** — Quote ready, awaiting acceptance

      5. **In Queue** — Confirmed and queued for lab scheduling

      6. **Waiting for Materials** — Confirmed, waiting for samples

      7. **In Production** — Lab work in progress

      8. **Data Analysis** — Characterization complete, processing results

      9. **Done** — Results available for download


      **Canceled** is a terminal state reachable from Draft, In Review, Waiting
      for Confirmation, or In Queue.


      ## Experiment Types


      | Type | Description | Target Required |

      |------|-------------|-----------------|

      | `screening` | High-throughput binding assessment | Yes |

      | `affinity` | Kinetic characterization (KD, kon, koff) | Yes |

      | `thermostability` | Thermal stability measurement (Tm) | No |

      | `expression` | Expression yield assessment | No |

      | `fluorescence` | Fluorescence-based characterization | No |


      ## Typical Workflow


      ```

      POST /experiments                    # Create experiment

      POST /experiments/cost-estimate      # Preview pricing

      POST /experiments/{id}/submit        # Submit for review

      GET /experiments/{id}/quote          # Retrieve quote when ready

      POST /experiments/{id}/quote/confirm # Accept quote

      GET /experiments/{id}                # Monitor progress

      GET /results?experiment_id={id}      # Retrieve results when done

      ```


      ## Related Resources


      - [Results](#tag/results) — Characterization data from completed
      experiments

      - [Sequences](#tag/sequences) — Individual sequences within experiments

      - [Targets](#tag/targets) — Target proteins for binding experiments
  - name: feedback
    description: >-
      Use this endpoint to give us feedback, report bugs that are not already
      caught by our observability or request features (or have your agents do
      it).
  - name: info
    description: >-
      Programmatic discovery and health probes. Anonymous-eligible liveness and
      database connectivity probes; admin-only assay-type catalog (internal
      builds).
  - name: quotes
    description: >-
      Stripe quote lifecycle: list, retrieve, confirm, and reject quotes for
      experiment pricing.
  - name: results
    description: >

      Results contain the characterization data from completed experiments.


      ## Result Availability


      Results appear when an experiment reaches the **Done** status. Some
      experiment types provide partial results during **Data Analysis**.


      ## Result Types by Experiment


      | Experiment Type | Result Data |

      |-----------------|-------------|

      | Affinity | KD, kon, koff, sensorgrams |

      | Screening | Binding yes/no, response units |

      | Thermostability | Tm values, melting curves |

      | Expression | Yield measurements |


      ## Downloading Results


      Use the result `id` to fetch detailed data. Result downloads may include:


      - Raw sensorgram data

      - Fitted kinetic parameters

      - Quality metrics

      - Summary reports


      ## Related Resources


      - [Experiments](#tag/experiments) — Parent resource that produces results
  - name: sequences
    description: >

      Sequences provide read-only access to protein sequences submitted across
      experiments.


      ## Sequence Format


      Sequences are amino acid strings in standard single-letter IUPAC format
      (e.g., `MKTLLLTLLV...`).


      ## Sequence Properties


      | Field | Description |

      |-------|-------------|

      | `aa_string` | The amino acid sequence |

      | `name` | Optional human-readable identifier |

      | `control` | Whether this is a control sequence |

      | `metadata` | Structural annotations (tag location, antibody type) |


      ## Querying Sequences


      Filter sequences by experiment or other criteria:


      ```

      GET /sequences?experiment_id={id}

      GET /sequences?name=mAb-001

      ```


      ## Related Resources


      - [Experiments](#tag/experiments) — Parent resource containing sequences
  - name: targets
    description: >

      Targets represent the molecules your samples will be tested against in
      binding experiments (affinity and screening).


      ## Target Catalog


      Adaptyv maintains a catalog of pre-validated target proteins with
      established pricing. Use `selfservice_only=true` to filter for targets
      with immediate pricing availability.


      ## Self-Service vs Custom Targets


      | Category | Description | Pricing |

      |----------|-------------|---------|

      | Self-service | Pre-validated catalog targets | Instant quote via cost
      estimate |

      | Custom | User-supplied or special request | Requires manual quote |


      ## Usage


      1. Browse targets with `GET /targets?selfservice_only=true`

      2. Use the target's `id` when creating an experiment

      3. For custom targets, provide a `requested_target` object in the
      experiment request


      ## Related Resources


      - [Experiments](#tag/experiments) — Create experiments using targets

      - [Cost Estimate](#operation/cost_estimate) — Preview pricing for
      self-service targets
  - name: tokens
    description: >

      Create restricted versions of your API token for delegation to team
      members or automated systems.


      ## Token Attenuation


      Attenuation **reduces** the permissions of your token—it cannot grant
      additional access. Attenuated tokens inherit a subset of the parent
      token's capabilities.


      ## Restriction Types


      | Restriction | Effect |

      |-------------|--------|

      | Organization | Limit access to specific organizations |

      | Resource | Limit to specific resource types (experiments, results) |

      | Action | Limit to specific actions (read, create, update) |

      | Expiry | Set a shorter expiration time |


      ## Security Best Practices


      - Create narrowly-scoped tokens for automated systems

      - Use short expiration times for temporary access

      - Revoke tokens promptly when no longer needed
  - name: updates
    description: >-
      Real-time feed of experiment status changes, progress notifications, and
      operational alerts. Supports cursor-based pagination for efficient
      polling.
  - name: whoami
    description: >-
      Identify yourself: the organizations your token can access (with the
      active one marked), your user id, the permissions your token grants, and
      its expiry.
paths:
  /api/v1/quotes:
    get:
      tags:
        - quotes
      summary: List quotes
      description: >-
        Returns every quote recorded for the caller's organization. Use this
        list

        to monitor pending proposals, track which quotes have already been
        accepted

        or expired, and review pricing history before moving to the detail or

        acceptance endpoints.
      operationId: list_quotes
      parameters:
        - name: limit
          in: query
          description: Maximum number of items to return (1-100, default 50).
          required: false
          schema:
            type: integer
            format: int64
        - name: offset
          in: query
          description: Number of items to skip (default 0).
          required: false
          schema:
            type: integer
            format: int64
        - name: filter
          in: query
          description: >-
            Filter expression in s-expression syntax.


            **Comparison:** `eq(field,value)`, `neq(field,value)`,
            `gt(field,value)`,

            `lt(field,value)`, `gte(field,value)`, `lte(field,value)`,

            `contains(field,substring)`


            **Range/set:** `between(field,lo,hi)`, `in(field,v1,v2,...)`


            **Logical:** `and(expr1,expr2,...)`, `or(expr1,expr2,...)`,
            `not(expr)`


            **Null checks:** `is_null(field)`, `is_not_null(field)`


            **JSONB access:** `at(field,key)` — e.g. `eq(at(metadata,score),42)`


            **Cast functions:** `float(expr)`, `int(expr)`, `text(expr)`,

            `timestamp(expr)`, `date(expr)`


            Example: `and(gte(created_at,2026-01-01),eq(status,draft))`
          required: false
          schema:
            type: string
        - name: sort
          in: query
          description: >-
            Sort expression. Supports multi-column sort (comma-separated, up to
            8),

            JSONB path access, and type casts.


            Three accepted surface forms produce the same ordering:


            - **Canonical** — `desc(field)` / `asc(field)`; also wraps casts and
              `at(...)` JSONB path access. Example: `asc(date(at(metadata,start_date)))`.
            - **Prefix short form** — `-field` (descending), `+field` or bare
              `field` (ascending). GitHub / Stripe / Jira convention. Bare field
              only; no casts.
            - **Suffix short form** — `field:asc` / `field:desc`. Also bare
            field.


            Examples: `-created_at`, `-created_at,+name`, `created_at:desc`,

            `desc(created_at),asc(name)`, `asc(at(metadata,score))`.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Quote list
          content:
            application/json:
              schema:
                type: object
                description: >-
                  Paginated list response with offset-based navigation metadata.


                  All list endpoints return this shape. Use `offset` and `limit`
                  query

                  parameters to page through results; `total` reports how many
                  items

                  match the query across all pages.
                required:
                  - items
                  - total
                  - count
                  - offset
                properties:
                  count:
                    type: integer
                    format: int64
                    description: Number of items in this response.
                  items:
                    type: array
                    items:
                      type: object
                      description: |-
                        Quote record returned by the list endpoint.

                        Represents a formal price proposal for an experiment.
                      required:
                        - id
                        - quote_number
                        - organization_id
                        - amount_cents
                        - currency
                        - status
                        - valid_until
                        - created_at
                        - stripe_quote_url
                      properties:
                        amount_cents:
                          type: integer
                          format: int64
                          description: >-
                            Total quoted amount in smallest currency unit
                            (cents)
                        created_at:
                          type: string
                          format: date-time
                          description: ISO 8601 timestamp when quote was created
                        currency:
                          type: string
                          description: ISO 4217 currency code (e.g., "USD", "EUR", "GBP")
                        id:
                          type: string
                          description: 'Unique quote identifier (format: "qt-YYYY-XXX")'
                        organization_id:
                          type: string
                          format: uuid
                          description: Organization ID that this quote is prepared for
                        quote_number:
                          type: string
                          description: Human-readable quote number for reference
                        status:
                          $ref: '#/components/schemas/StripeQuoteStatus'
                          description: Current quote status from Stripe
                        stripe_quote_url:
                          type: string
                          description: >-
                            Quote reference URL (may require provider account
                            access).
                          example: https://billing.example.com/quotes/qt_1234567890
                        valid_until:
                          type: string
                          format: date-time
                          description: ISO 8601 timestamp when the quote expires
                    description: The page of results.
                  offset:
                    type: integer
                    format: int64
                    description: >-
                      Offset used for this page (mirrors the `offset` query
                      parameter).
                  total:
                    type: integer
                    format: int64
                    description: >-
                      Total number of items matching the query (across all
                      pages).
        '401':
          description: Invalid or missing authentication token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Insufficient permissions to view quotes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    StripeQuoteStatus:
      type: string
      description: Quote status from Stripe's API.
      enum:
        - draft
        - open
        - accepted
        - canceled
        - stale
    ErrorResponse:
      type: object
      description: >-
        Error response body returned by all endpoints on 4xx/5xx failures.


        Every error response contains a human-readable message and the request
        ID

        for support correlation. The `request_id` is also returned in the

        `x-request-id` response header.
      required:
        - error
        - request_id
      properties:
        error:
          type: string
          description: Human-readable error description.
          example: experiment not found
        request_id:
          type: string
          description: >-
            Request identifier for support correlation (also in `x-request-id`
            header).
          example: req_019462a4-b1c2-7def-8901-23456789abcd
  securitySchemes:
    adaptyv_biscuits_v0:
      type: http
      scheme: bearer
      bearerFormat: Adaptyv Biscuits v0
      description: >-
        Biscuit-based bearer token. Obtain tokens from the Adaptyv Portal or via
        the `/tokens` endpoint. Tokens encode organization membership and
        role-based capabilities; the API verifies the token's cryptographic
        signature and authorization claims before processing requests. Use
        `/tokens/attenuate` to create restricted tokens for delegation.

````