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

# Issue/top up a card or order a service

> Required permission: `cards:write or services:write`. Sandbox is isolated from live funds. Live integration availability is checked server-side.



## OpenAPI

````yaml https://specs.planewallet.org/openapi.json POST /api/v1/operations
openapi: 3.0.3
info:
  title: Plane Business API
  version: 1.0.0
  description: >-
    Company-scoped cards and services. Create keys in the Developers section.
    Operations reserve funds and return queued. Poll operations/{id} or
    subscribe to webhooks for completion. Unknown outcomes remain in
    manual_review with funds held. Live services and TON deposits require
    dedicated configuration and company verification. Webhooks carry a
    Plane-Signature header: t=<unix_seconds>,v1=<HMAC_SHA256(secret,t + "." +
    raw_body)>. Verify the signature and timestamp tolerance, deduplicate by
    event ID, then acknowledge with 2xx. API keys must never be embedded in
    client applications.
servers:
  - url: https://business.planewallet.org
    description: Plane Business API
security: []
paths:
  /api/v1/operations:
    post:
      summary: Issue/top up a card or order a service
      description: >-
        Required permission: `cards:write or services:write`. Sandbox is
        isolated from live funds. Live integration availability is checked
        server-side.
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          schema:
            type: string
            maxLength: 128
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperationInput'
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Operation'
        '400':
          description: Validation or business rule failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Invalid or revoked API key
        '403':
          description: Scope, verification or capability denied
        '404':
          description: Object not found in this company
        '409':
          description: Idempotency payload conflict or changed quote
        '429':
          description: Rate limited
      security:
        - bearerAuth: []
components:
  schemas:
    OperationInput:
      type: object
      additionalProperties: false
      required:
        - type
        - productId
        - amount
        - expectedTotal
      properties:
        type:
          type: string
          enum:
            - issue
            - topup
            - service
        productId:
          type: string
        amount:
          type: string
          pattern: ^\d+(\.\d{1,2})?$
          example: '50.00'
        expectedTotal:
          type: string
          pattern: ^\d+(\.\d{1,2})?$
          example: '50.00'
        holderId:
          type: string
          description: Required for issue
        cardId:
          type: string
          description: Required for topup
        name:
          type: string
        recipient:
          type: string
          description: Required for service
    Operation:
      type: object
      properties:
        id:
          type: string
        type:
          type: string
        status:
          type: string
        amount:
          type: string
          pattern: ^\d+(\.\d{1,2})?$
          example: '50.00'
        fee:
          type: string
          pattern: ^\d+(\.\d{1,2})?$
          example: '50.00'
        total:
          type: string
          pattern: ^\d+(\.\d{1,2})?$
          example: '50.00'
        result:
          type: object
          properties:
            cardId:
              type: string
            receipt:
              type: string
        createdAt:
          type: string
          format: date-time
    Error:
      type: object
      properties:
        statusCode:
          type: integer
        message:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Plane API key

````