> ## 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 URL

> Pass the share link from the mobile banking app

<Note>
  Pass `receipt_url` in the request body. Select the **"Telebirr receipt URL"** or similar example in the playground above to try it.
</Note>

When a customer shares a payment link from their banking app (Telebirr, Dashen, Awash, etc.), paste it directly into `receipt_url`. Check.et extracts the bank and transaction number automatically - no manual parsing needed.

## How it works

1. Customer taps **Share** in their banking app
2. You receive the URL
3. Pass it to `/verify` as `receipt_url`
4. Check.et resolves the bank, fetches the transaction, and returns structured JSON

## Which banks support receipt URLs?

| Bank     | URL Format                         |
| -------- | ---------------------------------- |
| Telebirr | `apps.ethiotelecom.et/receipt/...` |
| Dashen   | Dashen Bank app share links        |
| Awash    | AwashPay share links               |
| CBE      | CBE app share links                |
| Zemen    | Zemen app share links              |
| M-Pesa   | M-Pesa app share links             |

## Pre-validate without consuming quota

Use [`POST /verify/parse-url`](/api-reference/parse-url) to extract the bank and transaction details before triggering a full verification.


## 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.

````