---
description: Diagnose rejected, missing, delayed, split, or incorrectly priced traces.
---

# Troubleshooting

Start with the response returned by WeaveScope. It tells you whether the
request was accepted, rejected, or limited.

| Response | Meaning | What to do |
| --- | --- | --- |
| `202 Accepted` | At least one event was queued. | Confirm the project and time range, then allow for processing. |
| `400 Bad Request` | The request shape or every event was invalid. | Inspect the itemized results and compare the payload with the [Ingestion API](ingestion.md). |
| `401 Unauthorized` | The API key is missing, invalid, revoked, or expired. | Replace or correct the project API key. |
| `402 Payment Required` | The current accepted-event limit is exhausted. | Review [Limits and billing](limits-billing.md). |
| `403 Forbidden` | The key is valid but cannot ingest. | Use a key with `ingest:write`. |
| `413 Content Too Large` | The body, decompressed body, or event count exceeds a request limit. | Split or reduce the request. |
| `429 Too Many Requests` | An hourly ingest limit or edge rate/concurrency limit was reached. | Inspect the response, wait for its reset or retry interval, and back off. |
| `503 Service Unavailable` | WeaveScope could not accept the payload. | Retry with backoff. |

If the client received no response, check connectivity to
`https://app.weavescope.com`, proxy settings, timeouts, and exporter logs.

## No trace appears

Check that:

- The application uses a key from the project you are viewing.
- The endpoint is `https://app.weavescope.com`.
- `WEAVESCOPE_API_KEY` is present in the runtime environment.
- The key has not been revoked or expired.
- The selected time range includes the trace start time.
- A short-lived process flushed its BeamWeaver export queue.
- The ingestion response accepted at least one event.

Search for the exact trace ID and temporarily select **All time**. Remember that
`202 Accepted` means the request is queued; the trace may not be visible
immediately.

## `401 Unauthorized`

The API key is missing, empty, malformed, revoked, expired, or unknown.

1. Create a replacement from **Settings → API keys**.
2. Store the complete `ws_...` token.
3. Deploy it as `WEAVESCOPE_API_KEY`.
4. Send it as `Authorization: Bearer ws_...` or `x-api-key: ws_...`.

Only the prefix remains visible after creation.

## `403 Forbidden`

The key exists but does not have permission to ingest. Use a project API key
with `ingest:write`.

## `400 Bad Request` or rejected events

Common native-ingestion errors include:

- Missing `observation_id` or `id`
- Missing `trace_id`
- Invalid `operation`, `kind`, or `status`
- Invalid `start_time` or `end_time`
- A negative, non-integer, or greater-than-`18446744073709551615`
  `event_version`
- A non-object `custom_fields` value

Read the itemized `results` array. Rejected items include a `code` and `reason`.
If a batch contains accepted and rejected events, the accepted events are still
queued.

## `402 Payment Required`

The organization reached its accepted-event limit for the current billing
cycle. Open **Settings → Billing** to review usage, change plans, or enable and
fund balance overage on Pro or Scale.

## `413 Content Too Large`

Requests are limited to 25 MiB and 1,000 events or spans. Selected payload
fields also have a 4 MiB per-event limit. For compressed OpenTelemetry
protobuf, both the transferred and decompressed bodies must fit the request
limit.

An oversized request receives `413` and is rejected atomically. A payload field
over 4 MiB rejects only that event with `payload_too_large`; valid events in the
same batch can still be accepted.

See [Payload size limits](ingestion.md#payload-size-limits) for the complete
rules.

## `429 Too Many Requests`

An application response for the hourly ingest-data limit includes
`hourly_ingest_reset_at`. Wait until that time or reduce large payload fields.

The ingestion edge can also return `429` when request rate or concurrency is
too high. That response may use a different body. Retry with exponential
backoff and reduce parallel requests.

## `503 Service Unavailable`

WeaveScope could not safely accept the request. Retry with backoff. Events from
that request are not counted as accepted usage.

## Cost is zero

Check that:

- The event includes an explicit `cost_usd`, `cost`, or `total_cost`; or
- It includes input and output token usage.
- Provider and model metadata identify the model correctly.
- **Settings → Model pricing** contains an exact matching model ID.

Add a custom pricing rule when the model is not included in the managed catalog.

## A child run appears as a separate trace

Asynchronous work probably lost the active tracing context. BeamWeaver-managed
graph nodes propagate context automatically. For application-owned tasks, use
`BeamWeaver.Tracing.async/3` or attach the captured context before calling a
model or tool.

See [Preserve trace context in tasks](beamweaver-integration.md#preserve-trace-context-in-tasks).

## Trace views disagree briefly

Trace lists, trace details, and monitoring charts are updated asynchronously.
One view can show new data before another has refreshed. Wait briefly and try
again. If the mismatch persists, record the project ID and trace ID before
contacting support.

## Custom fields are missing

Custom fields must be flat values. WeaveScope ignores:

- Blank values
- Nested maps and lists
- Keys beginning with `__`
- Reserved framework keys
- Secret-like keys containing `api_key`, `token`, `secret`, `password`, or
  `authorization`

Use `fields` for searchable dimensions and `metadata` for non-indexed context.
