```❌ Egress failed: TwirpError(code=resource_exhau...
# ask-ai
a
Copy code
❌ Egress failed: TwirpError(code=resource_exhausted, message=egress minutes exceeded, status=429)
t
Thanks for reaching out, Deep. I'm an AI assistant and I'm here to help. Give me a moment while I research this topic.
Thanks — I see the error:
TwirpError(code=resource_exhausted, message=egress minutes exceeded, status=429)
indicating your project has used up its allocated egress (transcoding) minutes and the egress request was blocked. To help resolve this, please tell me: • Which LiveKit operation was running when this happened? (Room Composite, Web Egress, Track Composite, Ingress/RTMP, or something else) • Your LiveKit plan (Build / Ship / Scale / Enterprise) or whether you’re on self-serve/cloud dashboard billing. • Whether you need the egress output transcoded (video + audio) or if a non-transcoding Track Egress (raw stream) would work. Immediate options you can choose from: • Upgrade your plan to increase included transcoding minutes. • Use Track Egress / transcode-less options when possible (these do not consume transcoding minutes). • Wait for your plan’s minutes to reset or purchase overage minutes. Tell me the operation and plan and I’ll recommend the fastest concrete step and walk you through it. Sources: Pricing | LiveKit, with interactive elements
a
I upgraded to ship plan but still facing this
t
Thanks — I hear your frustration. The Ship plan includes 600 transcoding (egress) minutes, so we need to check why your requests are still hitting the quota. Please provide: • Which egress operation failed (Room Composite, Web Egress, Track Composite, Ingress/RTMP, or other)? • The project ID or team name shown in your LiveKit Cloud dashboard. • Current transcoding usage shown in the Cloud dashboard (a screenshot is fine) and the timestamp of the failing request. Quick things to verify meanwhile: • Confirm the upgrade completed in the Cloud dashboard and shows the Ship plan. • Check whether your usage already exceeded 600 minutes for the current billing period (the error will still occur if you’ve already used the minutes). • If your workflows can avoid transcoding, use Track Egress / transcode-less options — they do not consume transcoding minutes. Share the three items above and I’ll recommend the fastest concrete next step (confirm quota, enable overage, or adjust egress type) and walk you through it. , with interactive elements
a
will my agents be automatically upgraded to ship or do i need more agent? Here is my code snippet getting 2026-04-30 123324,116 ERROR [universal-agent] ❌ Egress failed: TwirpError(code=resource_exhausted, message=egress minutes exceeded, status=429)
Copy code
async def entrypoint(ctx: JobContext):
    <http://logger.info|logger.info>(f"--- Job Starting: {ctx.job.id} ---")
    await ctx.connect()

    # Get agent_id from job or room metadata
    agent_id = "default"
    user_id = None
    company_id = None
    try:
        job_metadata = json.loads(ctx.job.metadata or "{}")
        agent_id = job_metadata.get("agent_id", agent_id)
        user_id = job_metadata.get("user_id", user_id)
        company_id = job_metadata.get("company_id", company_id)
    except (json.JSONDecodeError, AttributeError):
        pass
    try:
        room_metadata = json.loads(ctx.room.metadata or "{}")
        agent_id = room_metadata.get("agent_id", agent_id)
        user_id = room_metadata.get("user_id", user_id)
        company_id = room_metadata.get("company_id", company_id)
    except (json.JSONDecodeError, AttributeError):
        pass

    if agent_id == "default":
        raise ValueError(
            "No agent_id found in metadata; pass via dispatch/agent-metadata"
        )

    <http://logger.info|logger.info>(f"🎯 Using agent_id: {agent_id}")

    # Load prompt & optional session timeout (in seconds) from DB
    instructions, timeout_seconds, model_config = await load_prompt_from_neon(agent_id)

    # Recording & object names
    base_name = make_session_base_name(
        room_name=ctx.room.name,
        job_id=ctx.job.id,
        agent_id=agent_id,
    )
    artifact_names = build_session_artifact_names(base_name)
    audio_object = artifact_names["audio_object"]
    transcript_object = artifact_names["transcript_object"]
    log_object = artifact_names["log_object"]
    transcript_path = artifact_names["transcript_path"]
    session_log_path = artifact_names["session_log_path"]

    # Capture per-session runtime logs to a dedicated file for archival.
    session_file_handler = add_session_file_handler(session_log_path)
    <http://logger.info|logger.info>(f"🧾 Session log file: {session_log_path}")

    with open(GOOGLE_APPLICATION_CREDENTIALS) as f:
        gcp_creds_json = json.dumps(json.load(f))  # Ensure string

    # 1. Start Egress directly to GCS (audio)
    egress_id = None
    try:
        egress_response = await ctx.api.egress.start_room_composite_egress(
            api.RoomCompositeEgressRequest(
                room_name=ctx.room.name,
                audio_only=True,
                file=api.EncodedFileOutput(
                    filepath=audio_object,  # used as object name
                    gcp=api.GCPUpload(  # <- GCS config
                        bucket=GCS_BUCKET_NAME,
                        credentials=gcp_creds_json,
                    ),
                ),
            )
        )
        egress_id = egress_response.egress_id
        <http://logger.info|logger.info>(f"✅ Egress to GCS: gs://{GCS_BUCKET_NAME}/{audio_object}")
    except Exception as e:
        logger.error(f"❌ Egress failed: {e}")
t
Thanks — I hear you. I’m responding to both parts: whether agents are auto‑upgraded, and why your audio egress still fails with the same quota error. • Plan upgrades apply to the whole project/account, not to individual agents. You do not need to add or upgrade agents separately for the Ship plan to take effect. • The error means your project is still hitting the transcoding (egress) minutes quota. Note: even audio-only egress can consume transcoding minutes when run as Room Composite (it counts toward your plan’s minutes). Please provide the following so I can verify and recommend the next concrete step: 1. The project ID (or team name) shown in your LiveKit Cloud dashboard. 2. Which egress operation failed (you’re calling Room Composite in the snippet — confirm if that’s the failing call). 3. A screenshot or the current transcoding usage number and the timestamp around the error (2026-04-30 123324 UTC in your log). Quick checks you can run now: • Confirm the dashboard shows Ship plan and that the billing upgrade completed. • Check whether your usage already exceeded 600 minutes for the current billing period. • If you can avoid transcoding, consider using Track Egress / transcode-less options (these do not consume transcoding minutes). Share the project ID and usage info and I’ll confirm whether the Ship upgrade applied and recommend the fastest fix (enable overage, upgrade plan, or switch to transcode-less egress). , with interactive elements
a
project id: p_11aa6nt7h7k Attachig nscreenshot but the billing section displays my build plan limits and not my ship plan limits. The curren tplan section does show ship plan however, Logs:
Copy code
2026-04-30 12:33:23,934 INFO [universal-agent] 🧾 Session log file: /tmp/sellerity-roleplay-019dcdf4-79e8-7049-99f3-d82b78d2b34d-1777552398-02c0c0d7_AJ_n3QqvPhnMQjP_rp-fb6a9dd2a976_20260430T123323Z_session.log
2026-04-30 12:33:24,116 ERROR [universal-agent] ❌ Egress failed: TwirpError(code=resource_exhausted, message=egress minutes exceeded, status=429)
2026-04-30 12:33:24,277 INFO [universal-agent] 🚀 Starting AgentSession...
Im only transcoding audio afaik
t
Thanks — I see the project ID and screenshot, and that your dashboard shows Ship as the current plan but the usage rows still list Build limits (60 transcode minutes + 18 additional audio-only minutes used). I’ll help narrow this down. Quick checks for me to confirm: 1. Which project ID is the egress request using? You gave p_11aa6nt7h7k — confirm the egress call is for that exact project. 2. Can you confirm the account/team shown in the top-left of the dashboard matches p_11aa6nt7h7k (or paste the team name)? 3. From the dashboard, does any quota line show “Ship: 600 transcode minutes” if you click Change plan or Manage? If not, please take a screenshot of the plan change/manage page. Immediate guidance while you check: • Plan upgrades apply to the whole project; you do not need to upgrade agents separately. • Room Composite audio egress still consumes transcode minutes. Track Egress (raw/transcode-less) does not consume transcode minutes — consider switching to that if acceptable. • If the project still shows Build quotas after upgrade, the upgrade did not fully apply to the billing quota for that project and we need to reconcile it. Once you confirm items 1–3 I will: • Verify whether the egress requests are billed to that project and whether the Ship quota is active, • Recommend the fastest fix (enable overage, reapply upgrade, or switch to Track Egress) and walk you through the exact steps., with interactive elements
a
There is only 1 project i see which is the id i sent. Team mebers is just me i.e. my email. All displays which show plan say ship, but quotas and behaviour is stil old like the build plan
t
I don't have the answer you're looking for. You could also try asking your question: • in one of the other Slack channels or • to https://deepwiki.com/livekit/livekit_composite which is trained on all LiveKit source code If you find the answer, please post it here to help others!