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

# Create contract



## OpenAPI

````yaml /openapi.json post /v1/contract-tracker
openapi: 3.1.0
info:
  title: nOps Public API
  version: 1.0.0
  description: >-
    Programmatic access to nOps cost, budgets, cost allocation, Explorer
    dashboards, AI optimization, MAP manager, business unit economics, contract
    tracker, reports, recommendations, feed, scheduled prompts, and
    notifications. Authenticate with an API key (Bearer token). Available on
    Inform + Operate.
servers:
  - url: https://api.nops.io
    description: Production
security:
  - bearerApiKey: []
tags:
  - name: Recommendations
    description: Cost optimization recommendations.
  - name: Anomalies
    description: AWS cost anomaly detection.
  - name: Explorer
    description: Cost Explorer queries — summary, history, heatmap, and dimensions.
  - name: Budgets
    description: Budgets, planning grids, alerts, and exports.
  - name: Reports
    description: Saved reports — create, update, render, and send.
  - name: Feed
    description: Clara Feed runs and delivery history.
  - name: Scheduled prompts
    description: Scheduled Clara prompts and manual runs.
  - name: Notifications
    description: Schedule and manage notification deliveries.
  - name: Commitments
    description: Commitment inventory (reserved for future use).
  - name: Cost allocation
    description: Cost Allocation showbacks, rules, and spend analytics.
  - name: Explorer dashboards
    description: Explorer dashboard layouts and widgets.
  - name: AI optimization
    description: AI Optimization default dashboard and anomaly insights.
  - name: MAP Manager
    description: AWS Migration Acceleration Program (MAP) project tracking.
  - name: Business unit economics
    description: Business unit economics models, units, and portfolio summaries.
  - name: Contract tracker
    description: Enterprise contract tracking and burndown analytics.
paths:
  /v1/contract-tracker:
    post:
      tags:
        - Contract tracker
      summary: Create contract
      operationId: createContractTrackerContract
      parameters:
        - schema:
            type: string
            maxLength: 64
            description: >-
              Unique key for safe retries on write requests (required, max 64
              characters).
          required: true
          name: Idempotency-Key
          in: header
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minLength: 1
                  maxLength: 255
                service:
                  type: string
                  nullable: true
                costEntityName:
                  type: string
                  nullable: true
                startDate:
                  type: string
                  pattern: ^\d{4}-\d{2}-\d{2}$
                endDate:
                  type: string
                  pattern: ^\d{4}-\d{2}-\d{2}$
                yearlySpend:
                  type: object
                  additionalProperties:
                    type: number
                    nullable: true
                    minimum: 0
                yearlyUsage:
                  type: object
                  nullable: true
                  additionalProperties:
                    type: number
                    nullable: true
                    minimum: 0
                commitmentPeriod:
                  type: string
                  enum:
                    - MONTHLY
                    - QUARTERLY
                    - ANNUALLY
                  default: ANNUALLY
                discountPercentage:
                  type: number
                  nullable: true
                  minimum: 0
                  maximum: 100
                  default: 25
                marketplacePercentage:
                  type: number
                  nullable: true
                  minimum: 0
                  maximum: 100
                  default: 0
                isCrossService:
                  type: boolean
                  default: false
                isUsageBased:
                  type: boolean
                  default: false
                costUnit:
                  type: string
                  nullable: true
                selectedAwsServices:
                  type: array
                  items:
                    type: string
                  default: []
                selectedCostEntities:
                  type: array
                  items:
                    type: string
                  default: []
                selectedBillingEntities:
                  type: array
                  items:
                    type: string
                  default: []
                selectedMarketplaceEntities:
                  type: array
                  items:
                    type: string
                  default: []
              required:
                - name
                - startDate
                - endDate
                - yearlySpend
            example:
              name: AWS Enterprise Discount
              service: Amazon EC2
              startDate: '2025-01-01'
              endDate: '2027-12-31'
              yearlySpend:
                '2025': 1000000
              discountPercentage: 10
              marketplacePercentage: 0
              isCrossService: false
              isUsageBased: false
      responses:
        '201':
          description: Create contract
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiError'
              example:
                data:
                  contract:
                    id: contract-1
                    name: AWS Enterprise Discount
        '401':
          description: Unauthorized — invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiError'
              example:
                error:
                  code: forbidden_scope
                  message: 'API key is missing required scope: budgets:write'
                  request_id: 550e8400-e29b-41d4-a716-446655440000
        '403':
          description: Forbidden — insufficient permissions or entitlement
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiError'
              example:
                error:
                  code: forbidden_scope
                  message: 'API key is missing required scope: budgets:write'
                  request_id: 550e8400-e29b-41d4-a716-446655440000
      security:
        - bearerApiKey: []
components:
  schemas:
    PublicApiError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            request_id:
              type: string
          required:
            - code
            - message
            - request_id
      required:
        - error
  securitySchemes:
    bearerApiKey:
      type: http
      scheme: bearer
      description: >-
        API key from Settings → Security → API Keys. Pass as `Authorization:
        Bearer YOUR_API_KEY`.

````