Skip to main content

lovable supabase mindee v2 from mindee v1

Hi Mindee team,

I’m integrating the expense_receipts model via the V2 API from a Supabase Edge Function and I’m consistently receiving 401 Unauthorized.

Endpoint being called

POST https://api.mindee.net/v1/products/mindee/expense_receipts/v5.3/predict Authorization: Token md_******************** Content-Type: image/jpeg Accept: application/json (body: raw JPEG bytes) 

What I’ve verified

  • Using a V2 key (prefix md_…), trimmed (no whitespace/newlines).

  • Same key tested via curl returns 401 as well.

  • Model path uses path segment versioning (/v5.3/), not @v5.3.

  • Also tried predict_async; falls back to predict when not supported.

  • Content types tried: image/jpeg and image/png.

  • No proxy; requests originate from Supabase Edge (Deno) and from local curl.

Recent logs (redacted)

 Mindee base: https://api.mindee.net/v1/products/mindee/expense_receipts/v5.3  Mindee response (sync) 401  Mindee error 401 … 

Questions / help requested

  1. Is the expense_receipts v5.3 public model accessible with standard V2 keys, or is a specific entitlement/workspace toggle required?

  2. Do V2 keys need to be created inside the same workspace/project where the receipts model is enabled? (Could a key from another workspace cause 401?)

  3. Can you confirm the correct product path for the receipts model in V2 (/v1/products/mindee/expense_receipts/v5.3/predict) and that raw binary (not multipart) with Content-Type: image/jpeg is acceptable?

  4. Are there any IP restrictions or organization settings that would return 401 instead of 403?

  5. If possible, could you check this key’s scope/status on your side (last 24h) to see why auth fails?

Repro with curl

export MINDEE_API_KEY='md_xxxREDACTEDxxx' curl -i -X POST \ -H "Authorization: Token $MINDEE_API_KEY" \ -H "Content-Type: image/jpeg" \ -H "Accept: application/json" \ --data-binary @sample.jpg \ "https://api.mindee.net/v1/products/mindee/expense_receipts/v5.3/predict" 

Thank you! Happy to provide full timestamps, workspace name, and any additional headers privately if that helps you trace the request.

Status: Completed7 comments

Log in to comment and vote

