Vertex AI generateContent API: 403 error with fileData (audio) parts, but text-only calls work

I’ve hit a critical 403 “PERMISSION_DENIED” error when calling the Vertex AI generateContent API. The error message is a misleading “The billing account for the owning project is disabled in state absent,” but our billing is fully active and accruing charges.

The core problem is this:

  • Text-only generateContent calls work perfectly.

  • The call fails with 403 the moment I add a fileData (audio) part.

This happens in the same service, with the same service account (roles/aiplatform.user).

Critical Test: I created a brand new service account (audio-processor-v2@...) with the same roles, and it gets the exact same 403 error.

This proves it is not a service account issue, but a project-level backend problem where multimodal (audio) ingestion is not enabled for our project.

Has anyone else seen this? Is there a separate enablement step for fileData / multimodal calls that we are missing? This is blocking our production workflow.

I will post my full troubleshooting steps in the first reply.

Project: ai-video-editor-474712 Failing API: generateContent with fileData (audio) Region: us-east4

Here is the detailed technical information for our post:

Steps to Reproduce

  1. Project: ai-video-editor-474712 (Project Number: 783607057581)

  2. Service Account: Any SA with roles/aiplatform.user (we have tested with two different SAs, including a brand new one).

  3. SDK: @google-cloud/vertexai@1.10.0

  4. Endpoint: us-east4

  5. Model: gemini-2.5-pro (also tested gemini-2.5-flash-lite with the same failure)

Code that fails:

JavaScript

// This call fails with 403
const result = await model.generateContent({
  contents: [{
    role: 'user',
    parts: [
      { text: "Analyze this audio file" },
      { 
        fileData: {
          mimeType: 'audio/mpeg',
          fileUri: 'gs://[YOUR-BUCKET]/audio.mp3'  // Valid GCS URI
        }
      }
    ]
  }]
});

Result: Immediate 403 error with misleading “billing disabled” message. Test: Remove the fileData part and send only text — the same call from the same service succeeds.


Troubleshooting Already Attempted

  1. CRITICAL: RECREATED SERVICE ACCOUNT - We created a fresh service account (PII Removed by Staff) on Nov 2, 2025. It still receives the same 403 error. This confirms it is a project-level issue, not a service account issue.

  2. Verified Billing: Billing account (PII Removed by Staff) is active, linked, and accruing charges ($136+).

  3. \Verified IAM: roles/aiplatform.user is present on both service accounts.

  4. Verified API: aiplatform.googleapis.com is enabled.

  5. Compared Working Service: training-processor service in the same project works fine with text-only calls.

  6. Verified Old Workflow: The old workflow (using Speech-to-Text API + text-only Vertex) worked. The failure is 100% specific to fileData ingestion.

  7. Service Agent Binding: Adding roles/iam.serviceAccountTokenCreator for the Vertex AI Service Agent had no effect.

  8. VPC-SC / Org Policies: None are in effect.

  9. Updated SDK, verified region, refreshed credentials: No effect.

  10. Confirmed error occurs ONLY with fileData parts (not text-only).


Impact & Request

Impact: High. Our production ANALYZE workflow is completely blocked.

Request: Please have an engineer check the backend enablement for multimodal (audio file) ingestion for project (PII Removed by Staff). All evidence points to this being a project-level enablement issue that is not visible in the console.

Thank you!

You’re encountering a 403 PERMISSION_DENIED for multimodal generateContent calls because your project does not yet have multimodal (audio) ingestion enabled, even though text-only calls work and billing is active. The error message about billing is misleading; the issue is a project-level enablement restriction for audio/file input. Currently, you’ll need to request access or enablement for multimodal features through Google Cloud support or the Vertex AI early-access process, as this is separate from standard text-only usage.

Hello Grace,

Thanks, ill reach out to support

All the best,