External Calls
Outbound HTTP calls grouped by host, with error rates, latency, URL patterns and detection of calls to your own services.
External Calls shows the HTTP requests your services make to other systems: payment providers, email APIs, internal microservices. Use it to tell whether a slow page is your code or the API it waits on.
The list lives at /o/:org/projects/:project/external-calls and a host at /o/:org/projects/:project/external-calls/detail?key=api.stripe.com.
What counts as a call
A call is a CLIENT span with http.request.method that is not a database query. The AdonisJS agent records outbound HTTP requests through its HTTP instrumentation, and any OpenTelemetry HTTP client instrumentation does the same. Client spans with db.system.name go to Queries instead.
Calls are grouped by server.address. When it is missing, the hostname of url.full is used, then the span name. Legacy net.peer.name and http.url are renamed on ingest.
A call counts as failed when it returned 400 or above, or its span status is error. That is stricter than for incoming Requests, because a 4xx from an API you call usually means your request was wrong.
The list
| Card | Value | Hint |
|---|---|---|
| Total Calls | Calls in range | Number of hosts |
| Avg Response | Mean duration | |
| P95 Response | 95th percentile | P99 |
| Error Rate | Share of failed calls | Number of failed calls |
Requests by Status stacks calls per bucket into 2xx, 4xx and 5xx. Response Time plots average and P95.
The table lists up to 200 hosts with Service, Host, Requests, 4xx, 5xx, Avg, P95 and Last call. Sort by Volume (the default), Errors, Avg or P95. The Service column is hidden when exactly one service is selected.
Internal hosts
A host gets an Internal badge with a service name when another service of the project received those calls. Unhandled looks at the 5,000 most recent calls to the hosts on screen and checks whether a SERVER span in the same trace has the call as its parent. This only works when the caller propagates trace context, for example with the traceparent header, and because it samples, a host called rarely next to a busy one may not get the badge.
Host detail
The detail page repeats the cards and charts for one host. When several services call it and you arrived without a service, it asks you to choose one first.
URL Patterns groups the host's calls by method and URL, with Requests, Errors, Avg and P95 for each. The pattern is url.template when the instrumentation sets it. Otherwise Unhandled takes the path of url.full and replaces numeric segments, hex or UUID-like segments of 8 or more characters, and prefixed IDs such as cus_8Zq2LrT1x with {id}:
GET https://api.stripe.com/v1/customers/cus_8Zq2LrT1xK
GET /v1/customers/{id}Latency distribution is a heatmap of the host's calls by start time and duration. Select a box of cells, or click Slowest 10%, to see which attribute values set those calls apart from the rest, then filter to a value or exclude it.
Callers lists the routes, jobs and commands that made the calls, with each origin's share of their total time.
Slowest executions lists the 50 slowest calls with Time, URL, Status, Duration and a trace link. Show switches it to Recent, the 50 latest. Filter by All, 2xx, 4xx or 5xx.
Answering "is the payment provider slowing checkout?"
- Sort by P95 and find the provider's host.
- Open it and compare its P95 with the checkout endpoint's P95 on Requests. If they move together, the wait is on their side.
- Check URL Patterns for the one endpoint that is slow or failing.
- Open a trace from Slowest executions to see whether your code retried the call.