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

# Create virtual asset

> Defines a new virtual asset for the project. Only available when virtual assets are enabled for the project. For `FIXED` rate source, an initial rate must be provided. For `HTTP` rate source, an endpoint URL is required.



## OpenAPI

````yaml /api-reference/openapi.json post /virtual-assets/
openapi: 3.1.0
info:
  title: Reap API
  version: 1.0.0
  description: Reap platform API
servers:
  - url: https://sandbox.api.reap.global
    description: Sandbox
  - url: https://prod.api.reap.global
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Accounts
  - name: Activities
  - name: Card Designs
  - name: Card Shipments
  - name: Card Transactions
  - name: Cards
  - name: Companies
  - name: Crypto Deposits
  - name: Policies
  - name: Simulation
  - name: Users
  - name: Virtual Asset Postings
  - name: Virtual Assets
  - name: Webhooks
paths:
  /virtual-assets/:
    post:
      tags:
        - Virtual Assets
      summary: Create virtual asset
      description: >-
        Defines a new virtual asset for the project. Only available when virtual
        assets are enabled for the project. For `FIXED` rate source, an initial
        rate must be provided. For `HTTP` rate source, an endpoint URL is
        required.
      operationId: create_virtual-assets
      parameters:
        - name: Reap-Version
          in: header
          required: true
          schema:
            type: string
            enum:
              - '2025-02-14'
            description: API version (YYYY-MM-DD)
            example: '2025-02-14'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                symbol:
                  type: string
                  pattern: ^[A-Z0-9_]{1,10}$
                  description: >-
                    Unique symbol within the project (e.g., `USDC`, `BTC`,
                    `GOLD`, `POINTS`). Uppercase alphanumeric and underscores
                    only.
                name:
                  type: string
                  minLength: 1
                  maxLength: 50
                  description: Display name for the virtual asset
                decimals:
                  type: integer
                  minimum: 0
                  maximum: 18
                  description: Number of decimal places for amounts
                rateSource:
                  type: string
                  enum:
                    - FIXED
                    - HTTP
                  description: >-
                    How the USD exchange rate is determined for this virtual
                    asset.
                  example: FIXED
                rate:
                  description: >-
                    Initial USD rate. Required when `rateSource` is `FIXED`.
                    Ignored for `HTTP`.
                  type: number
                  exclusiveMinimum: 0
                httpEndpoint:
                  description: >-
                    URL of the rate endpoint. Required when `rateSource` is
                    `HTTP`. Must be HTTPS and resolve to a public address (no
                    private IPs). The endpoint must respond to GET requests with
                    JSON: `{ "rate": <number> }` where rate is the USD value of
                    1 unit of this virtual asset. Rates are fetched periodically
                    by the platform.
                  type: string
                  format: uri
              required:
                - symbol
                - name
                - decimals
                - rateSource
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                symbol:
                  type: string
                  pattern: ^[A-Z0-9_]{1,10}$
                  description: >-
                    Unique symbol within the project (e.g., `USDC`, `BTC`,
                    `GOLD`, `POINTS`). Uppercase alphanumeric and underscores
                    only.
                name:
                  type: string
                  minLength: 1
                  maxLength: 50
                  description: Display name for the virtual asset
                decimals:
                  type: integer
                  minimum: 0
                  maximum: 18
                  description: Number of decimal places for amounts
                rateSource:
                  type: string
                  enum:
                    - FIXED
                    - HTTP
                  description: >-
                    How the USD exchange rate is determined for this virtual
                    asset.
                  example: FIXED
                rate:
                  description: >-
                    Initial USD rate. Required when `rateSource` is `FIXED`.
                    Ignored for `HTTP`.
                  type: number
                  exclusiveMinimum: 0
                httpEndpoint:
                  description: >-
                    URL of the rate endpoint. Required when `rateSource` is
                    `HTTP`. Must be HTTPS and resolve to a public address (no
                    private IPs). The endpoint must respond to GET requests with
                    JSON: `{ "rate": <number> }` where rate is the USD value of
                    1 unit of this virtual asset. Rates are fetched periodically
                    by the platform.
                  type: string
                  format: uri
              required:
                - symbol
                - name
                - decimals
                - rateSource
          multipart/form-data:
            schema:
              type: object
              properties:
                symbol:
                  type: string
                  pattern: ^[A-Z0-9_]{1,10}$
                  description: >-
                    Unique symbol within the project (e.g., `USDC`, `BTC`,
                    `GOLD`, `POINTS`). Uppercase alphanumeric and underscores
                    only.
                name:
                  type: string
                  minLength: 1
                  maxLength: 50
                  description: Display name for the virtual asset
                decimals:
                  type: integer
                  minimum: 0
                  maximum: 18
                  description: Number of decimal places for amounts
                rateSource:
                  type: string
                  enum:
                    - FIXED
                    - HTTP
                  description: >-
                    How the USD exchange rate is determined for this virtual
                    asset.
                  example: FIXED
                rate:
                  description: >-
                    Initial USD rate. Required when `rateSource` is `FIXED`.
                    Ignored for `HTTP`.
                  type: number
                  exclusiveMinimum: 0
                httpEndpoint:
                  description: >-
                    URL of the rate endpoint. Required when `rateSource` is
                    `HTTP`. Must be HTTPS and resolve to a public address (no
                    private IPs). The endpoint must respond to GET requests with
                    JSON: `{ "rate": <number> }` where rate is the USD value of
                    1 unit of this virtual asset. Rates are fetched periodically
                    by the platform.
                  type: string
                  format: uri
              required:
                - symbol
                - name
                - decimals
                - rateSource
      responses:
        '200':
          description: Virtual asset definition
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    description: Unique virtual asset identifier
                  symbol:
                    type: string
                    description: Virtual asset symbol
                  name:
                    type: string
                    description: Display name
                  decimals:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                    description: Number of decimal places for amounts
                  status:
                    type: string
                    enum:
                      - ACTIVE
                      - DISABLED
                    description: >-
                      Lifecycle status. Disabled assets are excluded from
                      balance computation.
                    example: ACTIVE
                  rateSource:
                    type: string
                    enum:
                      - FIXED
                      - HTTP
                    description: >-
                      How the USD exchange rate is determined for this virtual
                      asset.
                    example: FIXED
                  httpEndpoint:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: Rate endpoint URL. Present only for `HTTP` rate source.
                  currentRate:
                    anyOf:
                      - type: number
                        exclusiveMinimum: 0
                      - type: 'null'
                    description: >-
                      Latest known USD rate per unit. Null if no rate snapshot
                      exists yet.
                  currentRateUpdatedAt:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: >-
                      ISO 8601 timestamp of the latest rate snapshot. Null when
                      `currentRate` is null.
                  allocated:
                    type: object
                    properties:
                      amount:
                        type: string
                        description: >-
                          Total allocated across all users in this project, in
                          the virtual asset's native units. Decimal string
                          padded to the asset's `decimals`.
                      value:
                        anyOf:
                          - type: number
                          - type: 'null'
                        description: >-
                          USD value of `amount` at the current rate. Null when
                          no rate is available (e.g. disabled assets with no
                          recent snapshot).
                    required:
                      - amount
                      - value
                    description: >-
                      Total amount of this virtual asset allocated across all
                      accounts in the project.
                  createdAt:
                    type: string
                    description: ISO 8601 creation timestamp
                  updatedAt:
                    type: string
                    description: ISO 8601 last update timestamp
                required:
                  - id
                  - symbol
                  - name
                  - decimals
                  - status
                  - rateSource
                  - httpEndpoint
                  - currentRate
                  - currentRateUpdatedAt
                  - allocated
                  - createdAt
                  - updatedAt
        '400':
          description: Response for status 400
          content:
            application/json:
              schema:
                anyOf:
                  - type: object
                    properties:
                      error:
                        type: object
                        properties:
                          code:
                            type: string
                            const: VIRTUAL_ASSETS_NOT_ENABLED
                          message:
                            type: string
                          detail:
                            anyOf:
                              - type: object
                                additionalProperties: {}
                              - type: 'null'
                        required:
                          - code
                          - message
                          - detail
                    required:
                      - error
                    title: VirtualAssetsNotEnabledError
                    description: Virtual assets are not enabled for this project
                  - type: object
                    properties:
                      error:
                        type: object
                        properties:
                          code:
                            type: string
                            const: INVALID_RATE_SOURCE_CONFIG
                          message:
                            type: string
                          detail:
                            anyOf:
                              - type: object
                                additionalProperties: {}
                              - type: 'null'
                        required:
                          - code
                          - message
                          - detail
                    required:
                      - error
                    title: InvalidRateSourceConfigError
                    description: Invalid rate source configuration
        '409':
          description: Virtual asset with this symbol already exists in the project
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        const: DUPLICATE_VIRTUAL_ASSET_SYMBOL
                      message:
                        type: string
                      detail:
                        anyOf:
                          - type: object
                            additionalProperties: {}
                          - type: 'null'
                    required:
                      - code
                      - message
                      - detail
                required:
                  - error
                title: DuplicateVirtualAssetSymbolError
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key as Bearer token

````