Changelog

Notable changes to the Agent Ping API, SDKs, dashboard, and infrastructure. Newest first. Times are UTC.

2026-10-28

SDKs: version labels, time to first token and prompt capture

  • The Python, TypeScript, Go and Laravel SDKs label runs with a version (AGENTPING_VERSION or an init option, overridable per run).
  • Streamed calls report ttft_ms from every provider the SDKs instrument: Anthropic, OpenAI, Gemini, Mistral, Cohere and Bedrock Converse, plus the LangChain handlers and the Vercel AI SDK helper. The Laravel SDK cannot measure it, because laravel/ai stream events carry whole-second timestamps.
  • Opt-in prompt and completion capture (capture_llm_content, captureLlmContent, WithContentCapture, AGENTPING_CAPTURE_LLM_CONTENT) sends input, system_instructions and output on llm_call events, off by default and clipped at 4000 characters. Each provider and framework page says what is captured.

2026-10-27

Version labels, time to first token, conversation ids

  • POST /v1/runs accepts version (up to 64 characters): the build or prompt version that produced the run. Over OpenTelemetry it is agentping.version, falling back to the resource's service.version. The run page shows it and the read API returns it.
  • llm_call events accept ttft_ms, the time to first token of a streamed response. Over OpenTelemetry it is read from gen_ai.server.time_to_first_token, the Vercel AI SDK's ai.response.msToFirstChunk, or agentping.ttft_ms. Docs.
  • Traces carrying gen_ai.conversation.id without an agentping.run are now stitched onto one resumable run per team and conversation, closing as a success after 30 quiet minutes. Previously each turn became a run of its own. Docs.

Investigation summaries on alerts

Spend anomalies, missed schedules, failing rubrics and agent incidents now arrive with a short paragraph written by Claude from the agent's own runs: what changed against the previous day, which customers were hit, and the likely cause when the error messages or a newly seen version point to one. Webhooks get it as an additive investigation field. Team and Business plans. Docs.

Dashboard

  • Fleet comparison. The Agents page compares every agent on failure rate, p95 latency, tokens and customers hit over the last 24 hours, alongside runs and spend. Click a column to rank by it; "customers hit" is the number of distinct customers that saw a failed run, so a degraded agent's blast radius is one glance.
  • Time to first token. Pulse charts the p50, p95 and p99 of ttft_ms across streamed LLM calls, with the window's p95 and the change against the previous window.
  • Version markers. The Spend and Verify charts mark the bucket where each agent's new version was first seen, so a cost or score shift reads against the deploy that preceded it.
  • Messages on the timeline. An llm_call that carries input, output or system_instructions shows them as role-labelled messages when expanded, instead of raw JSON.

2026-09-19

Conversations

Chat interfaces are now a first-class shape. A chat session is one run whose turns append events to it, rather than a run per message, so the record you look at is the conversation, and its cost is the conversation's cost. See Conversations.

  • POST /v1/runs accepts idle_timeout_seconds (60–86400) and idle_timeout_status. A run that opts in is closed automatically once no event has arrived for that long, back-dated to its last activity so the duration is the work's, not the sweep's. This is for any caller that cannot be relied on to send finish: a browser that gets closed, a process that gets killed: not only chats. Previously a run whose caller died stayed running for ever.
  • idle_timeout_status defaults to timeout: silence means we stopped waiting, not that the work succeeded. Pass success for a conversation.
  • Opting in also makes a run resumable. An event newer than the finish reopens it, so returning to yesterday's chat continues one record instead of starting a second. Runs that never opted in stay final, and a straggler older than the finish will not reopen anything.
  • Over OpenTelemetry, agentping.run on a trace makes it one turn of a run you manage, with agentping.idle_timeout_seconds and agentping.idle_timeout_status alongside. Those runs are exempt from the trace-settle window. Docs.

SDKs

  • conversation(agent, sessionId) and newSessionId() in the TypeScript, Python, Go and Laravel SDKs. The run id and its start time are both derived from the session id, so a stateless request handler rebuilds the conversation on every turn without storing a mapping. Defaults to a 15 minute idle timeout closing as success.
  • idle_timeout_seconds / idle_timeout_status are settable on any run.

API

  • Fixed: POST /v1/runs/{id}/events documented the per-event identifier as id while the handler read external_id, so a request written from the documentation was rejected with 400, and the error named the field you had sent. Both names are now accepted, the docs match, and the message names the key that was missing. SDK users were never affected; anyone hand-rolling against the REST docs was.
  • goal on POST /v1/runs is documented. It was always accepted, and evaluations score against it.
  • Errors now states that unknown fields fail the whole request rather than being dropped, which makes client and server deploys order-dependent.

Docs

2026-09-17

SDKs

  • Laravel SDK v0.2.0, now on Packagist as agentping/laravel. Every laravel/ai lifecycle event is reported: one llm_call per model step with tokens and finish reason, tool_call events with arguments and results, provider failover as a step, and failures as errored events that finish the run. AgentPing::guardCheck() brings Guard to Laravel. Two new settings, AGENTPING_CAPTURE_TOOL_PAYLOADS and AGENTPING_TOOL_PAYLOAD_MAX_CHARS, control what tool calls carry. Docs.

