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

# Renew prepaid term

> Renews the instance's running prepaid term, paid from credit now, for the length you choose (`term_months`: one of `subscription.renewal_options`; the current length when left out) at the term's rate with that length's discount. The renewal starts when the current term ends and runs for the chosen length. Allowed in the term's last 7 days (from `subscription.renewable_from`), by workspace owners and admins; earlier it is refused with 409 `NOT_RENEWABLE`. With `term_months`, send `expected_total_price` (that option's `total_price`): a different total is refused with 409 and `details.reason` `price_changed`, with the current `total_price_usd`. Renewing 3 months or more, or taking the workspace's prepaid terms over $1,000, needs a verified identity (403). A length not offered for this machine is refused with 409 and `details.reason` `term_not_offered`. One renewal per term: a repeat returns the renewal already bought; one for another length is refused with 409 and `details.reason` `already_renewed`, and nothing more is charged. Refused (403) for an agent sign-in (MCP or CLI agent token), with a message the agent can relay: a person renews in the dashboard. API keys can renew. Without a renewal the instance is terminated when its term ends.



## OpenAPI

````yaml /api-reference/openapi.json post /instances/{id}/renew
openapi: 3.1.0
info:
  title: Runcrate API
  version: 1.0.0
  summary: OpenAI-compatible inference API + GPU infrastructure API.
  description: >-
    Runcrate exposes two API surfaces. The inference API at
    `https://api.runcrate.ai/v1` is OpenAI-compatible: it accepts the standard
    OpenAI SDK with the base URL changed. The infrastructure API at
    `https://www.runcrate.ai/api/v1` manages GPU instances, jobs, persistent
    volumes, environments, SSH keys, templates, and billing. Both share a single
    `rc_live_*` API key.


    Pricing is per-token, per-image, per-second, or per-minute on the inference
    API (varies by model; see https://www.runcrate.ai/api/models/catalog for
    live rates) and per-second on GPU rentals (see
    https://www.runcrate.ai/pricing for hourly rates per GPU class).


    All infrastructure API responses are wrapped in `{ "data": ... }`. List
    responses also include a `meta` object with pagination cursors. Error
    responses use `{ "error": { "code": "...", "message": "..." } }`.
  termsOfService: https://www.runcrate.ai/terms
  contact:
    name: Runcrate
    url: https://www.runcrate.ai/contact
  license:
    name: Proprietary
    url: https://www.runcrate.ai/terms
servers:
  - url: https://api.runcrate.ai/v1
    description: Inference API (OpenAI-compatible)
  - url: https://www.runcrate.ai/api/v1
    description: >-
      Infrastructure API (instances, jobs, storage, environments, ssh-keys,
      templates, billing)
security:
  - ApiKeyAuth: []
tags:
  - name: Chat
    description: OpenAI-compatible chat completions.
  - name: Images
    description: Text-to-image generation.
  - name: Videos
    description: Async text-to-video and image-to-video generation.
  - name: Audio
    description: Text-to-speech and speech-to-text.
  - name: Embeddings
    description: Vector embeddings for RAG and search.
  - name: Models
    description: Model catalog discovery.
  - name: Instances
    description: GPU instance lifecycle.
  - name: Jobs
    description: >-
      Run one command on its own GPU machine. The machine stops, and billing
      ends, when the command exits.
  - name: Schedules
    description: >-
      Start an instance or a job later: once at a set time, or on a repeating
      cron schedule in your timezone.
  - name: Storage
    description: Persistent volume management.
  - name: Environments
    description: Resource isolation containers within a workspace.
  - name: Secrets
    description: >-
      Names of the secrets an environment's machines get. Values are set in the
      dashboard and never returned.
  - name: SSH Keys
    description: SSH key management for instance access.
  - name: Templates
    description: Pre-built instance images and configurations.
  - name: Billing
    description: Credit balance, transactions, usage metrics.
paths:
  /instances/{id}/renew:
    servers:
      - url: https://www.runcrate.ai/api/v1
    post:
      tags:
        - Instances
      summary: Renew prepaid term
      description: >-
        Renews the instance's running prepaid term, paid from credit now, for
        the length you choose (`term_months`: one of
        `subscription.renewal_options`; the current length when left out) at the
        term's rate with that length's discount. The renewal starts when the
        current term ends and runs for the chosen length. Allowed in the term's
        last 7 days (from `subscription.renewable_from`), by workspace owners
        and admins; earlier it is refused with 409 `NOT_RENEWABLE`. With
        `term_months`, send `expected_total_price` (that option's
        `total_price`): a different total is refused with 409 and
        `details.reason` `price_changed`, with the current `total_price_usd`.
        Renewing 3 months or more, or taking the workspace's prepaid terms over
        $1,000, needs a verified identity (403). A length not offered for this
        machine is refused with 409 and `details.reason` `term_not_offered`. One
        renewal per term: a repeat returns the renewal already bought; one for
        another length is refused with 409 and `details.reason`
        `already_renewed`, and nothing more is charged. Refused (403) for an
        agent sign-in (MCP or CLI agent token), with a message the agent can
        relay: a person renews in the dashboard. API keys can renew. Without a
        renewal the instance is terminated when its term ends.
      operationId: renewInstanceTerm
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                term_months:
                  type: integer
                  enum:
                    - 1
                    - 3
                    - 6
                    - 12
                  description: >-
                    How long to renew for. Defaults to the current term's
                    length.
                expected_total_price:
                  type: number
                  description: >-
                    Required with `term_months`: the `total_price` of that
                    length in `subscription.renewal_options`, in USD.
      responses:
        '200':
          description: The renewal.
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  data:
                    type: object
                    properties:
                      subscription_id:
                        type: string
                        format: uuid
                      term_months:
                        type: integer
                        enum:
                          - 1
                          - 3
                          - 6
                          - 12
                      term_price_usd:
                        type: number
                      starts_at:
                        type: string
                        format: date-time
                      ends_at:
                        type: string
                        format: date-time
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
components:
  responses:
    PaymentRequired:
      description: >-
        Insufficient credits, the environment has reached its monthly budget
        (error code `BUDGET_REACHED`), or launches are paused while a payment on
        the workspace is disputed (`PAYMENT_HOLD`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: Authenticated but not permitted for this resource.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Conflict:
      description: Conflict with existing resource (e.g. duplicate name).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: >-
                Machine-readable error code (e.g. `validation_error`,
                `unauthorized`, `not_found`, `insufficient_credits`,
                `rate_limited`, `internal_error`).
            message:
              type: string
              description: Human-readable error message.
            details:
              type: object
              additionalProperties: true
              description: Optional structured error context.
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      description: >-
        Use a Runcrate API key with the `rc_live_*` prefix as the bearer token.
        Create one at https://www.runcrate.ai/dashboard/api-keys.

````

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