---
title: "Dry-run estimate of the next renewal invoice"
description: "\"Next Billing Amount\"."
canonical_url: "https://twominutebilling.com/help/developers/api-reference/subscriptions/dry-run-estimate-of-the-next-renewal-invoice"
---
# Dry-run estimate of the next renewal invoice

> "Next Billing Amount".

<api-operation method="GET" path="/v1/businesses/{biz}/subscriptions/{sub}/renewal_estimate">
<template v-slot:docs="">

No body, no writes. `estimate` is null when there is no next term to bill (cancelling, non-renewing, or the cycle cap reached). By default it excludes metered usage, which is not final until the term ends, so it is the fixed-charge floor; `include_usage_so_far=true` adds the usage recorded so far.

## Path parameters

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        biz
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      <strong>
        yes
      </strong>
    </td>
    
    <td>
      Business id (biz_…)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        sub
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      <strong>
        yes
      </strong>
    </td>
    
    <td>
      Subscription id (sub_…)
    </td>
  </tr>
</tbody>
</table>

## Query parameters

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        ignore_scheduled_cancellation
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      <code>
        true
      </code>
      
       prices the renewal a pending cancellation (end-of-term flag, specific date, or exhausted cycles) would stop, instead of returning null.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ignore_scheduled_changes
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Omitted, a scheduled change that lands at or before the renewal is applied first, so the estimate prices the items it leaves (<code>
        estimate.scheduled_change
      </code>
      
       names it). A change it cannot price here (a pause, more than one change, or a change that starts a new term) makes <code>
        estimate
      </code>
      
       null and is named in <code>
        unpriced_scheduled_change
      </code>
      
      ; <code>
        false
      </code>
      
       refuses (400) instead. <code>
        true
      </code>
      
       prices today's items.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        include_delayed_charges
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Queued unbilled charges ride on the renewal and are included by default; <code>
        false
      </code>
      
       leaves them out.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        use_existing_balances
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      Customer credit (promotional, refundable, excess) is applied by default; <code>
        false
      </code>
      
       previews with none.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        include_usage_so_far
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      <code>
        true
      </code>
      
       adds the metered usage recorded so far in the current term, with its minimum-spend true-up, when this renewal is the invoice that bills it. Coupons, credits and tax then apply as on the real invoice. Default <code>
        false
      </code>
      
      : the fixed-charge estimate.
    </td>
  </tr>
</tbody>
</table>

## Response

<table>
<thead>
  <tr>
    <th>
      Field
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        object
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      The object type; always <code>
        renewal_estimate
      </code>
      
      . One of <code>
        renewal_estimate
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        subscription
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      The subscription the estimate is for.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        estimate
      </code>
    </td>
    
    <td>
      <code>
        object
      </code>
    </td>
    
    <td>
      The estimated renewal invoice.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        unpriced_scheduled_change
      </code>
    </td>
    
    <td>
      <code>
        object
      </code>
    </td>
    
    <td>
      Set when <code>
        estimate
      </code>
      
       is null because a scheduled change or pause that lands first cannot be priced here.
    </td>
  </tr>
</tbody>
</table>

## Status codes

<table>
<thead>
  <tr>
    <th>
      Status
    </th>
    
    <th>
      Meaning
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        200
      </code>
    </td>
    
    <td>
      Success
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        400
      </code>
    </td>
    
    <td>
      Invalid proration state
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        404
      </code>
    </td>
    
    <td>
      No such subscription
    </td>
  </tr>
</tbody>
</table>
</template>

<template v-slot:request="">

```bash [Request]
curl "$TMBILLING_URL/v1/businesses/biz_XXXXXXXXXXXX01/subscriptions/sub_XXXXXXXXXXXX01/renewal_estimate" \
  -H "Authorization: Bearer $TMBILLING_API_KEY"
```

</template>

<template v-slot:response="">
<code-group>

```json [200 OK]
{
  "object": "renewal_estimate",
  "subscription": "sub_XXXXXXXXXXXX01",
  "estimate": {},
  "unpriced_scheduled_change": {
    "id": "3f6c1b9e-8a2d-4c5e-9f10-2b7d4e6a8c01",
    "type": "change",
    "effective_at": "2026-03-14T09:30:00Z"
  }
}
```

```json [400 Bad Request]
{
  "error": {
    "type": "invalid_request_error",
    "message": "Invalid proration state"
  }
}
```

```json [404 Not Found]
{
  "error": {
    "type": "invalid_request_error",
    "message": "No such subscription"
  }
}
```

</code-group>
</template>
</api-operation>


## Sitemap

See the full [sitemap](https://twominutebilling.com/sitemap.md) for all pages.