Ingest

  • OpenTelemetry ingest reads the current GenAI semantic conventions: gen_ai.provider.name, gen_ai.usage.cache_read.input_tokens, gen_ai.usage.cache_creation.input_tokens and gen_ai.usage.reasoning.output_tokens, gen_ai.agent.name for the agent, and invoke_agent, execute_tool and embeddings spans as steps. Emitters on the older attribute names keep working. A Laravel AI SDK with OpenTelemetry page covers laravel-ai-otel.

2026-09-05

MCP

  • Agent Ping has a hosted MCP server at https://agentping.io/mcp. Add it as a remote server in ChatGPT, Claude, Claude Code, Cursor, VS Code, Codex CLI, Gemini CLI or Windsurf, approve access in the browser (OAuth 2.1, nothing to paste), and ask about your agents in plain language. Setup for each client.
  • Twenty-one tools in three permission groups. Reads (list_teams, list_agents, search_runs, get_run_events, get_run_evaluation) work on every plan, including Free. Acknowledging and resolving incidents, snoozing rules and evaluation feedback need a paid plan. Creating, updating and deleting alert rules, budgets, channels and status pages need a paid plan and the admin role. Deletes require a confirmation naming the exact thing. The server never touches billing, members, API keys or account deletion.
  • Every change made through a connected app is written to the Activity log with which app made it. Revoke any app from Settings, Connected apps; it takes effect immediately.
  • Discovery documents at /.well-known/oauth-protected-resource/mcp and /.well-known/oauth-authorization-server for clients that register themselves.

Site

  • New contact page with an inbox per topic (support, plans, security, privacy) and a form that routes to the right one. MCP is listed on every pricing tier.

2026-06-12

Plans

  • Limits up, prices down or unchanged. The new structure is Free $0 / Starter $99 / Team $199 / Business $399, with named limits and no metered billing, ever. Included events rise across every plan (100k / 2M / 10M / 25M), seats and teams are unlimited everywhere, and retention becomes two honest numbers per plan (details). Founding members keep their price where lower and carry double evaluations for life.
  • Evaluations ship out of the box: AI review of whether each run achieved its goal, no scorers to write. Monthly allowances by plan (1,000 / 6,000 / 20,000), spread evenly across the month with smart sampling, and $25 top-ups when a month runs hot. Health checks stay unlimited on every plan, including Free. How evaluations work.
  • Events become a true soft cap: going over your included events never breaks ingestion and never costs extra. We tell you, and if it keeps happening we talk about the right plan together.

Ingest

  • OpenTelemetry ingest: point any OTLP/HTTP exporter at /v1/traces and your existing traces become runs, steps, and costs. Docs.
  • Runs accept a goal on start; evaluations use it to judge outcomes. OTel traffic maps agentping.goal or the root span name automatically.
  • Metadata limits are now identical on every plan (40 keys, 128-char keys, 1KB values, 8KB total) and fail loudly with a 422 naming the offending key.

2026-05-16

SDKs

  • Python SDK: concurrent agentping.run(...) blocks under asyncio no longer cross-contaminate events when you run multiple agents in the same process. Upgrade recommended.
  • SDKs now default the ingest base URL from the API key's region segment. apk_eu_* calls https://eu.ingest.agentping.io; apk_us_* calls https://us.ingest.agentping.io. Override via the base_url / baseUrl init option or AGENTPING_BASE_URL. The previous shared api.agentping.io host is retired.

2026-05-15

SDKs

Platform

  • Quota hard-cap enforcement now flows end-to-end. The dashboard detects 150% of monthly cap and the ingest edge picks up the flag on the next sync, returning 429 monthly_cap with Retry-After counting down to the calendar rollover. Full behaviour in Rate limits and Quotas.

API

  • GET /v1/ping accepts both apk_* and ping_* tokens; the ping_* token is now the recommended choice for cron, curl, and n8n use cases.
  • Idempotent retries on POST /v1/runs return 200 OK when the supplied ID was already stored with matching fields, distinct from 202 Accepted for first-time accepts.

Billing

  • Annual billing available across every tier, saving 20% off list. Pick monthly or annual when you start a subscription. Tier details in Tiers.

2026-05-10

Platform

  • Onboarding wizard ships. Fresh accounts route through /onboarding; the user picks a tier, names their first agent, and ingests a heartbeat via the language of their choice before reaching the dashboard.

API

  • Soft-cap detection moved to a scheduled job that runs every five minutes, evaluates teams above 100% of monthly cap, queues a banner row, and sends one email to the account owner. Repeat alerts suppressed for the rest of the calendar month.

2026-05-06

Platform

  • Schedule freshness checks live. Pulse now distinguishes between agents that have ingested in the last expected window and agents that haven't; missed schedules raise an alert with the agent's owning team and the configured channel list.

Dashboard

  • Verify drift detection lands for Team and Business tiers. Score distributions are computed nightly per rubric, and a Wasserstein-distance heuristic flags rubrics whose score distribution has shifted by more than a tier-configurable threshold relative to the 14-day baseline.

2026-05-01

Platform

  • Two-region ingest live. The ingest edge runs in europe-west1 and us-central1. Credentials carry a region segment (apk_eu_*, apk_us_*, ping_eu_*, ping_us_*); the edge returns 401 region_mismatch if a credential is sent to the wrong region. Customer data stays in the region of the credential that wrote it.

This page is updated by hand at each platform change; it is not auto-generated. If you spot something missing or wrong, let us know.