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

# Create a short-lived merchant payout quote

> Quotes are bound to the authenticated merchant user and expire after five minutes. The gross amount and all fees are USD cents. Skinloop deducts a fixed $2.00 ERC20 network fee and a 4% payout fee, then applies a fixed accounting conversion of 1 USD to 1 USDT. Once accepted, the exact USDT amount is locked through manual review and Skinloop absorbs price and network-cost variance. This is a dashboard-session endpoint, not an API-key endpoint for unattended merchant server integrations.




## OpenAPI

````yaml /openapi.yaml post /v1/dashboard/payouts/quote
openapi: 3.1.0
info:
  title: Skinloop API
  version: 1.1.0-draft
  description: |
    Public contract for Skinloop merchant payments, hosted checkout status,
    merchant dashboard reads, and merchant webhooks. Skinloop never exposes
    credentials, private identifiers, trade URLs, or client tokens.
servers:
  - url: https://api.skinloop.io
    description: Production
security: []
tags:
  - name: Payments
  - name: Checkout
  - name: Reporting
  - name: Dashboard
paths:
  /v1/dashboard/payouts/quote:
    post:
      tags:
        - Dashboard
      summary: Create a short-lived merchant payout quote
      description: >
        Quotes are bound to the authenticated merchant user and expire after
        five minutes. The gross amount and all fees are USD cents. Skinloop
        deducts a fixed $2.00 ERC20 network fee and a 4% payout fee, then
        applies a fixed accounting conversion of 1 USD to 1 USDT. Once accepted,
        the exact USDT amount is locked through manual review and Skinloop
        absorbs price and network-cost variance. This is a dashboard-session
        endpoint, not an API-key endpoint for unattended merchant server
        integrations.
      operationId: quoteMerchantPayout
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PayoutQuoteRequest'
      responses:
        '200':
          description: Locked payout quote
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayoutQuoteResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/InsufficientBalance'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      security:
        - clerkBearer: []
components:
  schemas:
    PayoutQuoteRequest:
      type: object
      additionalProperties: false
      required:
        - amountMinor
        - destination
      properties:
        amountMinor:
          type: string
          pattern: ^[1-9][0-9]{0,17}$
          description: Gross USD cents; must be at least "1000" ($10.00).
        destination:
          type: string
          pattern: ^0x[0-9a-fA-F]{40}$
    PayoutQuoteResponse:
      type: object
      required:
        - quote
      properties:
        quote:
          $ref: '#/components/schemas/PayoutQuote'
    PayoutQuote:
      type: object
      additionalProperties: false
      required:
        - id
        - amountMinor
        - transactionFeeMinor
        - payoutFeeMinor
        - networkFeeMinor
        - netAmountMinor
        - conversionRate
        - conversionPolicy
        - destination
        - expiresAt
      properties:
        id:
          type: string
          format: uuid
        amountMinor:
          type: string
          description: Gross USD cents deducted from available balance
        transactionFeeMinor:
          type: string
          const: '0'
          description: USD cents
        payoutFeeMinor:
          type: string
          description: Four percent of gross USD
          rounded half-up to cents: null
        networkFeeMinor:
          type: string
          const: '200'
          description: Fixed ERC20 fee in USD cents
        netAmountMinor:
          type: string
          description: Exact hundredths of USDT sent after fees
        conversionRate:
          type: string
          const: '1.000000'
          description: Fixed USDT received per USD after fees
        conversionPolicy:
          type: string
          const: fixed_usd_to_usdt_1_to_1
        destination:
          type: string
          pattern: ^0x[0-9a-fA-F]{40}$
        expiresAt:
          type: string
          format: date-time
    Error:
      type: object
      additionalProperties: false
      required:
        - error
      properties:
        error:
          type: object
          additionalProperties: false
          required:
            - code
            - message
            - request_id
          properties:
            code:
              type: string
            message:
              type: string
            request_id:
              type: string
  responses:
    BadRequest:
      description: Invalid request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Authentication or signature verification failed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InsufficientBalance:
      description: Insufficient settled available balance
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServiceUnavailable:
      description: Checkout service is not configured or unavailable
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    clerkBearer:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Clerk session token for the merchant dashboard.

````