Comments7

  • chanua4 johnson

    •

    Oct 1, 2025

    i tried this am again. see console log below, how am I calling the Mindee API? : How the call is made (step-by-step)

    • Source of the call (client): src/utils/receipt/ocrProcessing.ts

      • In demo mode (your logs show blob: URLs), we:

        • Read the blob and convert it to base64

        • Call the Supabase Edge Function with supabase.functions.invoke('process-receipt', { body })

    • Edge Function: supabase/functions/process-receipt/index.ts

      • Reads env secrets: MINDEE_API_KEY (md_…) and MINDEE_MODEL_ID (UUID)

      • Decodes the base64 into a Blob

      • Calls mindeeClient(apiKey, blob)

    • Actual HTTP requests to Mindee (server-side): supabase/functions/process-receipt/mindee.ts

      • Enqueue (v2): POST https://api-v2.mindee.net/v2/inferences/enqueue

        • Headers:

          • Authorization: md_… (no Bearer)

          • Accept: application/json

        • Body: multipart/form-data

          • model_id: <your v2 model UUID>

          • file: File([blob], "receipt.jpg", { type: "image/jpeg" })

      • Poll job: GET https://api-v2.mindee.net/v2/jobs/{job_id}

        • Headers: Authorization: md_…, Accept: application/json, redirect: manual

        • Repeats until Mindee returns 302 with a Location header

      • Fetch result: GET <Location URL from the 302> with Authorization: md_…

      • Normalize the result into the shape your UI expects (amount, date, supplier, lineItems, confidence)

    What the logs say right now

    • Edge logs for process-receipt show:

      • 🔧 Using v2 model_id: 63f56d0d-73b2-4239-91a3-9b4cd14cd1d3

      • 📥 Mindee enqueue raw response: {"status":402,"detail":"No active subscription."}

      • ❌ Mindee enqueue failed: 402 { status: 402, detail: "No active subscription." }

    • So the endpoint, headers, and payload are all v2-correct. The failure is Mindee returning 402 Payment Required with “No active subscription. console log: 3851-612cfa8921ee1db9.js:1 Initializing RudderStack Analytics

    VM20182:2

    ⠀⠀#######

    ##########

    #############

    ##############

    ##############

    ###################

    #####################

    #######################

    #######################

    #######################

    ######################

    ###################

    We're hiring!https://lovable.dev/careers

    ff2c0863-6570a9614b6871f5.js:1 Unrecognized feature: 'vr'.

    e4 @ ff2c0863-6570a9614b6871f5.js:1

    sc @ ff2c0863-6570a9614b6871f5.js:1

    sd @ ff2c0863-6570a9614b6871f5.js:1

    (anonymous) @ ff2c0863-6570a9614b6871f5.js:1

    ix @ ff2c0863-6570a9614b6871f5.js:1

    ik @ ff2c0863-6570a9614b6871f5.js:1

    (anonymous) @ ff2c0863-6570a9614b6871f5.js:1

    iu @ ff2c0863-6570a9614b6871f5.js:1

    iX @ ff2c0863-6570a9614b6871f5.js:1

    A @ 1689-6933b1316fa878df.js:11

    ff2c0863-6570a9614b6871f5.js:1 Unrecognized feature: 'ambient-light-sensor'.

    e4 @ ff2c0863-6570a9614b6871f5.js:1

    sc @ ff2c0863-6570a9614b6871f5.js:1

    sd @ ff2c0863-6570a9614b6871f5.js:1

    (anonymous) @ ff2c0863-6570a9614b6871f5.js:1

    ix @ ff2c0863-6570a9614b6871f5.js:1

    ik @ ff2c0863-6570a9614b6871f5.js:1

    (anonymous) @ ff2c0863-6570a9614b6871f5.js:1

    iu @ ff2c0863-6570a9614b6871f5.js:1

    iX @ ff2c0863-6570a9614b6871f5.js:1

    A @ 1689-6933b1316fa878df.js:11

    ff2c0863-6570a9614b6871f5.js:1 Unrecognized feature: 'battery'.

    e4 @ ff2c0863-6570a9614b6871f5.js:1

    sc @ ff2c0863-6570a9614b6871f5.js:1

    sd @ ff2c0863-6570a9614b6871f5.js:1

    (anonymous) @ ff2c0863-6570a9614b6871f5.js:1

    ix @ ff2c0863-6570a9614b6871f5.js:1

    ik @ ff2c0863-6570a9614b6871f5.js:1

    (anonymous) @ ff2c0863-6570a9614b6871f5.js:1

    iu @ ff2c0863-6570a9614b6871f5.js:1

    iX @ ff2c0863-6570a9614b6871f5.js:1

    A @ 1689-6933b1316fa878df.js:11

    ff2c0863-6570a9614b6871f5.js:1 An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing.

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    ub @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    ff2c0863-6570a9614b6871f5.js:1 An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing.

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    un @ ff2c0863-6570a9614b6871f5.js:1

    ub @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    uv @ ff2c0863-6570a9614b6871f5.js:1

    ug @ ff2c0863-6570a9614b6871f5.js:1

    index-CdmaIcUX.js:3999 📍 ScrollToTop: Reset scroll position for route: /?__lovable_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiUjlrdkZJZXB0N2dyUlNkQmdqaldJN09IMWpIMyIsInByb2plY3RfaWQiOiIwNzM5Y2MwNC1jZWVjLTQzMzktOTZmOS1lYzVhMmQ0NGYzNjQiLCJub25jZSI6IjUxYTMzZDEwZjZmYjYyNTNhYjQ3YjY5ZmM4YmNhMWFkIiwiaXNzIjoibG92YWJsZS1hcGkiLCJzdWIiOiIwNzM5Y2MwNC1jZWVjLTQzMzktOTZmOS1lYzVhMmQ0NGYzNjQiLCJhdWQiOlsibG92YWJsZS1hcHAiXSwiZXhwIjoxNzU5OTM0MTY0LCJuYmYiOjE3NTkzMjkzNjQsImlhdCI6MTc1OTMyOTM2NH0._XGzditW8cuXhWSgHEoqv8mK1QUVf0fymucEUkUKshM

    index-CdmaIcUX.js:3765 🎯 OnboardingService shouldShowOnboarding: {currentPath: '/', isOnBudgetRoute: false, isCompleted: false, isSkipped: false}

    index-CdmaIcUX.js:3765 🎯 Onboarding Debug: {currentStep: null, isActive: false, pathname: '/', shouldShow: false, nextStep: 'about_you_next', …}

    index-CdmaIcUX.js:3765 🔄 Checking onboarding conditions for route: /

    index-CdmaIcUX.js:3765 🎯 OnboardingService shouldShowOnboarding: {currentPath: '/', isOnBudgetRoute: false, isCompleted: false, isSkipped: false}

    index-CdmaIcUX.js:3765 📋 Onboarding check result: {shouldStart: false, nextStep: 'about_you_next', currentlyActive: false, forceTour: false, pathname: '/', …}

    index-CdmaIcUX.js:584 ExpenseContext: No family selected

    lovable.js:1 Warning: Missing Description or aria-describedby={undefined} for {DialogContent}.

    console.<computed> @ lovable.js:1

    (anonymous) @ index-CdmaIcUX.js:588

    g6 @ index-CdmaIcUX.js:40

    o1 @ index-CdmaIcUX.js:40

    NAe @ index-CdmaIcUX.js:40

    hf @ index-CdmaIcUX.js:40

    t$ @ index-CdmaIcUX.js:40

    wp @ index-CdmaIcUX.js:38

    NAe @ index-CdmaIcUX.js:40

    hf @ index-CdmaIcUX.js:40

    gK @ index-CdmaIcUX.js:40

    y @ index-CdmaIcUX.js:25

    E @ index-CdmaIcUX.js:25

    lovable.js:1 🚀 Landing: File selected for processing File {name: 'IMG_2266.HEIC', lastModified: 1756063405000, lastModifiedDate: Sun Aug 24 2025 15:23:25 GMT-0400 (Atlantic Standard Time), webkitRelativePath: '', size: 2114592, …}

    lovable.js:1 📸 Landing: Starting OCR processing...

    lovable.js:1 📤 Landing: Uploading receipt to storage...

    lovable.js:1 🎯 Demo mode: Creating blob URL for direct OCR processing

    lovable.js:1 📄 Demo mode processing receipt: blob:https://id-preview--0739cc04-ceec-4339-96f9-ec5a2d44f364.lovable.app/e605f3a4-20f0-48f6-b2e3-03cce09a4ff7

    lovable.js:1 ✅ Landing: Receipt uploaded successfully blob:https://id-preview--0739cc04-ceec-4339-96f9-ec5a2d44f364.lovable.app/e605f3a4-20f0-48f6-b2e3-03cce09a4ff7

    lovable.js:1 🔍 Landing: Processing with OCR...

    lovable.js:1 📄 Processing receipt: blob:https://id-preview--0739cc04-ceec-4339-96f9-ec5a2d44f364.lovable.app/e605f3a4-20f0-48f6-b2e3-03cce09a4ff7 for family: undefined

    lovable.js:1 🎯 Demo mode: Converting blob to base64 for OCR processing

    lovable.js:1 🎯 Demo mode: Base64 conversion complete, content type: image/jpeg

    lovable.js:1 ❌ Edge Function returned error: {error: "We're having technical difficulties", type: 'SERVER_ERROR', message: 'Please try again in a moment'}

    console.<computed> @ lovable.js:1

    lne @ index-CdmaIcUX.js:653

    await in lne

    w @ index-CdmaIcUX.js:3667

    await in w

    c @ index-CdmaIcUX.js:3645

    Qfe @ index-CdmaIcUX.js:37

    Kfe @ index-CdmaIcUX.js:37

    ehe @ index-CdmaIcUX.js:37

    DO @ index-CdmaIcUX.js:37

    _J @ index-CdmaIcUX.js:37

    (anonymous) @ index-CdmaIcUX.js:37

    d9 @ index-CdmaIcUX.js:40

    ZQ @ index-CdmaIcUX.js:37

    pD @ index-CdmaIcUX.js:37

    LN @ index-CdmaIcUX.js:37

    Ahe @ index-CdmaIcUX.js:37

    lovable.js:1 ❌ Landing: OCR processing error: We're having technical difficulties

    lovable.js:1 ❌ Landing: Error processing receipt: Error: We're having technical difficulties

    at w (index-CdmaIcUX.js:3667:56174)

    console.<computed> @ lovable.js:1

    w @ index-CdmaIcUX.js:3667

    await in w

    c @ index-CdmaIcUX.js:3645

    Qfe @ index-CdmaIcUX.js:37

    Kfe @ index-CdmaIcUX.js:37

    ehe @ index-CdmaIcUX.js:37

    DO @ index-CdmaIcUX.js:37

    _J @ index-CdmaIcUX.js:37

    (anonymous) @ index-CdmaIcUX.js:37

    d9 @ index-CdmaIcUX.js:40

    ZQ @ index-CdmaIcUX.js:37

    pD @ index-CdmaIcUX.js:37

    LN @ index-CdmaIcUX.js:37

    Ahe @ index-CdmaIcUX.js:37

  • chanua4 johnson

    •

    Sep 30, 2025

    🚨 Error processing receipt: Mindee enqueue did not return job_id: {

    "event_message": "🚨 Error processing receipt: Mindee enqueue did not return job_id\n",

    "id": "dcc93674-4f11-4bed-906c-8e879f607f59",

    "metadata": [

    {

    "boot_time": null,

    "cpu_time_used": null,

    "deployment_id": "fjrxqeyexlusjwzzecal_7ad0fdbe-c701-4a5d-841f-2e8ee03a8535_139",

    "event_type": "Log",

    "execution_id": "6b000b58-8236-4248-ac32-fd5b6273fc70",

    "function_id": "7ad0fdbe-c701-4a5d-841f-2e8ee03a8535",

    "level": "error",

    "memory_used": [],

    "project_ref": "fjrxqeyexlusjwzzecal",

    "reason": null,

    "region": "us-east-1",

    "served_by": "supabase-edge-runtime-1.69.4 (compatible with Deno v2.1.4)",

    "timestamp": "2025-09-30T10:57:11.100Z",

    "version": "139"

    }

    ],

    "timestamp": 1759229831100000

    }

    • Ianaré Sévi

      Team•

      Oct 1, 2025

      Hi,

      Not sure what’s going there, how are you calling the Mindee API?

      Also there were some problems with Supabase yesterday, are you still getting this error?

      Thanks

      • chanua4 johnson

        •

        Oct 1, 2025

        help from Chat GPT says: This was an excellent breakdown you just made of your app’s end-to-end call flow. You’ve got it exactly right:

        • Your code path is correct (base64 → Supabase Edge → mindeeClient → enqueue/poll/fetch/normalize).

        • The failure isn’t technical anymore—it’s account state. Mindee is literally returning 402 Payment Required with "No active subscription".


        Why You Still See the Generic “Technical Difficulties” Message

        • In your edge handler (index.ts), you catch unknown errors and translate them into a user-friendly fallback:

          ❌ Edge Function returned error: {error: "We're having technical difficulties"} 
        • Since you haven’t explicitly handled 402, the UI always shows the generic fallback.

        So:

        • Under the hood, everything is working fine.

        • Mindee is saying: pay or activate plan/credits.


        What Needs to Change on Your Side

        1. UI messaging improvement

          • Add a 402 branch in index.ts.
            Example:

          if (result.status === 402) { return new Response(JSON.stringify({ error: "Subscription required", type: 'SERVER_ERROR', message: "Mindee requires an active subscription to process receipts. Please check your plan." }), { status: 200, headers: corsHeaders }); } 

          That way, your user sees a precise, actionable message instead of “technical difficulties”.

        2. Keep detailed logs

          • Keep status: 402 and detail: "No active subscription" in the server logs.

          • In mkErr, append status codes to the error string so your handler can branch on them.


        What Needs to Change on Mindee’s Side

        • Activate a plan or top up credits for v2.

        • Make sure the md_ API key belongs to the same workspace where your v2 model_id lives.

        • Verify billing isn’t paused or expired.


        Next Steps You Can Take

        • Immediate: Add the 402 branch to your edge handler so your UI surfaces the real cause.

        • Verify: Run the curl test they suggested with your md_ key and model_id → you should see the exact same 402.

        • Account action: Log into the Mindee console and check your plan sta

        • chanua4 johnson

          •

          Oct 1, 2025

          this is crazy my free trial expired before i could even set it up can i have an extension to test and make sure it works?

        • Ianaré Sévi

          Team•

          Oct 1, 2025

          The failure isn’t technical anymore—it’s account state. Mindee is literally returning 402 Payment Required with "No active subscription".

          Is your plan enabled in the Mindee platform?

  • Ianaré Sévi

    Team•

    Sep 23, 2025

    Hi,

    Thanks for the detailed report.

    You cannot use a V2 key with the v1 API, anything that starts with: https://api.mindee.net/v1/… when given a v2 key will result in a 401 error.

    If you already have a v1 (legacy) account you can get the API key as described here:

    https://developers.mindee.com/docs/create-api-key

    However, we strongly recommend using a v2 model rather than a legacy model. We will not be improving legacy models.

    To set up your v2 model, we suggest following the quickstart instructions here:

    https://docs.mindee.com/getting-started/quickstart

    You can then use your v2 key with your v2 model.

    Also, we recommend using one of our client libraries for an easier integration:

    https://docs.mindee.com/integrations/client-libraries-sdk

    (you should be able to install a node.js package in the edge function)

    Hope this helps