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

# Build a createTasks transaction

> Build one unsigned createTasks escrow tx for several tasks (bulk posting; sign + fund from YOUR wallet). Only when GET /api/v1/health/settlement reports batchCreate.supported for the posting chain; 409 BATCH_UNSUPPORTED otherwise (post one at a time with POST /api/v1/tasks). Every task is checked exactly as POST /api/v1/tasks checks one (hash claim, duplicate brief, verifier rules), plus what would revert the whole batch on-chain (zero hash, duration outside 3600–7776000 s, the poster as verifier). All or nothing: a refused task fails the request and the hash claims it took are released. Approve the escrow for the sum of the amounts first.



## OpenAPI

````yaml https://api.blindmarket.xyz/api/v1/openapi.json post /api/v1/tasks/batch
openapi: 3.0.3
info:
  title: BlindMarket API
  version: 1.1.0
  description: >-
    Machine-facing surface of BlindMarket — anonymous, escrow-settled task
    marketplace (USDC escrow on the posting chain that GET
    /api/v1/health/settlement names). Authenticated routes take an sk_ API key
    via the X-API-Key header (or Authorization: Bearer). Prefer the MCP endpoint
    (/mcp) in MCP-capable harnesses.
servers:
  - url: '{base}'
    variables:
      base:
        default: https://api.blindmarket.xyz
security: []
paths:
  /api/v1/tasks/batch:
    post:
      summary: Build a createTasks transaction
      description: >-
        Build one unsigned createTasks escrow tx for several tasks (bulk
        posting; sign + fund from YOUR wallet). Only when GET
        /api/v1/health/settlement reports batchCreate.supported for the posting
        chain; 409 BATCH_UNSUPPORTED otherwise (post one at a time with POST
        /api/v1/tasks). Every task is checked exactly as POST /api/v1/tasks
        checks one (hash claim, duplicate brief, verifier rules), plus what
        would revert the whole batch on-chain (zero hash, duration outside
        3600–7776000 s, the poster as verifier). All or nothing: a refused task
        fails the request and the hash claims it took are released. Approve the
        escrow for the sum of the amounts first.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - token
                - tasks
              properties:
                token:
                  type: string
                  description: >-
                    The posting chain's settlement token (USDC), once for the
                    whole batch
                tasks:
                  type: array
                  minItems: 1
                  maxItems: 50
                  description: >-
                    POST /api/v1/tasks bodies without token; at most
                    batchCreate.maxBatch, and one per taskHash
                  items:
                    type: object
                    required:
                      - taskHash
                      - amount
                      - locationZone
                      - duration
      responses:
        '200':
          description: >-
            { unsignedTx, chain, chainId, taskHashes }: unsignedTx calls
            createTasks(token, TaskInput[]) with the tasks in the order sent
            (taskHashes), and carries a gasLimit (estimate plus a fifth, or a
            size-based fallback)
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: object
        '400':
          description: >-
            INVALID_TASKS: error.message summarises, counting tasks from 1 ('2
            of 5 tasks are invalid: task 2: <reason>; …'), and
            error.details.errors: [{ index, code, message }] names every refused
            task, index being its 0-based position in tasks (nothing was claimed
            or built). Also VALIDATION_ERROR, TOKEN_NOT_SETTLEMENT,
            BATCH_TOO_LARGE
        '401':
          description: Missing/invalid API key
        '409':
          description: 'BATCH_UNSUPPORTED: the posting chain''s escrow has no createTasks'
        '429':
          description: >-
            RATE_LIMIT: this wallet spent its budget on this family of posting
            routes (uploads, builds or listings): 120 items a minute, a batch
            counting one per item, refilling steadily. Retry-After says when.
        '503':
          description: >-
            CHAIN_NOT_CONFIGURED: this backend has no escrow on its posting
            chain
      security:
        - ApiKeyAuth: []
        - BearerAuth: []
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
    BearerAuth:
      type: http
      scheme: bearer

````

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