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

# Create a new trading plan

> Create a new trading plan for your organization. **Admin only**.

**Required fields:**
| Field | Description |
|-------|-------------|
| `name` | Plan name (unique within org) |
| `price` | Plan price |
| `accountSize` | Account size in $ |
| `tradingRuleId` | ID of the trading rule to use |

**Optional fields:**
| Field | Default | Description |
|-------|---------|-------------|
| `description` | null | Plan description |
| `currency` | "USD" | Currency code |
| `durationDays` | null | Duration in days (null = unlimited) |
| `isActive` | true | Whether plan is active for purchase |
| `metadata` | {} | Custom organization data |

**Example:**
```bash
curl -X POST "https://api.hyperprop.com/platform/v1/organization/trading-plans" \
  -H "X-API-Key: hp_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "100K Evaluation",
    "description": "Our flagship 100K evaluation challenge",
    "price": 299,
    "accountSize": 100000,
    "tradingRuleId": "660e8400-e29b-41d4-a716-446655440000",
    "durationDays": 30,
    "metadata": { "featured": true }
  }'
```

**Error Codes:**
| Code | Description |
|------|-------------|
| `PLAN_NAME_EXISTS` | A plan with this name already exists |
| `RULE_NOT_FOUND` | Trading rule ID not found |
| `RULE_NOT_IN_ORG` | Trading rule belongs to different org |
| `ADMIN_REQUIRED` | Only admins can create plans |



## OpenAPI

````yaml /api-reference/openapi.json post /v1/organization/trading-plans
openapi: 3.0.0
info:
  title: Hyperprop Platform API
  version: 1.0.0
  description: >-
    REST API for the Hyperprop Trading Platform — provision evaluation and
    funded trading accounts, manage traders and plans, react to account
    lifecycle events via signed webhooks, and reconcile billing. Built for prop
    firms integrating from their own backend.


    Authentication, quick start, error handling, idempotency, pagination, custom
    metadata, webhooks, and the MCP connector are documented at
    https://docs.hyperprop.com.
  x-logo:
    url: https://app.hyperprop.com/logo-icon.svg
    altText: Hyperprop
    href: https://hyperprop.com
servers:
  - url: https://api.hyperprop.com/platform
    description: Production
security: []
tags:
  - name: Trading accounts
    description: Create, update, and inspect trading accounts.
  - name: Traders
    description: Look up and update the traders in your organization.
  - name: Trading plans
    description: Define the plans you sell.
  - name: Trading rules
    description: Define how accounts are evaluated.
  - name: Lockouts
    description: Pause and resume trading on an account.
  - name: Payouts
    description: Check payout eligibility and record payouts.
  - name: Purchases
    description: Purchases recorded for your organization.
  - name: Time Machine
    description: Restore accounts to an earlier trading day or instant.
  - name: Webhooks
    description: Register webhook endpoints and inspect deliveries.
  - name: Events
    description: Your organization's event history and real-time event stream.
  - name: Reconciliation
    description: Balances, end-of-day snapshots, and fills for reconciliation.
  - name: Analytics
    description: Organization performance and plan economics.
  - name: Billing
    description: 'Your Hyperprop bill: activity, billing cycles, and forecasts.'
  - name: Team and roles
    description: Manage dashboard access for your staff.
  - name: API keys
    description: Manage your organization's API key.
  - name: Logs and health
    description: API request logs, the audit log, and integration health.
  - name: Organization profile
    description: Your organization's profile and logo.
  - name: Support
    description: Open and follow up on support tickets.
  - name: Partner access
    description: >-
      Read a trader's journal as an approved partner app, with the trader's own
      key.
paths:
  /v1/organization/trading-plans:
    post:
      tags:
        - Trading plans
      summary: Create a new trading plan
      description: >-
        Create a new trading plan for your organization. **Admin only**.


        **Required fields:**

        | Field | Description |

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

        | `name` | Plan name (unique within org) |

        | `price` | Plan price |

        | `accountSize` | Account size in $ |

        | `tradingRuleId` | ID of the trading rule to use |


        **Optional fields:**

        | Field | Default | Description |

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

        | `description` | null | Plan description |

        | `currency` | "USD" | Currency code |

        | `durationDays` | null | Duration in days (null = unlimited) |

        | `isActive` | true | Whether plan is active for purchase |

        | `metadata` | {} | Custom organization data |


        **Example:**

        ```bash

        curl -X POST
        "https://api.hyperprop.com/platform/v1/organization/trading-plans" \
          -H "X-API-Key: hp_live_your_key_here" \
          -H "Content-Type: application/json" \
          -d '{
            "name": "100K Evaluation",
            "description": "Our flagship 100K evaluation challenge",
            "price": 299,
            "accountSize": 100000,
            "tradingRuleId": "660e8400-e29b-41d4-a716-446655440000",
            "durationDays": 30,
            "metadata": { "featured": true }
          }'
        ```


        **Error Codes:**

        | Code | Description |

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

        | `PLAN_NAME_EXISTS` | A plan with this name already exists |

        | `RULE_NOT_FOUND` | Trading rule ID not found |

        | `RULE_NOT_IN_ORG` | Trading rule belongs to different org |

        | `ADMIN_REQUIRED` | Only admins can create plans |
      operationId: postV1OrganizationTradingplans
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Model574'
      responses:
        '201':
          description: Plan created successfully
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Model577'
        '400':
          description: Invalid request data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Model212'
        '401':
          description: Authentication required
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Model9'
        '403':
          description: Forbidden - Admin required or rule not in org
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Model578'
        '404':
          description: Not Found - Trading rule not found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Model579'
        '409':
          description: Conflict - Plan name already exists
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Model580'
        '500':
          description: An unexpected error occurred
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Model5'
      security:
        - X-API-Key: []
