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

# Send signed transaction

> Requires key scope `send` and the builder action that produced the ticket.

Before the RPC call, the relay checks the ticket signature and expiry, the key, cluster, and program, current vault authority, that the message is unchanged, the fee payer, and the manager's Ed25519 signature. A failed check returns 403 with code `InvalidTicket`, `Forbidden`, `InvalidTransaction`, or `InvalidSignature`. A `phoenix/onboard` ticket returns 403: submit it with `POST /transactions/phoenix/onboard/submit`.

`status: "pending"` means the RPC accepted the transaction. `status: "unknown"` means the RPC call failed in a way that leaves the outcome ambiguous. In both cases, keep `signature` and `receipt` and poll `GET /transactions/status`. A preflight rejection returns 422 and nothing was sent.



## OpenAPI

````yaml /api-reference/openapi.json post /transactions/send
openapi: 3.1.0
info:
  title: Hedgin manager bot API
  version: 1.0.0
  description: >-
    Versioned HTTP API for approved manager bots. Reads vault state and builds
    unsigned Solana transactions. The bot signs locally with the vault's current
    authority key. Runs only on Solana mainnet-beta.
servers:
  - url: https://hedgin.xyz/api/external/v1
    description: Production (Solana mainnet-beta)
security:
  - bearerAuth: []
tags:
  - name: Vault reads
  - name: Market reads
  - name: Jupiter transactions
  - name: Meteora DLMM transactions
  - name: Phoenix transactions
  - name: Vault and strategy transactions
  - name: Send and status
paths:
  /transactions/send:
    post:
      tags:
        - Send and status
      summary: Send signed transaction
      description: >-
        Requires key scope `send` and the builder action that produced the
        ticket.


        Before the RPC call, the relay checks the ticket signature and expiry,
        the key, cluster, and program, current vault authority, that the message
        is unchanged, the fee payer, and the manager's Ed25519 signature. A
        failed check returns 403 with code `InvalidTicket`, `Forbidden`,
        `InvalidTransaction`, or `InvalidSignature`. A `phoenix/onboard` ticket
        returns 403: submit it with `POST /transactions/phoenix/onboard/submit`.


        `status: "pending"` means the RPC accepted the transaction. `status:
        "unknown"` means the RPC call failed in a way that leaves the outcome
        ambiguous. In both cases, keep `signature` and `receipt` and poll `GET
        /transactions/status`. A preflight rejection returns 422 and nothing was
        sent.
      operationId: sendTransaction
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendRequest'
            example:
              transaction: AQABAg...
              ticket: eyJraW5kIjoiYnVpbGQi....mac
      responses:
        '200':
          description: Relay accepted or outcome unknown.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SendResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '422':
          $ref: '#/components/responses/Unprocessable'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  schemas:
    SendRequest:
      type: object
      additionalProperties: false
      required:
        - transaction
        - ticket
      properties:
        transaction:
          type: string
          format: byte
          maxLength: 3000
          description: >-
            The built transaction after the manager signed it, base64. The
            message must be byte-for-byte the one the build returned.
        ticket:
          type: string
          maxLength: 5000
          description: The `ticket` from the same build step.
    SendResponse:
      type: object
      required:
        - signature
        - receipt
        - status
      properties:
        signature:
          type: string
          description: Base58 transaction signature (the manager's fee-payer signature).
        receipt:
          type: string
          description: >-
            Status receipt for `GET /transactions/status`. Valid for 24 hours
            and only for the key that sent it.
        status:
          type: string
          enum:
            - pending
            - unknown
          description: >-
            `pending`: the relay accepted the transaction. `unknown`: the
            outcome is ambiguous and the transaction may have landed. Neither
            value means confirmed.
    Error:
      type: object
      description: >-
        Every error response uses this envelope. Responses with status 500, 502,
        or 503 always carry the message `Service temporarily unavailable`.
        Responses with status 422 always carry the message `Transaction rejected
        during simulation or preflight`. In both cases `code` still names the
        cause.
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: >-
                Stable machine-readable code, such as `Validation`, `Forbidden`,
                or a decoded program error name.
              example: Validation
            message:
              type: string
              description: Human-readable detail. Never contains provider logs.
              example: vault must be a public key
  responses:
    BadRequest:
      description: >-
        Invalid path, query, or body. Builder messages name the field, such as
        `amount: must be a non-negative integer string`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: Validation
              message: vault must be a public key
    Unauthorized:
      description: Missing, malformed, unknown, revoked, or expired API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: Unauthorized
              message: Invalid API key
    Forbidden:
      description: >-
        The key lacks the required scope, the vault is outside the key's
        allowlist, or the key's manager is not the vault's current on-chain
        authority.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: Forbidden
              message: Action is not enabled for this key
    NotFound:
      description: Unknown route, or the vault, mint, pool, or strategy does not exist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: NotFound
              message: Vault not found
    PayloadTooLarge:
      description: Request body larger than 16,384 bytes.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: BodyTooLarge
              message: Request body is too large
    Unprocessable:
      description: >-
        Simulation or RPC preflight rejected the transaction, or it does not fit
        in Solana transactions. `code` is the decoded program error name when
        one exists.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: SlippageToleranceExceeded
              message: Transaction rejected during simulation or preflight
    TooManyRequests:
      description: A rate limit is exhausted.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: RateLimited
              message: Too many requests, slow down
    InternalError:
      description: >-
        Internal error, including a builder that returned an invalid transaction
        (`BuildFailed`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: Internal
              message: Service temporarily unavailable
    ServiceUnavailable:
      description: RPC, key store, or service configuration unavailable.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: RpcUnavailable
              message: Service temporarily unavailable
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: hv1_<id>_<secret>
      description: >-
        API key issued by a Hedgin administrator, in the form
        `hv1_<id>_<secret>`. `<id>` is 1 to 48 characters and `<secret>` is 32
        to 128 characters, both from `[A-Za-z0-9_-]`.

````

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