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

# Verify by Receipt Text

> Send OCR'd or copied receipt text for verification

<Note>
  Pass `receipt_text` in the request body. The text can be OCR output from a receipt image or manually copied from the app.
</Note>

## Use case

1. Customer photographs their receipt
2. Your app runs OCR (e.g. Google ML Kit, Tesseract)
3. You send the extracted text to Check.et
4. Check.et parses the bank and reference, then verifies

## Tips

* Add `"bank": "cbe"` as a hint if you know the bank - improves parsing accuracy
* The text doesn't need to be clean; Check.et handles noise from OCR
* Max `receipt_text` length: 50,000 characters

## Example

```json theme={null}
{
  "receipt_text": "Commercial Bank of Ethiopia\nFT Reference: FT26144SG2ST\nAmount: ETB 1,350.00\nDate: 10 Jun 2025\nPayer: Hayat Ahmed",
  "bank": "cbe",
  "account_number": "1000876543218"
}
```


## OpenAPI

````yaml POST /verify
openapi: 3.1.0
info:
  title: Check.et API
  version: '1.0'
  description: >
    Verify Ethiopian bank and wallet payments - CBE, Telebirr, Dashen, Awash,
    Bank of Abyssinia, Zemen, CBE Birr, M-Pesa Ethiopia, and Siinqee. One
    endpoint, structured JSON back every time.
  contact:
    name: Check.et Support
    url: https://t.me/Mal_tse
servers:
  - url: https://api.check.et/api/v1
    description: Production
security:
  - BearerAuth: []
