OCR Text Extractor

Extract text from any image using Tesseract OCR. Send a picture, either as a public web address or as base64-encoded image data, and get back the plain text found inside it. Pay-per-call at $0.01 USDC over x402 on Base or Solana — no account, no API key. OpenAPI 3.1.0; 1 operation(s): POST /read.

OpenAPI Specification

done-ocr-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: OCR Text Extractor
  description: Send a picture, either as a public web address or as base64-encoded image data, and get back the plain text
    found inside it.
  version: 1.0.0
  contact:
    name: _done
    url: https://forms.gle/5KzuSFH7p8hHtDmz7
    email: info@underscoredone.com
  x-openapi-url: https://ocr.underscoredone.com/openapi.json
  x-logo:
    url: https://underscoredone.com/logo.png
    altText: _done
  x-guidance: Provide either image_url or image_base64, never both. Use this when you have a picture (screenshot, scanned
    document, receipt, sign) and need the text inside it as plain text. Check the confidence score before trusting the result
    for critical decisions; low confidence means the image may be blurry or low quality.
  x-ai-instructions: Provide either image_url or image_base64, never both. Use this when you have a picture (screenshot, scanned
    document, receipt, sign) and need the text inside it as plain text. Check the confidence score before trusting the result
    for critical decisions; low confidence means the image may be blurry or low quality.
  x-provider: _done — single-purpose utility APIs for developers and AI agents. Pay per call with USDC on Base Mainnet or
    Solana Mainnet.
  x-pricing:
    model: pay-per-call
    currency: USDC
    network: Base Mainnet or Solana Mainnet
    price: $0.01
  x-keywords:
  - text
  - ocr
  - read
  - image to text
  - extract text
  - screenshot reader
  - document scan
  - receipt reader
  - utility
  - api
  - ai-agent
  - pay-per-call
  - usdc
  - x402
  x-category: ocr
  x-provider-url: https://underscoredone.com
  x-agentcash-auth:
    mode: paid
  x-402:
    price: $0.01
    network: eip155:8453
    asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
    pay_to: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
    facilitator: https://api.cdp.coinbase.com/platform/v2/x402
    scheme: exact
    description: Send a picture, either as a public web address or as base64-encoded image data, and get back the plain text
      found inside it.
    mime_type: application/json
    networks:
    - network: eip155:8453
      asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
      pay_to: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
    - network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
      asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
      pay_to: 8ugAWAXDB8V18kiUrGZTq1oMvU3C6Fxs8hfC6rvzQT3b
paths:
  /read:
    post:
      tags:
      - ocr
      - image to text
      - extract text from image
      - read text from image
      - optical character recognition
      - ocr api
      - text extraction
      - scanned document ocr
      - picture to text
      - read image text
      - ocr image
      - screenshot to text
      - text recognition
      summary: Pulls readable text out of a picture.
      description: Read a picture and give back the words found inside it, along with how sure the reader is.
      operationId: handler_read_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Request'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
              examples:
                success:
                  summary: Successful response
                  value:
                    api_version: 1.0.0
                    text: 'TOTAL 24.50

                      THANK YOU'
                    word_count: 4
                    confidence: 91.4
                    lang: eng
                    source: image_url
        '422':
          description: Unprocessable — a required field is missing or the wrong type. Check the detail field for specifics.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: array
        '402':
          description: Payment required. Send a signed USDC payment on Base Mainnet or Solana Mainnet using the x402 protocol.
          headers:
            X-Payment-Response:
              description: x402 payment challenge — base64-encoded JSON with payment details.
              schema:
                type: string
        '400':
          description: Bad request — your input failed validation or could not be processed. Check the detail field for specifics.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
      x-ai-instructions: Provide either image_url or image_base64, never both. Use this when you have a picture (screenshot,
        scanned document, receipt, sign) and need the text inside it as plain text. Check the confidence score before trusting
        the result for critical decisions; low confidence means the image may be blurry or low quality.
      x-guidance: Provide either image_url or image_base64, never both. Use this when you have a picture (screenshot, scanned
        document, receipt, sign) and need the text inside it as plain text. Check the confidence score before trusting the
        result for critical decisions; low confidence means the image may be blurry or low quality.
      x-payment-info:
        price:
          fixed:
            mode: fixed
            currency: USD
            amount: '0.01'
        protocols:
        - x402: {}
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    Request:
      properties:
        image_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Image Url
          description: A public web address pointing to the picture. Leave this out if you are sending the picture as text
            instead.
        image_base64:
          anyOf:
          - type: string
          - type: 'null'
          title: Image Base64
          description: The picture encoded as text. Leave this out if you are sending a web address instead.
        lang:
          anyOf:
          - type: string
          - type: 'null'
          title: Lang
          description: The language of the words in the picture. Only English ('eng') is supported right now.
          default: eng
      type: object
      title: Request
      example:
        image_url: https://example.com/receipt.png
        lang: eng
    Response:
      properties:
        api_version:
          type: string
          title: Api Version
          description: The version of this service that answered your request.
          default: 1.0.0
        text:
          type: string
          title: Text
          description: The words found inside the picture.
        word_count:
          type: integer
          title: Word Count
          description: How many separate words were found.
        confidence:
          type: number
          title: Confidence
          description: How sure the reader is that it got the words right, from 0 to 100.
        lang:
          type: string
          title: Lang
          description: The language that was used to read the picture.
        source:
          type: string
          title: Source
          description: Whether the picture came from a web address or from text you sent directly.
      type: object
      required:
      - text
      - word_count
      - confidence
      - lang
      - source
      title: Response
      example:
        api_version: 1.0.0
        confidence: 91.4
        lang: eng
        source: image_url
        text: 'TOTAL 24.50

          THANK YOU'
        word_count: 4
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
  securitySchemes:
    siwx:
      type: apiKey
      in: header
      name: SIGN-IN-WITH-X
      description: CAIP-122 wallet signature for repeat access after payment
servers:
- url: https://ocr.underscoredone.com
  description: Production
tags:
- name: ocr
- name: image to text
- name: extract text from image
- name: read text from image
- name: optical character recognition
- name: ocr api
- name: text extraction
- name: scanned document ocr
- name: picture to text
- name: read image text
- name: ocr image
- name: screenshot to text
- name: text recognition
x402Version: 2
x-payment-accepts:
- scheme: exact
  network: eip155:8453
  payTo: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
  asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
- scheme: exact
  network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
  payTo: 8ugAWAXDB8V18kiUrGZTq1oMvU3C6Fxs8hfC6rvzQT3b
  asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v