qURL
NPM · @LAYERVAI/QURL-MCP · SCANNED AUG 3
Mint, resolve, audit, and rotate scope-limited expiring access links (qURLs) for AI agents.
Available components
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
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
claude mcp add layervai-qurl-mcp -- npx -y @layervai/qurl-mcp
codex mcp add layervai-qurl-mcp -- npx -y @layervai/qurl-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"layervai-qurl-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"@layervai/qurl-mcp"
],
"enabled": true
}
}
} openclaw mcp add layervai-qurl-mcp --command npx --arg -y --arg @layervai/qurl-mcp
mcp_servers:
layervai-qurl-mcp:
command: "npx"
args: ["-y", "@layervai/qurl-mcp"] {
"mcpServers": {
"layervai-qurl-mcp": {
"command": "npx",
"args": [
"-y",
"@layervai/qurl-mcp"
]
}
}
} 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.
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.
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.
batch_create_qurls 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.
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | Array of qURL creation requests (1-100 items) |
| Name | Type | Req | Description |
|---|---|---|---|
| failed | number | yes | — |
| request_id | string | — | — |
| results | array | yes | — |
| succeeded | number | yes | — |
No examples provided.
create_qurl 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…
| Name | Type | Req | Description |
|---|---|---|---|
| access_policy | object | — | Access control policy for the qURL |
| custom_domain | string | — | Custom domain to assign to the auto-created resource (max 253 chars, must be registered/active/owned). |
| expires_in | string | — | Duration string (e.g., "1h", "24h", "7d") |
| label | string | — | Human-readable label identifying who this qURL is for (max 500 chars) |
| max_sessions | integer | — | Maximum concurrent sessions for this qURL token (0 = unlimited when one_time_use is explicitly false; max 1000) |
| one_time_use | boolean | — | Whether the link can only be used once |
| session_duration | string | — | How 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_url | string | yes | The URL to protect with qURL |
| type | string | — | Resource type for integrations allowed to mint non-url qURLs. Defaults to url. |
| Name | Type | Req | Description |
|---|---|---|---|
| branded_domain | string | — | Bare branded hostname for anchor text when the resource has a usable custom domain |
| expires_at | string | yes | — |
| label | string | — | — |
| qurl_id | string | yes | Display-friendly qURL ID (q_ prefix) |
| qurl_link | string | yes | One-shot display access link — shown ONCE on creation, never returned again. Share immediately. |
| qurl_site | string | yes | — |
| resource_id | string | yes | Stable resource identifier (r_ prefix) |
| type | string | — | Resource type echoed from the create request |
No examples provided.
delete_qurl 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.
| Name | Type | Req | Description |
|---|---|---|---|
| resource_id | string | yes | The resource ID (r_ prefix). delete_qurl does not accept q_ (qURL display) IDs. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-readable confirmation message |
| resource_id | string | yes | — |
| revoked | boolean | yes | — |
| was_already_revoked | boolean | yes | True 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 Extend qURL Expiration ~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`).
| Name | Type | Req | Description |
|---|---|---|---|
| extend_by | string | yes | Duration to extend by (e.g., "24h", "7d") |
| resource_id | string | yes | The 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| created_at | string | yes | — |
| custom_domain | — | — | — |
| description | string | — | — |
| expires_at | string | yes | — |
| preserve_host | boolean | — | When 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_count | number | — | Number of access tokens minted for this resource |
| qurl_site | string | — | — |
| qurls | array | — | — |
| resource_id | string | yes | Stable resource identifier (r_ prefix) |
| slug | string | — | Immutable per-owner resource identity, when one was supplied at create time |
| status | string | yes | — |
| tags | array | — | — |
| target_url | string | — | Underlying URL the qURL protects; omitted on connector-owned resources |
No examples provided.
get_qurl 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.
| Name | Type | Req | Description |
|---|---|---|---|
| resource_id | string | yes | The 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| created_at | string | yes | — |
| custom_domain | — | — | — |
| description | string | — | — |
| expires_at | string | yes | — |
| preserve_host | boolean | — | When 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_count | number | — | Number of access tokens minted for this resource |
| qurl_site | string | — | — |
| qurls | array | — | — |
| resource_id | string | yes | Stable resource identifier (r_ prefix) |
| slug | string | — | Immutable per-owner resource identity, when one was supplied at create time |
| status | string | yes | — |
| tags | array | — | — |
| target_url | string | — | Underlying URL the qURL protects; omitted on connector-owned resources |
No examples provided.
list_qurl_sessions 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.
| Name | Type | Req | Description |
|---|---|---|---|
| resource_id | string | yes | The resource ID (r_ prefix) to list active sessions for. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | — |
| meta | object | — | — |
No examples provided.
list_qurls 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.
| Name | Type | Req | Description |
|---|---|---|---|
| created_after | string | — | Filter: created after this date (RFC 3339) |
| created_before | string | — | Filter: created before this date (RFC 3339) |
| cursor | string | — | Pagination cursor from a previous response |
| expires_after | string | — | Filter: expires after this date (RFC 3339) |
| expires_before | string | — | Filter: expires before this date (RFC 3339) |
| limit | integer | — | Maximum number of qURLs to return (default: 20) |
| q | string | — | Search query (searches description and target_url) |
| sort | string | — | Sort field and direction as 'field:direction'. Valid fields: created_at, expires_at. Valid directions: asc, desc (default desc). Example: 'created_at:desc'. |
| status | string | — | Filter by status (comma-separated, e.g. 'active,revoked'). Defaults to 'active' when omitted; pass 'revoked' or 'active,revoked' to override. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | — |
| meta | object | yes | — |
No examples provided.
mint_link Mint Access 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.
| Name | Type | Req | Description |
|---|---|---|---|
| access_policy | object | — | Access control policy for this link |
| expires_at | string | — | Absolute expiration timestamp (RFC 3339). Mutually exclusive with expires_in |
| expires_in | string | — | Relative duration until expiration (e.g., "5m", "24h", "7d"). Mutually exclusive with expires_at |
| label | string | — | Human-readable label identifying who this link is for (max 500 chars) |
| max_sessions | integer | — | Maximum concurrent sessions for this qURL token (0 = unlimited, max 1000) |
| one_time_use | boolean | — | Whether this link can only be used once |
| resource_id | string | yes | The 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_duration | string | — | How long access lasts after clicking (e.g., "1h"). Rejected if it exceeds the parent resource's session-duration cap. |
| Name | Type | Req | Description |
|---|---|---|---|
| branded_domain | string | — | Bare branded hostname for anchor text when the resource has a usable custom domain |
| expires_at | string | yes | — |
| qurl_id | string | yes | Display-friendly qURL ID (q_ prefix) for the minted token |
| qurl_link | string | yes | Newly minted access link with one-shot display semantics, like create_qurl |
| type | string | — | Resource type echoed from the underlying resource |
No examples provided.
resolve_qurl Resolve qURL Access Token ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| access_token | string | yes | The access token from a qURL link (e.g., at_k8xqp9h2sj9lx7r4a) |
| Name | Type | Req | Description |
|---|---|---|---|
| access_grant | object | yes | Time-bound, IP-bound network access grant |
| resource_id | string | yes | — |
| target_url | string | yes | Underlying URL revealed by the resolve |
No examples provided.
revoke_qurl_token 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.
| Name | Type | Req | Description |
|---|---|---|---|
| qurl_id | string | yes | The qURL display ID (q_ prefix) to revoke. |
| resource_id | string | yes | The resource ID (r_ prefix) to revoke a specific qURL token from. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | — |
| qurl_id | string | yes | — |
| resource_id | string | yes | — |
| revoked | boolean | yes | — |
No examples provided.
terminate_qurl_sessions 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.
| Name | Type | Req | Description |
|---|---|---|---|
| resource_id | string | yes | The resource ID (r_ prefix) to terminate sessions for. |
| session_id | string | — | Specific session ID to terminate. Omit to terminate all active sessions for the resource. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | — |
| resource_id | string | yes | — |
| session_id | string | — | — |
| terminated | number | yes | — |
No examples provided.
update_qurl 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`).
| Name | Type | Req | Description |
|---|---|---|---|
| custom_domain | string | — | Replace the custom domain bound to this resource (max 253 chars, must be registered/active/owned). Pass "" to clear. |
| description | string | — | Replace the resource description (max 500 chars) |
| expires_at | string | — | Absolute expiration timestamp (RFC 3339). Mutually exclusive with extend_by. |
| extend_by | string | — | Duration to extend by (e.g., "24h", "7d"). Mutually exclusive with expires_at. |
| preserve_host | boolean | — | Whether 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_id | string | yes | The 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. |
| tags | array | — | Replace all tags on this resource (max 10 tags, each 1-50 chars) |
| Name | Type | Req | Description |
|---|---|---|---|
| created_at | string | yes | — |
| custom_domain | — | — | — |
| description | string | — | — |
| expires_at | string | yes | — |
| preserve_host | boolean | — | When 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_count | number | — | Number of access tokens minted for this resource |
| qurl_site | string | — | — |
| qurls | array | — | — |
| resource_id | string | yes | Stable resource identifier (r_ prefix) |
| slug | string | — | Immutable per-owner resource identity, when one was supplied at create time |
| status | string | yes | — |
| tags | array | — | — |
| target_url | string | — | Underlying URL the qURL protects; omitted on connector-owned resources |
No examples provided.
update_qurl_token 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.
| Name | Type | Req | Description |
|---|---|---|---|
| access_policy | object | — | Replace the access policy for this token |
| expires_at | string | — | Absolute token expiration timestamp (RFC 3339). Mutually exclusive with extend_by. |
| extend_by | string | — | Duration to extend this token by (e.g., "24h", "7d"). Mutually exclusive with expires_at. |
| label | string | — | Human-readable label for this token |
| max_sessions | integer | — | Maximum concurrent sessions for this token (0 = unlimited, max 1000) |
| qurl_id | string | yes | The qURL display ID (q_ prefix) to update. |
| resource_id | string | yes | The resource ID (r_ prefix) to update a specific qURL token under. |
| session_duration | string | — | How long access lasts after clicking (e.g., "1h"). Empty string applies the parent resource cap when one is set. |
| Name | Type | Req | Description |
|---|---|---|---|
| access_policy | object | — | Access control policy snapshot for this token |
| created_at | string | — | — |
| expires_at | string | — | — |
| label | string | — | — |
| max_sessions | number | — | — |
| one_time_use | boolean | — | — |
| qurl_id | string | yes | — |
| qurl_site | string | — | — |
| session_duration | number | — | Seconds of access granted after a successful resolve |
| status | string | yes | Per-token status (wider than resource status — tokens may be consumed/expired independently) |
| use_count | number | — | — |
No examples provided.