paths:
  /verify:
    post:
      summary: Verify a payment
      description: >
        The main verification endpoint. Accepts four mutually exclusive input
        methods:


        1. **Bank + transaction number** - the most direct method

        2. **Receipt URL** - paste the share link from the banking app
        (`receipt_url`)

        3. **File upload** - PDF, JPG, PNG, or WEBP receipt (`receipt_file`)

        4. **Receipt text** - OCR'd text from a receipt (`receipt_text`)


        Only one input method is needed per call.
      operationId: verify
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                bank:
                  type: string
                  description: >-
                    Bank code. Required unless using receipt_url, receipt_file,
                    or receipt_text.
                  example: cbe
                  enum:
                    - cbe
                    - telebirr
                    - dashen
                    - awash
                    - boa
                    - zemen
                    - cbebirr
                    - mpesa
                    - sinqee
                    - amhara
                transaction_number:
                  type: string
                  description: >-
                    Reference number from the receipt. Required unless using
                    receipt_url, receipt_file, or receipt_text.
                  example: FT26144SG2ST
                account_number:
                  type: string
                  description: >-
                    Your receiving account (required for CBE, BOA). For CBE
                    Birr, pass the payer's phone number (251XXXXXXXXX).
                  example: '1000876543218'
                bank_account_id:
                  type: integer
                  description: ID of a saved bank account - use instead of account_number.
                receipt_url:
                  type: string
                  description: >-
                    Share URL from the banking app. Auto-extracts bank and
                    transaction number.
                  example: https://apps.ethiotelecom.et/receipt/DEL889NG4S
                receipt_text:
                  type: string
                  description: >-
                    OCR'd text from a receipt image (max 50,000 chars). Required
                    alongside image files.
            examples:
              cbe:
                summary: CBE by reference number
                value:
                  bank: cbe
                  transaction_number: FT26144SG2ST
                  account_number: '1000876543218'
              telebirr:
                summary: Telebirr by transaction number
                value:
                  bank: telebirr
                  transaction_number: DEL889NG4S
              telebirr_url:
                summary: Telebirr by receipt URL
                value:
                  receipt_url: https://apps.ethiotelecom.et/receipt/DEL889NG4S
              dashen:
                summary: Dashen by reference
                value:
                  bank: dashen
                  transaction_number: 387ETAP2522000WK
              awash:
                summary: Awash by reference
                value:
                  bank: awash
                  transaction_number: AW25220099888
              boa:
                summary: Bank of Abyssinia
                value:
                  bank: boa
                  transaction_number: BOA123456789
                  account_number: '1000290172'
              cbebirr:
                summary: CBE Birr (needs payer phone)
                value:
                  bank: cbebirr
                  transaction_number: CGU9REIHHB
                  account_number: '251912345678'
              mpesa:
                summary: M-Pesa Ethiopia
                value:
                  bank: mpesa
                  transaction_number: ABC1234567
              amhara:
                summary: Amhara Bank
                value:
                  bank: amhara
                  transaction_number: FT26170VYQXW
          multipart/form-data:
            schema:
              type: object
              properties:
                receipt_file:
                  type: string
                  format: binary
                  description: PDF, JPG, JPEG, PNG, or WEBP - max 10 MB
                bank:
                  type: string
                  description: Optional bank code hint to improve parsing
                account_number:
                  type: string
                receipt_text:
                  type: string
                  description: >-
                    Required for image files (JPG/PNG/WEBP). Not needed for
                    PDFs.
      responses:
        '200':
          description: 'Verified - success: true means the payment is confirmed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerifyResponse'
              example:
                success: true
                exists: true
                duplicate: false
                message: null
                data:
                  bank: cbe
                  bank_name: Commercial Bank of Ethiopia
                  verification_id: FT26144SG2ST
                  transaction_number: FT26144SG2ST
                  source_url: null
                  verification_method: official
                  receipt:
                    status: completed
                    transaction_type: transfer
                    amount: 1350
                    currency: ETB
                    transaction_date: '2025-06-10T14:30:00+03:00'
                    payer_name: Hayat Ahmed
                    payer_account: '1000126543218'
                    receiver_name: Abebe Bekele
                    receiver_account: '1000876543218'
                    description: Payment
        '400':
          description: Invalid input (unsupported bank, malformed URL)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: Unauthenticated.
        '402':
          description: Monthly verification quota exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: Monthly verification limit reached. Please upgrade your plan.
        '404':
          description: 'Transaction not found - success: false'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerifyResponse'
              example:
                success: false
                exists: false
                duplicate: false
                message: Transaction not found.
                data:
                  bank: cbe
                  bank_name: Commercial Bank of Ethiopia
                  verification_id: null
                  transaction_number: FT26144SG2ST
                  verification_method: official
                  receipt: {}
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
components:
  schemas:
    VerifyResponse:
      type: object
      properties:
        success:
          type: boolean
          description: true = transaction confirmed
          example: true
        exists:
          type: boolean
          description: true = transaction found in bank records
          example: true
        duplicate:
          type: boolean
          description: true = already verified in this branch
          example: false
        message:
          type: string
          nullable: true
          example: null
        data:
          type: object
          properties:
            bank:
              type: string
              example: cbe
            bank_name:
              type: string
              example: Commercial Bank of Ethiopia
            verification_id:
              type: string
              example: FT26144SG2ST
            transaction_number:
              type: string
              example: FT26144SG2ST
            source_url:
              type: string
              nullable: true
              example: null
            verification_method:
              type: string
              example: official
            receipt:
              $ref: '#/components/schemas/Receipt'
        existing_verification_id:
          type: integer
          description: Only present when duplicate=true
          example: 9812
        verified_at:
          type: string
          format: date-time
          description: Only present when duplicate=true
    Error:
      type: object
      properties:
        message:
          type: string
          example: The transaction_number field is required.
    ValidationError:
      type: object
      properties:
        message:
          type: string
          example: The given data was invalid.
        errors:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
    Receipt:
      type: object
      description: Parsed transaction details from the bank
      properties:
        status:
          type: string
          example: completed
        transaction_type:
          type: string
          example: transfer
        amount:
          type: number
          example: 1350
        currency:
          type: string
          example: ETB
        transaction_date:
          type: string
          format: date-time
          example: '2025-06-10T14:30:00+03:00'
        payer_name:
          type: string
          example: Hayat Ahmed
        payer_account:
          type: string
          example: '1000126543218'
        receiver_name:
          type: string
          example: Abebe Bekele
        receiver_account:
          type: string
          example: '1000876543218'
        description:
          type: string
          nullable: true
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key from your dashboard - starts with `chk_`. Requires a business
        account.

````