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

# Fee-bump a confidential transfer (the core payout call)

> Accepts a browser-built, **employer-sourced** `confidential_transfer` signed with `signTransaction`, binds it to your session account, and fee-bumps it (CAP-15) so you pay 0 XLM. The amount stays inside the proof and is never an argument here. Only Stellar (SEP-10) sessions may call this; the inner transaction's source must equal your session account.




## OpenAPI

````yaml /openapi.yaml post /transfer
openapi: 3.1.0
info:
  title: Confiroll payroll-api
  version: 1.0.0
  description: >
    The Confiroll BFF (backend-for-frontend) for confidential contractor payroll
    on Stellar **testnet**. It issues session JWTs (SEP-10 wallet or Privy
    email) and fee-bumps browser-signed confidential transfers (Fork B). It
    holds operational keys only, never a user's signing or viewing key.


    Every handled error returns `{ "error": string }`. Request bodies are
    limited to 256 KiB.
servers:
  - url: https://api.confiroll.com
    description: Live testnet deployment
security: []
tags:
  - name: Health
    description: Service health.
  - name: Auth
    description: Session issuance via SEP-10 (wallet) or Privy (email).
  - name: Transfers
    description: The core confidential-payout call (Fork B fee-bump).
  - name: Batch runs
    description: Run a confidential batch of payouts.
  - name: Withdrawals and disclosure
    description: >-
      Withdraw and auditor disclosure. These routes return 501; the operations
      run in the client tooling.
  - name: Session and role
    description: Resolves the signed-in user's role.
  - name: Contractors
    description: Contractor directory (public data only).
  - name: Batches
    description: SDP-aligned batch (disbursement) records.
  - name: Payouts
    description: SDP-aligned payout (payment) records.
  - name: Funding
    description: Faucet and CCTP vault state.
paths:
  /transfer:
    post:
      tags:
        - Transfers
      summary: Fee-bump a confidential transfer (the core payout call)
      description: >
        Accepts a browser-built, **employer-sourced** `confidential_transfer`
        signed with `signTransaction`, binds it to your session account, and
        fee-bumps it (CAP-15) so you pay 0 XLM. The amount stays inside the
        proof and is never an argument here. Only Stellar (SEP-10) sessions may
        call this; the inner transaction's source must equal your session
        account.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                signedXDR:
                  type: string
                  description: A fully client-signed inner transaction (base64 XDR).
              required:
                - signedXDR
      responses:
        '200':
          description: Settled on-chain
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransferResult'
              example:
                hash: f621412b...
                status: SUCCESS
        '400':
          description: Missing or malformed XDR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                missing:
                  value:
                    error: signedXDR required
                malformed:
                  value:
                    error: malformed transaction XDR
        '401':
          description: Missing or invalid session
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: missing bearer token
        '403':
          description: The inner transaction is not sourced by your session account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: transaction source is not your session account
        '422':
          description: Sponsor refused (not allow-listed / over fee cap / over quota)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Transfer failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: transfer failed
        '501':
          description: Privy sessions cannot transfer. Use a Stellar wallet session.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: >-
                  transfer binding for Privy sessions not implemented yet — use
                  a Stellar wallet
      security:
        - bearerAuth: []
components:
  schemas:
    TransferResult:
      type: object
      properties:
        hash:
          type: string
          description: The settled transaction hash.
        status:
          type: string
          enum:
            - SUCCESS
      required:
        - hash
        - status
    Error:
      type: object
      description: Standard error shape for all handled errors.
      properties:
        error:
          type: string
          description: Human-readable message.
      required:
        - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        A session JWT from `/auth/sep10/verify` or `/auth/privy`. Default TTL 1
        hour.

````