Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

qURL

NPM · @LAYERVAI/QURL-MCP · SCANNED AUG 3

Mint, resolve, audit, and rotate scope-limited expiring access links (qURLs) for AI agents.

Available components

+52 this week 76 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →

Supply Chain Security87
  • No malware found by supply-chain analysis.Pass
  • Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.Partial
  • No install/post-install scripts declared.Pass
  • Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to layervai/qurl-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 50 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability59
  • 60% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Partial
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4430 tokens (~295/item across 15 items; 13 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management23
  • Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

npm · @layervai/qurl-mcp

# add to Claude Code
claude mcp add layervai-qurl-mcp -- npx -y @layervai/qurl-mcp
# add to Codex CLI
codex mcp add layervai-qurl-mcp -- npx -y @layervai/qurl-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "layervai-qurl-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@layervai/qurl-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add layervai-qurl-mcp --command npx --arg -y --arg @layervai/qurl-mcp
# ~/.hermes/config.yaml
mcp_servers:
  layervai-qurl-mcp:
    command: "npx"
    args: ["-y", "@layervai/qurl-mcp"]
// mcp.json
{
  "mcpServers": {
    "layervai-qurl-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@layervai/qurl-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 2 Aug 26 +68
    • Install scripts: unverified → pass security
    • Known CVEs: unverified → partial security
    • Provenance: unverified → pass security
    • Malware scan: unverified → pass security
    • The attested source repository moved: layervai/qurl-mcp security
    • Dependency health: partial → unverified functional
    • MCP protocol: unverified → pass functional
    • Schema quality: unverified → 60 functional
    • Maintenance: unverified → pass functional
    • Stability: unverified → 0.20 functional
    • License: unverified → pass functional
    • Tool coverage: unverified → 100 functional
    • Schema quality: unverified → excellent functional
    • Licence: MIT functional
  • 1 Aug 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 31 Jul 26 −40
    • Malware scan: pass → unverified security
    • Schema quality: 60 → unverified functional
    • Tool coverage: 100 → unverified functional
  • 28 Jul 26 +22
    • Schema quality: unverified → 60 functional
    • Tool coverage: unverified → 100 functional
    • First check of Schema quality: fail functional
    • First check of Schema quality: fail functional
    • First check of Tool coverage: 100 functional
    • First check of Tool coverage: 100 functional
    • First check of Schema quality: unverified functional
  • 27 Jul 26 24

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Analysed npm/@layervai/[email protected]

Provenance verified

Ecosystem: npm · Outcome: verified

Reason: verified

Source repo:
layervai/qurl-mcp
Certificate issuer:
https://token.actions.githubusercontent.com
Certificate SAN:
https://github.com/layervai/qurl-mcp/.github/workflows/release-please.yml@refs/heads/main
Rekor log index:
1810302973
Predicate type:
https://slsa.dev/provenance/v1
Subject digest:
sha512:d94821f8fcf8baed5c04b940aab4f3fcf5dff98f60f15025d20dd49249a55302df75aa49af988049d445efc57c035ef12644734014f4c98676a404bef
Discovery method:
attestation_endpoint
Dependencies 95 packages

95 packages in the resolved dependency tree · 94 deprecated · 29 stale.

The dependency tree was only partially resolved, so these counts may be incomplete.

MCP tools — 13 exposed · ~4,414 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
batch_create_qurls ~318

Create up to 100 qURLs in a single request. The single-call alternative to looping `create_qurl` — saves round trips and returns a single envelope of per-item results. **Not transactional:** items succeed or fail independently (see `succeeded`/`failed` counts and per-item `error`). Use this when you need to mint many qURLs at once (e.g. provisioning a vendor list, distributing per-customer share links). Use `create_qurl` for a single resource. **Response shape:** `{ succeeded: number, failed: number, results: BatchItemResult[], request_id?: string }`. Each `results[i]` carries `index` (matching the input position), `success`, plus either `qurl_link` + `resource_id` + `qurl_site` + `expires_at` (success) OR `error: { code, message }` (failure). Successful items may also carry `branded_domain` for custom-domain anchor text. **Partial failure signaling:** the handler sets `isError: true` on the tool response whenever `failed > 0`, so agents can branch without parsing JSON. The HTTP layer also returns 400 when every item fails — that's surfaced through the same shape (read `data.results[*].error`). **One-shot links:** like `create_qurl`, every `qurl_link` in the response is shown ONCE. Don't lose them.

NameTypeReqDescription
itemsarrayyesArray of qURL creation requests (1-100 items)
NameTypeReqDescription
failednumberyes
request_idstring
resultsarrayyes
succeedednumberyes

No examples provided.

create_qurl ~734

Create a qURL — a policy-bound, expiring access link that gates a target URL with optional IP/geo/UA/AI-agent filters and time or session limits. **When to use:** minting a fresh protected access link for share-once or time-limited access (e.g. send a customer a 24-hour download link, gate a doc behind an IP allowlist, distribute a one-time-use credential to a contractor). **When NOT to use:** use `mint_link` when you already have a resource (`r_…`) and just need an additional access token under it — `create_qurl` identifies the resource by target URL and may return an existing same-type resource grouping. Use `batch_create_qurls` to create many in one round-trip. Use `update_qurl` to retag or extend an existing resource without minting a new one. **Behavior:** not idempotent — calling twice produces two distinct qURL tokens, though both may share the same `resource_id` when the target URL groups to an existing same-type resource (this tool doesn't surface the underlying API's `Idempotency-Key` header). The returned `qurl_link` is shown ONCE in this response and is never recoverable through `get_qurl` or `list_qurls`; persist or share it immediately. A returned resource is in `active` status with the policy and per-token limits applied. If `expires_in` is omitted the API defaults to **24h** — do not assume the link is permanent. `max_sessions` is per minted qURL, not resource-wide; set `one_time_use: false` explicitly when you need `max_sessions: 0` to mean unlimited visitors. **Returns:** `{ qurl_id: string (q_…), resource_id: string (r_…), qurl_link: string (shown once), branded_domain?: string, qurl_site: string, expires_at: string (RFC 3339), label?: string, type?: string }`. `qurl_id` is the only `q_…` display ID an agent gets in this response — keep it if you plan a follow-up against `get_qurl`/`update_qurl`/`mint_link` (which accept either prefix). Example: `create_qurl({ target_url: 'https://example.com/private', expires_in: '24h', one_time_use: true, acces…

NameTypeReqDescription
access_policyobjectAccess control policy for the qURL
custom_domainstringCustom domain to assign to the auto-created resource (max 253 chars, must be registered/active/owned).
expires_instringDuration string (e.g., "1h", "24h", "7d")
labelstringHuman-readable label identifying who this qURL is for (max 500 chars)
max_sessionsintegerMaximum concurrent sessions for this qURL token (0 = unlimited when one_time_use is explicitly false; max 1000)
one_time_usebooleanWhether the link can only be used once
session_durationstringHow long access lasts after the recipient reaches the content (e.g., "1h"). This anchors the resource-level session-duration cap when a new resource is created.
target_urlstringyesThe URL to protect with qURL
typestringResource type for integrations allowed to mint non-url qURLs. Defaults to url.
NameTypeReqDescription
branded_domainstringBare branded hostname for anchor text when the resource has a usable custom domain
expires_atstringyes
labelstring
qurl_idstringyesDisplay-friendly qURL ID (q_ prefix)
qurl_linkstringyesOne-shot display access link — shown ONCE on creation, never returned again. Share immediately.
qurl_sitestringyes
resource_idstringyesStable resource identifier (r_ prefix)
typestringResource type echoed from the create request

No examples provided.

delete_qurl ~275

Permanently revoke a qURL — the link and every access token under it stop working immediately. **This action is irreversible.** Use this when you want to cut off access entirely (compromised link, departed user, end-of-engagement). Use `update_qurl` instead when you only need to shorten/extend the expiration, retag, or rename — those preserve the existing access tokens. Use `extend_qurl` when you only need to push the expiration out. **Idempotent:** the API returns 404 for re-deletes, never-existed IDs, and resources owned by another API key (ownership-mismatch is collapsed into 404 server-side to avoid existence disclosure); this tool swallows all three. Branch on `was_already_revoked` to distinguish the no-op case from a successful revoke on this call. When the ID came from user input and ownership matters, call `get_qurl` first — a 200 confirms ownership; a thrown 404 is equally ambiguous on that endpoint too. Returns a confirmation payload. By default the resource is excluded from `list_qurls`; pass `status: "revoked"` to see it.

NameTypeReqDescription
resource_idstringyesThe resource ID (r_ prefix). delete_qurl does not accept q_ (qURL display) IDs.
NameTypeReqDescription
messagestringyesHuman-readable confirmation message
resource_idstringyes
revokedbooleanyes
was_already_revokedbooleanyesTrue when the API responded 404 (resource was already revoked or never existed). Agents that need to distinguish 'I revoked it' from 'it was already gone' should branch on this.

No examples provided.

extend_qurl ~263

Push out the expiration of an active qURL by a relative duration. Convenience wrapper for the most common update — equivalent to `update_qurl({ resource_id, extend_by })`. Use this when the only change you need is more time on the clock. Use `update_qurl` instead when you also need to change tags, description, or set an absolute `expires_at`. Use `delete_qurl` when you want to cut off access entirely. Accepts both `r_` and `q_` IDs (q_ is auto-resolved to its parent resource). **Not idempotent:** calling twice with the same `extend_by` extends the expiration twice. If you need an absolute target, use `update_qurl` with `expires_at` so retries on transient errors don't double-push. Returns the updated resource with the new `expires_at` (same shape as `get_qurl`).

NameTypeReqDescription
extend_bystringyesDuration to extend by (e.g., "24h", "7d")
resource_idstringyesThe resource ID (r_ prefix) or qURL display ID (q_ prefix) to extend. If a q_ ID is passed, the API resolves it to the parent resource automatically.
NameTypeReqDescription
created_atstringyes
custom_domain
descriptionstring
expires_atstringyes
preserve_hostbooleanWhen true, the original Host header is preserved when proxying via the custom domain. Only meaningful when custom_domain is set; defaults to false on the API side.
qurl_countnumberNumber of access tokens minted for this resource
qurl_sitestring
qurlsarray
resource_idstringyesStable resource identifier (r_ prefix)
slugstringImmutable per-owner resource identity, when one was supplied at create time
statusstringyes
tagsarray
target_urlstringUnderlying URL the qURL protects; omitted on connector-owned resources

No examples provided.

get_qurl ~233

Fetch a single qURL resource by ID and return its current state plus a bounded preview of access tokens. Use this when you have a specific resource ID (r_ prefix) or qURL display ID (q_ prefix) — q_ IDs are auto-resolved to their parent resource. Use `list_qurls` instead when you need to discover qURLs by status, date range, or search query. Use `resolve_qurl` instead when you have an end-user access token (at_ prefix) and need to redeem it for the underlying URL. `qurls[]` is an unordered preview capped by the API at 100 rows and may be omitted on list views, preview lookup failure, or redacted connector-owned resources; use `qurl_count` to detect that more token rows may exist. The one-shot `qurl_link` from creation is never returned here.

NameTypeReqDescription
resource_idstringyesThe resource ID (r_ prefix) or qURL display ID (q_ prefix) to fetch. If a q_ ID is passed, the API resolves it to the parent resource automatically.
NameTypeReqDescription
created_atstringyes
custom_domain
descriptionstring
expires_atstringyes
preserve_hostbooleanWhen true, the original Host header is preserved when proxying via the custom domain. Only meaningful when custom_domain is set; defaults to false on the API side.
qurl_countnumberNumber of access tokens minted for this resource
qurl_sitestring
qurlsarray
resource_idstringyesStable resource identifier (r_ prefix)
slugstringImmutable per-owner resource identity, when one was supplied at create time
statusstringyes
tagsarray
target_urlstringUnderlying URL the qURL protects; omitted on connector-owned resources

No examples provided.

list_qurl_sessions ~116

List active access sessions for a qURL resource. Use this to inspect who currently has live access before rotating, revoking, or terminating sessions. Use `terminate_qurl_sessions` when active sessions should be ended, and use `get_qurl` when you need token/resource metadata instead of active session state. **Behavior:** read-only and idempotent. Empty `data[]` means no active sessions for the resource.

NameTypeReqDescription
resource_idstringyesThe resource ID (r_ prefix) to list active sessions for.
NameTypeReqDescription
dataarrayyes
metaobject

No examples provided.

list_qurls ~636

List qURL resources, paginated and optionally filtered by status, date range, or search text. **When to use:** discovery — finding qURLs by status (e.g. everything still active), auditing date ranges, or full-text search across descriptions and target URLs (via the `q` parameter). Filters AND together (e.g. `status: 'active'` + `expires_before: '2026-05-01T00:00:00Z'` returns active qURLs about to expire). **When NOT to use:** use `get_qurl` instead when you already have a specific resource ID — it returns the same per-resource shape more cheaply and includes the `qurls[]` per-token detail that `list_qurls` omits. Use `resolve_qurl` to actually open access to a target URL. **Behavior:** read-only and idempotent. An empty `data[]` with `meta.has_more: false` means no resource matched the filters (not an error). Pagination is cursor-based: when `meta.has_more` is `true`, pass `meta.next_cursor` as `cursor` on the next call to fetch the following page. Default page size is 20, configurable via `limit` up to 100. By default only `active` qURLs are returned; pass `status: 'revoked'` to see only revoked qURLs or `'active,revoked'` to see both. Sort defaults to `created_at:desc`; override with `sort: 'expires_at:asc'` etc. **Returns:** `{ data: QURL[], meta: { has_more: boolean, next_cursor?: string, page_size?: number, request_id?: string } }` — each `data[]` item is the same stable resource shape returned by `get_qurl` minus per-token detail. Example: `list_qurls({ status: "active", sort: "expires_at:asc", limit: 10 })` returns the 10 active qURLs expiring soonest.

NameTypeReqDescription
created_afterstringFilter: created after this date (RFC 3339)
created_beforestringFilter: created before this date (RFC 3339)
cursorstringPagination cursor from a previous response
expires_afterstringFilter: expires after this date (RFC 3339)
expires_beforestringFilter: expires before this date (RFC 3339)
limitintegerMaximum number of qURLs to return (default: 20)
qstringSearch query (searches description and target_url)
sortstringSort field and direction as 'field:direction'. Valid fields: created_at, expires_at. Valid directions: asc, desc (default desc). Example: 'created_at:desc'.
statusstringFilter by status (comma-separated, e.g. 'active,revoked'). Defaults to 'active' when omitted; pass 'revoked' or 'active,revoked' to override.
NameTypeReqDescription
dataarrayyes
metaobjectyes

No examples provided.

mint_link ~438

Mint a fresh access link for an existing qURL resource — same one-shot display semantics as `create_qurl.qurl_link`. Use this to issue additional access links to a resource without creating a brand-new qURL (e.g. a second recipient, a replacement after the original was lost). Use `create_qurl` instead when you want a brand-new resource with its own target_url and policy. Use `update_qurl` when you only want to change expiration/tags/description on the existing resource. Accepts both `r_` and `q_` IDs. **Constraints:** `expires_in` and `expires_at` are mutually exclusive (handler returns an `isError: true` content block before any API call if both are set). If neither expiry field is specified, the API defaults to 24 hours from now. **Output:** the new `qurl_link` is shown ONCE — no subsequent call returns it. Capture `qurl_id` if you need to correlate future access events or update this specific token.

NameTypeReqDescription
access_policyobjectAccess control policy for this link
expires_atstringAbsolute expiration timestamp (RFC 3339). Mutually exclusive with expires_in
expires_instringRelative duration until expiration (e.g., "5m", "24h", "7d"). Mutually exclusive with expires_at
labelstringHuman-readable label identifying who this link is for (max 500 chars)
max_sessionsintegerMaximum concurrent sessions for this qURL token (0 = unlimited, max 1000)
one_time_usebooleanWhether this link can only be used once
resource_idstringyesThe resource ID (r_ prefix) or qURL display ID (q_ prefix) to mint a new access link for. If a q_ ID is passed, the API resolves it to the parent resource automatically.
session_durationstringHow long access lasts after clicking (e.g., "1h"). Rejected if it exceeds the parent resource's session-duration cap.
NameTypeReqDescription
branded_domainstringBare branded hostname for anchor text when the resource has a usable custom domain
expires_atstringyes
qurl_idstringyesDisplay-friendly qURL ID (q_ prefix) for the minted token
qurl_linkstringyesNewly minted access link with one-shot display semantics, like create_qurl
typestringResource type echoed from the underlying resource

No examples provided.

resolve_qurl ~260

Redeem a qURL access token (the `at_` prefix you pulled out of a `qurl_link`) to reveal the underlying URL and obtain a time-bound, IP-bound network access grant. Use this when an agent has been handed an access token and needs to fetch the protected resource — after a successful resolve, requests from `access_grant.src_ip` are permitted to the `target_url` for `access_grant.expires_in` seconds. Use `get_qurl` instead when you have a resource ID (`r_`) or qURL display ID (`q_`) and want admin-side details rather than end-user redemption. **Side-effects:** consumes one use on `one_time_use` tokens, decrements `max_sessions`, and may trip access policies (IP/geo/UA/AI-agent denylists). **`idempotentHint: false`** because one-time-use tokens consume on each call; for non-one-time tokens within an active grant window, repeats are effectively no-ops, but the conservative annotation reflects worst-case behavior.

NameTypeReqDescription
access_tokenstringyesThe access token from a qURL link (e.g., at_k8xqp9h2sj9lx7r4a)
NameTypeReqDescription
access_grantobjectyesTime-bound, IP-bound network access grant
resource_idstringyes
target_urlstringyesUnderlying URL revealed by the resolve

No examples provided.

revoke_qurl_token ~161

Revoke one qURL token under a resource without revoking the whole resource. Use this when a single recipient/link should stop working but sibling qURLs on the same `resource_id` must remain active. Use `delete_qurl` instead when you want to revoke the resource and every token under it. **Constraints:** requires the parent `resource_id` (`r_…`) and the token display ID (`q_…`). Re-revoking an inactive token returns an API error rather than being treated as idempotent.

NameTypeReqDescription
qurl_idstringyesThe qURL display ID (q_ prefix) to revoke.
resource_idstringyesThe resource ID (r_ prefix) to revoke a specific qURL token from.
NameTypeReqDescription
messagestringyes
qurl_idstringyes
resource_idstringyes
revokedbooleanyes

No examples provided.

terminate_qurl_sessions ~148

Terminate active access sessions for a qURL resource. Use this after shortening access, rotating a link, or responding to a suspected leak when already-open sessions should end immediately. Pass `session_id` to terminate one active session; omit it to terminate all active sessions for the resource. Use `list_qurl_sessions` first when you need to inspect current sessions before taking action. **Side-effects:** existing access sessions are closed; qURL tokens themselves are not revoked.

NameTypeReqDescription
resource_idstringyesThe resource ID (r_ prefix) to terminate sessions for.
session_idstringSpecific session ID to terminate. Omit to terminate all active sessions for the resource.
NameTypeReqDescription
messagestringyes
resource_idstringyes
session_idstring
terminatednumberyes

No examples provided.

update_qurl ~524

Update a qURL's expiration, tags, description, custom domain, or proxy host-header behavior. The richer alternative to `extend_qurl` — use `update_qurl` whenever you need anything beyond a relative time push. Accepts both `r_` and `q_` IDs for expiration, tags, and description updates (q_ is auto-resolved); custom domain and preserve_host updates require an `r_` resource ID because the qURL API now serves them from `PATCH /v1/resources/{id}`. **Constraints:** `extend_by` and `expires_at` are mutually exclusive; `custom_domain`/`preserve_host` cannot be combined with expiration changes in one call; at least one update field (`extend_by`, `expires_at`, `tags`, `description`, `custom_domain`, `preserve_host`) must be set. **Clearing fields:** pass `description: ""`, `tags: []`, or `custom_domain: ""` to clear those fields explicitly. Use `extend_qurl` when the only change is a relative time push. Use `delete_qurl` when you want to revoke entirely. **Errors:** if the input fails schema refinements (both extend_by + expires_at, or no fields set), the handler returns an `isError: true` content block before any API call. Other API errors throw with the API's `code`/`statusCode`. Returns the updated resource (same shape as `get_qurl`).

NameTypeReqDescription
custom_domainstringReplace the custom domain bound to this resource (max 253 chars, must be registered/active/owned). Pass "" to clear.
descriptionstringReplace the resource description (max 500 chars)
expires_atstringAbsolute expiration timestamp (RFC 3339). Mutually exclusive with extend_by.
extend_bystringDuration to extend by (e.g., "24h", "7d"). Mutually exclusive with expires_at.
preserve_hostbooleanWhether to preserve the original Host header when proxying via the custom domain. Only meaningful when custom_domain is set; default false on the API side.
resource_idstringyesThe resource ID (r_ prefix) or qURL display ID (q_ prefix) to update. If a q_ ID is passed, the API resolves it to the parent resource automatically.
tagsarrayReplace all tags on this resource (max 10 tags, each 1-50 chars)
NameTypeReqDescription
created_atstringyes
custom_domain
descriptionstring
expires_atstringyes
preserve_hostbooleanWhen true, the original Host header is preserved when proxying via the custom domain. Only meaningful when custom_domain is set; defaults to false on the API side.
qurl_countnumberNumber of access tokens minted for this resource
qurl_sitestring
qurlsarray
resource_idstringyesStable resource identifier (r_ prefix)
slugstringImmutable per-owner resource identity, when one was supplied at create time
statusstringyes
tagsarray
target_urlstringUnderlying URL the qURL protects; omitted on connector-owned resources

No examples provided.

update_qurl_token ~308

Update one qURL token under a resource: expiration, label, access policy, max sessions, or session duration. Use this when you need to change a specific `q_…` token without changing sibling tokens or resource-level metadata. Use `update_qurl` instead for resource-level description/tags/custom-domain changes, and use `revoke_qurl_token` when the token should stop working entirely. **Constraints:** `extend_by` and `expires_at` are mutually exclusive; at least one token update field must be set. Returns the updated token summary.

NameTypeReqDescription
access_policyobjectReplace the access policy for this token
expires_atstringAbsolute token expiration timestamp (RFC 3339). Mutually exclusive with extend_by.
extend_bystringDuration to extend this token by (e.g., "24h", "7d"). Mutually exclusive with expires_at.
labelstringHuman-readable label for this token
max_sessionsintegerMaximum concurrent sessions for this token (0 = unlimited, max 1000)
qurl_idstringyesThe qURL display ID (q_ prefix) to update.
resource_idstringyesThe resource ID (r_ prefix) to update a specific qURL token under.
session_durationstringHow long access lasts after clicking (e.g., "1h"). Empty string applies the parent resource cap when one is set.
NameTypeReqDescription
access_policyobjectAccess control policy snapshot for this token
created_atstring
expires_atstring
labelstring
max_sessionsnumber
one_time_useboolean
qurl_idstringyes
qurl_sitestring
session_durationnumberSeconds of access granted after a successful resolve
statusstringyesPer-token status (wider than resource status — tokens may be consumed/expired independently)
use_countnumber

No examples provided.