components:
  schemas:
    Model574:
      type: object
      properties:
        name:
          type: string
          description: Plan name (must be unique within your organization)
          example: 100K Evaluation
        description:
          type: string
          description: Plan description
          example: Our flagship 100K evaluation challenge
        price:
          type: number
          description: >-
            Plan price in the plan currency. OPTIONAL — omit (or send 0) for
            plans that are provisioned via the API rather than sold through a
            checkout.
          example: 299
          default: 0
          minimum: 0
        currency:
          type: string
          description: 'Currency code (default: USD)'
          example: USD
          default: USD
        durationDays:
          type: number
          description: Plan duration in days. Omit or send null for unlimited duration.
          example: 30
        accountSize:
          type: number
          description: Account size ($)
          example: 100000
        tradingRuleId:
          type: string
          description: Trading rule ID to use for this plan
          example: 660e8400-e29b-41d4-a716-446655440000
          x-format:
            guid: true
        isActive:
          type: boolean
          description: Whether the plan is active for purchase
          default: true
        metadata:
          $ref: '#/components/schemas/Model573'
      required:
        - name
        - accountSize
        - tradingRuleId
    Model577:
      type: object
      properties:
        success:
          type: boolean
          example: true
        message:
          type: string
          example: Trading plan created successfully
        data:
          $ref: '#/components/schemas/Model576'
    Model212:
      type: object
      properties:
        success:
          type: boolean
          description: Always false on errors
          example: false
        statusCode:
          type: number
          example: 400
        error:
          type: string
          example: Bad Request
        message:
          type: string
          example: Invalid request data
        code:
          type: string
          description: Machine-readable error code — switch on this, not on message text
          example: BAD_REQUEST
    Model9:
      type: object
      properties:
        success:
          type: boolean
          description: Always false on errors
          example: false
        statusCode:
          type: number
          example: 401
        error:
          type: string
          example: Unauthorized
        message:
          type: string
          example: Authentication required
        code:
          type: string
          description: Machine-readable error code — switch on this, not on message text
          example: UNAUTHORIZED
    Model578:
      type: object
      properties:
        statusCode:
          type: number
          example: 403
        error:
          type: string
          example: Forbidden
        message:
          type: string
          example: Trading rule does not belong to your organization
        code:
          type: string
          example: RULE_NOT_IN_ORG
    Model579:
      type: object
      properties:
        statusCode:
          type: number
          example: 404
        error:
          type: string
          example: Not Found
        message:
          type: string
          example: Trading rule not found
        code:
          type: string
          example: RULE_NOT_FOUND
    Model580:
      type: object
      properties:
        statusCode:
          type: number
          example: 409
        error:
          type: string
          example: Conflict
        message:
          type: string
          example: A trading plan with this name already exists
        code:
          type: string
          example: PLAN_NAME_EXISTS
    Model5:
      type: object
      properties:
        success:
          type: boolean
          description: Always false on errors
          example: false
        statusCode:
          type: number
          example: 500
        error:
          type: string
          example: Internal Server Error
        message:
          type: string
          example: An unexpected error occurred
        code:
          type: string
          description: Machine-readable error code — switch on this, not on message text
          example: INTERNAL_ERROR
    Model573:
      type: object
      description: Custom metadata
      example:
        featured: true
        discount: 10
        promoCode: LAUNCH2025
    Model576:
      type: object
      example:
        id: 550e8400-e29b-41d4-a716-446655440000
        name: 100K Evaluation
        price: 499
        accountSize: 100000
        isActive: true
        tradingRule:
          id: 6cf3821e-0ad4-427f-85a5-c3d498aa342e
          name: Aggressive Rules
        createdAt: '2026-02-18T21:19:57.328Z'
      properties:
        id:
          type: string
        name:
          type: string
        price:
          type: number
        accountSize:
          type: number
        isActive:
          type: boolean
        tradingRule:
          $ref: '#/components/schemas/Model575'
        createdAt:
          type: string
    Model575:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
  securitySchemes:
    X-API-Key:
      type: apiKey
      name: X-API-Key
      in: header
      description: >-
        Organization API key. Format: "hp_live_{key}". Organization admins
        manage the key in the dashboard.

````

## Related topics

- [Create a new trading rule](/platform-api/trading-rules/create-a-new-trading-rule.md)
- [Create a trading account](/platform-api/trading-accounts/create-a-trading-account.md)
- [Update a trading plan](/platform-api/trading-plans/update-a-trading-plan.md)
- [Bulk-create unlinked accounts with import keys](/platform-api/trading-accounts/bulk-create-unlinked-accounts-with-import-keys.md)
- [Create admin lockout](/platform-api/lockouts/create-admin-lockout.md)


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