Skip to content
Scalekit Docs

Bitly MCP

Vendor MCP79 toolsOAuth 2.1/DCRMarketingCRM & Sales

Connect with Bitly MCP for URL shortening, link analytics, and branded links.

Bitly MCP connector

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. quickstart.ts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENV_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'bitlymcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Bitly MCP:', link)
    process.stdout.write('Press Enter after authorizing...')
    await new Promise(r => process.stdin.once('data', r))
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'bitlymcp_get_custom_domains',
    toolInput: {},
    })
    console.log(result)

Connect this agent connector to let your agent:

  • Create and manage short links — shorten URLs, create links with custom back-halves, update link metadata, and delete links
  • Create and manage QR codes — generate QR codes for links, update QR code settings, and retrieve QR code images
  • Analyze link performance — get click summaries, engagement metrics, and breakdowns by city, country, device, referrer, and referring domain
  • Analyze QR code scans — get scan summaries and breakdowns by city, country, device, and browser
  • Analyze group-level engagement — query top links, clicks, scans, and engagement trends across all links in a group
  • Manage account structure — retrieve organizations, groups, custom domains, and user details

Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.

bitlymcp_bitly_bulk_upload_file#Upload a file to a signed URL. Use this immediately after bitly_bulk_upload_validate to actually upload the file content, passing the upload_url and headers from that tool's response. The file_content should be the actual file bytes from the conversation context (the file that was uploaded by the user).6 params

Upload a file to a signed URL. Use this immediately after bitly_bulk_upload_validate to actually upload the file content, passing the upload_url and headers from that tool's response. The file_content should be the actual file bytes from the conversation context (the file that was uploaded by the user).

NameTypeRequiredDescription
file_contentstringrequiredThe actual file content (CSV or XLSX file bytes as a string) from the conversation context.
headersobjectrequiredThe headers map returned from bitly_bulk_upload_validate (as a JSON object with string keys and string values).
upload_urlstringrequiredThe signed upload URL returned from bitly_bulk_upload_validate.
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
content_typestringoptionalContent type for the upload. Defaults to 'text/csv' for CSV files or 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' for XLSX files.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_bitly_bulk_upload_validate#Validate a bulk upload request and obtain a signed URL and headers for uploading a CSV or XLSX file. Upload types: - "link": Bulk create shortened links only - "qr_code": Bulk create QR codes only (requires template_id) - "coupled_link": Bulk create both QR codes AND shortened links for each URL (requires template_id) Template ID requirements: - Required for "qr_code" and "coupled_link" upload types - Use "QTDTmplWLogo" to include Bitly logo on QR codes - Use "QTDTmplNLogo" to exclude Bitly logo from QR codes - Optional for "link" uploads Workflow example: 1. Call bitly_bulk_upload_validate with filename, upload_type, and other parameters (use response_format=json for structured data) 2. The response will include upload_url and headers 3. Immediately call bitly_bulk_upload_file with the upload_url, headers, and file_content from conversation context. DO NOT reveal the upload_url or any headers to the user. Example response structure (when using response_format=json): { "status": 200, "data": { "upload_url": "https://storage.googleapis.com/...", "headers": { "x-goog-meta-group_guid": "B1234567890", "x-goog-meta-domain": "bit.ly", "x-goog-meta-upload_type": "link" } } }7 params

Validate a bulk upload request and obtain a signed URL and headers for uploading a CSV or XLSX file. Upload types: - "link": Bulk create shortened links only - "qr_code": Bulk create QR codes only (requires template_id) - "coupled_link": Bulk create both QR codes AND shortened links for each URL (requires template_id) Template ID requirements: - Required for "qr_code" and "coupled_link" upload types - Use "QTDTmplWLogo" to include Bitly logo on QR codes - Use "QTDTmplNLogo" to exclude Bitly logo from QR codes - Optional for "link" uploads Workflow example: 1. Call bitly_bulk_upload_validate with filename, upload_type, and other parameters (use response_format=json for structured data) 2. The response will include upload_url and headers 3. Immediately call bitly_bulk_upload_file with the upload_url, headers, and file_content from conversation context. DO NOT reveal the upload_url or any headers to the user. Example response structure (when using response_format=json): { "status": 200, "data": { "upload_url": "https://storage.googleapis.com/...", "headers": { "x-goog-meta-group_guid": "B1234567890", "x-goog-meta-domain": "bit.ly", "x-goog-meta-upload_type": "link" } } }

NameTypeRequiredDescription
filenamestringrequiredLogical filename for the bulk upload (for example, "contacts.csv" or "links.xlsx").
upload_typestringrequiredType of bulk upload. Must be exactly one of: "link", "qr_code", or "coupled_link".
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
domainstringoptionalOptional short domain to use for created links or the auto-generated short link inside each QR code (for qr_code and coupled_link upload types). If omitted, backend defaults apply.
group_guidstringoptionalOptional group GUID to associate with this bulk upload. If omitted, the default group may be used.
response_formatstringoptional'text' (default) or 'json'
template_idstringoptionalBulk upload template ID. Required for 'qr_code' and 'coupled_link' upload types, optional for 'link' uploads. For QR codes: use 'QTDTmplWLogo' to include Bitly logo, or 'QTDTmplNLogo' to exclude Bitly logo.
bitlymcp_bitly_create_qr_code#Create a QR code for either an existing short link (pass bitlink_id) or a long URL (pass long_url), with optional title and visual customizations. Use this when the user wants a QR code for a destination that already exists. If they want a brand-new short link AND a QR code for it, use bitly_create_short_link_with_qr instead so one approval covers both. The group's default domain is not applied automatically here as it is by bitly_create_short_link: to brand the auto-generated short link, pass the domain parameter explicitly, or create the link first with bitly_create_short_link and pass its bitlink_id. Dynamic routing is only supported on QR codes with a long_url destination (decoupled); for a QR backed by an existing short link (coupled), set routing on the link via bitly_update_short_link instead. If the QR code has a long_url destination, do not reveal the serialized content to the user.11 params

Create a QR code for either an existing short link (pass bitlink_id) or a long URL (pass long_url), with optional title and visual customizations. Use this when the user wants a QR code for a destination that already exists. If they want a brand-new short link AND a QR code for it, use bitly_create_short_link_with_qr instead so one approval covers both. The group's default domain is not applied automatically here as it is by bitly_create_short_link: to brand the auto-generated short link, pass the domain parameter explicitly, or create the link first with bitly_create_short_link and pass its bitlink_id. Dynamic routing is only supported on QR codes with a long_url destination (decoupled); for a QR backed by an existing short link (coupled), set routing on the link via bitly_update_short_link instead. If the QR code has a long_url destination, do not reveal the serialized content to the user.

NameTypeRequiredDescription
group_guidstringrequiredThe GUID of the group to create the QR code in
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
archivedbooleanoptionalWhether the QR code should be archived (default: false)
bitlink_idstringoptionalExisting short link ID to use as destination
domainstringoptionalPreferred short domain for the QR code's auto-generated short link (e.g. bit.ly). Only applies when using long_url; ignored when bitlink_id is provided. A Bitly domain (bit.ly, j.mp) is a preference, not a guarantee: if the destination site has a branded domain configured, that domain is used instead. A branded domain the group owns is used as requested. The returned short link ID shows the domain that was actually used.
dynamic_routingarrayoptionalOptional dynamic routing rules that redirect visitors to different destinations based on their country, region, device, or OS. Provide an array of up to 10 rule objects; each rule must include 'long_url' plus at least one match/exclude condition. All of a rule's conditions must match for it to apply, and rules are evaluated top to bottom — the first matching rule wins. Fields per rule: 'long_url' (string, required) — destination for matching visitors; 'country_match'/'country_exclude' (array of ISO 3166-1 alpha-2 codes, e.g. ["US","GB"]); 'region_match'/'region_exclude' (array of ISO 3166-2 codes formatted 'CC-SUB', e.g. ["US-CA"]; the region's country must also appear in country_match); 'device_match'/'device_exclude' (array of "mobile", "tablet", or "desktop"); 'os_match'/'os_exclude' (array of "ios" or "android"). Example: [{"long_url":"https://example.com/us","country_match":["US"],"os_match":["ios"]},{"long_url":"https://example.com/row","country_exclude":["US"]}]. Omit to leave existing routing unchanged. When updating, the provided rules replace all existing rules (not additive); pass an empty array ([]) to remove all rules.
expiration_atstringoptionalOptional expiration timestamp in ISO 8601 format 'YYYY-MM-DDTHH:MM:SS+0000' (e.g. "2026-12-31T23:59:59+0000"). Only supported on QR codes with a long_url destination, not ones backed by an existing short link, and on accounts entitled to link expiration; the API rejects it otherwise. When updating, pass an empty string ("") to remove an existing expiration; omit to leave it unchanged.
long_urlstringoptionalThe destination URL for the QR code
render_customizationsobjectoptionalCustomize the look of the QR code. Apply 'foreground' colors to all corners and the pips. Space gradient colors evenly if no offsets are specified. Strictly follow the naming and structure of this example (non-relevant values can be left out): {"background_color":"#ffffff","dot_pattern_color":"#EF8000","dot_pattern_type":"rounded","corners":{"corner_1":{"inner_color":"#EF8000","outer_color":"#EF8000","shape":"leaf"},"corner_2":{"inner_color":"#EF8000","outer_color":"#EF8000","shape":"leaf"},"corner_3":{"inner_color":"#EF8000","outer_color":"#EF8000","shape":"leaf"}},"gradient":{"style":"linear","angle":45,"colors":[{"color":"#c80404","offset":10},{"color":"#042f86","offset":90}],"exclude_corners":false},"background_gradient":{"style":"radial","colors":[{"color":"#c696ee","offset":25},{"color":"#d4e1a8","offset":50}]},"logo":{"image_guid":"bitlylogo"},"frame":{"id":"text_bottom","colors":{"primary":"#f55656","background":"#ffffff"},"text":{"primary":{"content":"QR Frame"},"secondary":{"content":"Frame Text"}}},"branding":{"bitly_brand":true},"spec_settings":{"error_correction":4}}
response_formatstringoptional'text' (default) or 'json'
titlestringoptionalThe title of the QR code
bitlymcp_bitly_export_data#Export link or QR data as CSV. Always use response_format="json". Returns a download-card payload (filename, row_count, truncated, columns) — do not paste CSV, base64, or data_uri into chat; tell the user the file is ready to download. Dates: use unix_from_date and unix_to_date as YYYY-MM-DD (UTC); the server converts to timestamps. For relative ranges (e.g. "last 30 days", "this month"), derive dates from system context. Choose export_type by what the user asked for: link_engagements_timeseries — one CSV row per calendar day (never monthly). REQUIRED when the user says daily, by day, each day, per day, time series, engagements over time, or any daily metrics export — even without an explicit date range. Never use link_engagements_batch for those. One known link: bitlinks=["domain.com/backhalf"] (fully qualified short URL). Multiple links: filter (tags, destination, domain, query, etc.) for dashboard link-performance columns (Date, Short Link, Destination, Clicks, QR Scans, Button Clicks, Total Engagements) — one row per link per day. For link_engagements_timeseries always set unix_from_date and unix_to_date: use the user's range if given; otherwise default to the last 30 days from system context. link_engagements_batch — one row per link with period totals (Link, Title, clicks/scans/button_clicks for the whole range). Use only for summary tables with no daily breakdown (e.g. "total engagements per link"). links_list — link metadata CSV (filter required; optional include_metrics). qr_codes_list — QR metadata CSV (filter required; optional include_metrics). For link_engagements_timeseries and link_engagements_batch: provide bitlinks OR filter, not both. For link_engagements_timeseries, always pass unix_from_date/unix_to_date (default last 30 days if the user did not specify a range). For link_engagements_batch and list exports, omitting dates falls back to the tier max-history window. Filter tips: filter.destination (hostname, hostname/path, or path) for "links pointing to destination.com" — prefer over filter.query; filter.tags for tag-based sets; filter.query for free-text search on title/tags/URLs. Row caps: up to 200 matched links for engagement exports (bitlinks list or filter resolution); if truncated is true, only the first 200 links were included — say the export is partial and ask the user to narrow filter (tags, destination, domain, dates, campaign, query) or split bitlinks into batches of 200 or fewer. If the API returns EXPORT_TOO_LARGE, the link×day grid exceeds the inline limit — ask the user to narrow the date range or filter to fewer links. Do not state or infer a total match count. For links_list/qr_codes_list with include_metrics, cap is 200 rows; without metrics, 1000. Do not auto-retry bitly_export_data — wait for the user.9 params

Export link or QR data as CSV. Always use response_format="json". Returns a download-card payload (filename, row_count, truncated, columns) — do not paste CSV, base64, or data_uri into chat; tell the user the file is ready to download. Dates: use unix_from_date and unix_to_date as YYYY-MM-DD (UTC); the server converts to timestamps. For relative ranges (e.g. "last 30 days", "this month"), derive dates from system context. Choose export_type by what the user asked for: link_engagements_timeseries — one CSV row per calendar day (never monthly). REQUIRED when the user says daily, by day, each day, per day, time series, engagements over time, or any daily metrics export — even without an explicit date range. Never use link_engagements_batch for those. One known link: bitlinks=["domain.com/backhalf"] (fully qualified short URL). Multiple links: filter (tags, destination, domain, query, etc.) for dashboard link-performance columns (Date, Short Link, Destination, Clicks, QR Scans, Button Clicks, Total Engagements) — one row per link per day. For link_engagements_timeseries always set unix_from_date and unix_to_date: use the user's range if given; otherwise default to the last 30 days from system context. link_engagements_batch — one row per link with period totals (Link, Title, clicks/scans/button_clicks for the whole range). Use only for summary tables with no daily breakdown (e.g. "total engagements per link"). links_list — link metadata CSV (filter required; optional include_metrics). qr_codes_list — QR metadata CSV (filter required; optional include_metrics). For link_engagements_timeseries and link_engagements_batch: provide bitlinks OR filter, not both. For link_engagements_timeseries, always pass unix_from_date/unix_to_date (default last 30 days if the user did not specify a range). For link_engagements_batch and list exports, omitting dates falls back to the tier max-history window. Filter tips: filter.destination (hostname, hostname/path, or path) for "links pointing to destination.com" — prefer over filter.query; filter.tags for tag-based sets; filter.query for free-text search on title/tags/URLs. Row caps: up to 200 matched links for engagement exports (bitlinks list or filter resolution); if truncated is true, only the first 200 links were included — say the export is partial and ask the user to narrow filter (tags, destination, domain, dates, campaign, query) or split bitlinks into batches of 200 or fewer. If the API returns EXPORT_TOO_LARGE, the link×day grid exceeds the inline limit — ask the user to narrow the date range or filter to fewer links. Do not state or infer a total match count. For links_list/qr_codes_list with include_metrics, cap is 200 rows; without metrics, 1000. Do not auto-retry bitly_export_data — wait for the user.

NameTypeRequiredDescription
export_typestringrequiredWhich export shape to produce. "link_engagements_timeseries" — one row per calendar day (use for daily/by-day/time-series requests; never monthly). "link_engagements_batch" — one row per link with period totals only (no daily breakdown). "links_list" — link metadata list. "qr_codes_list" — QR metadata list. See the tool description for columns, filters, and date parameters.
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
bitlinksarrayoptionalExplicit list of fully qualified bitlinks (e.g. "bit.ly/abc"). Used by link_engagements_timeseries and link_engagements_batch when you already know the exact bitlinks. Mutually exclusive with `filter` (provide one or the other). Hard-capped at 200 matched links; oversized lists set truncated=true.
filterobjectoptionalServer-side filter object resolved against the user's brand. Required for export_type "links_list" and "qr_codes_list"; optional for "link_engagements_batch" and "link_engagements_timeseries" (mutually exclusive with `bitlinks`). Accepted fields: "tags" (string array), "domain" (string), "archived" ("on"/"off"/"both"), "query" (free-text search across title, tags, and URLs), "destination" (hostname, hostname/path, or path prefix — matches link destination URLs; prefer over query for "links pointing to destination.com"), "created_after_date" ("YYYY-MM-DD", UTC start-of-day inclusive — preferred over created_after), "created_before_date" ("YYYY-MM-DD", UTC start-of-following-day exclusive — preferred over created_before), "campaign_guid" (string; ignored for qr_codes_list).
include_metricsbooleanoptionalFor links_list and qr_codes_list only. Appends clicks, scans, button_clicks columns (requires unix_from_date/unix_to_date). Row cap is 200 instead of 1000. Ignored for link_engagements_batch and link_engagements_timeseries.
response_formatstringoptional'text' (default) or 'json'
unix_from_datestringoptionalStart of the metrics date range as "YYYY-MM-DD" (UTC). Maps to midnight (00:00:00 UTC) of that day. Required for link_engagements_timeseries (default last 30 days if the user did not specify a range). Also used by link_engagements_batch and list exports with include_metrics=true. Clamped to the user's tier data window. Example: "2026-05-01".
unix_to_datestringoptionalEnd of the metrics date range as "YYYY-MM-DD" (UTC). Maps to 23:59:59 UTC of that day (inclusive). Must be the same day as or after unix_from_date when both are set. Example: "2026-05-18".
bitlymcp_bitly_get_custom_domains#List all custom domains (also called branded short domains or BSDs) available to the authenticated user for use instead of 'bit.ly' when creating short links.2 params

List all custom domains (also called branded short domains or BSDs) available to the authenticated user for use instead of 'bit.ly' when creating short links.

NameTypeRequiredDescription
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_bitly_get_group_analytics#Get analytics across all links in a group (workspace). Use this when the user asks about overall performance or top-performing links, rather than one specific link. For a single link use bitly_get_link_analytics; for a single QR code's scans use bitly_get_qr_code_analytics. Choose a dataset — 'clicks', 'engagements' (clicks + QR scans + button clicks), or 'qr_scans' — and a dimension: a facet breakdown, 'over_time' (time series), or 'top' (best performing links). There is no group-level total/summary dimension: for an overall count over a period use 'over_time' and total the returned series; for a single link's total use bitly_get_link_analytics with dimension 'summary'. Valid dimensions per dataset — clicks: cities, countries, device_os, over_time, referrers, top; engagements: cities, countries, devices, over_time, referrers, referring_networks, top; qr_scans: cities, countries, over_time, top. 'devices' is device form factor (mobile, desktop, ...) and 'device_os' is operating system (iOS, Android, Windows, ...). Notes: for datasets 'engagements' and 'qr_scans' the raw JSON keys counts as 'clicks' even though the values are engagements/scans; for dataset 'clicks' with dimension 'referrers' the v4 API returns engagement counts, not clicks alone.9 params

Get analytics across all links in a group (workspace). Use this when the user asks about overall performance or top-performing links, rather than one specific link. For a single link use bitly_get_link_analytics; for a single QR code's scans use bitly_get_qr_code_analytics. Choose a dataset — 'clicks', 'engagements' (clicks + QR scans + button clicks), or 'qr_scans' — and a dimension: a facet breakdown, 'over_time' (time series), or 'top' (best performing links). There is no group-level total/summary dimension: for an overall count over a period use 'over_time' and total the returned series; for a single link's total use bitly_get_link_analytics with dimension 'summary'. Valid dimensions per dataset — clicks: cities, countries, device_os, over_time, referrers, top; engagements: cities, countries, devices, over_time, referrers, referring_networks, top; qr_scans: cities, countries, over_time, top. 'devices' is device form factor (mobile, desktop, ...) and 'device_os' is operating system (iOS, Android, Windows, ...). Notes: for datasets 'engagements' and 'qr_scans' the raw JSON keys counts as 'clicks' even though the values are engagements/scans; for dataset 'clicks' with dimension 'referrers' the v4 API returns engagement counts, not clicks alone.

NameTypeRequiredDescription
datasetstringrequiredWhat to measure: 'clicks' (link clicks only), 'engagements' (clicks + QR scans + button clicks), or 'qr_scans' (QR code scans only).
dimensionstringrequiredThe report to return. Valid values depend on the dataset — clicks: cities, countries, device_os, over_time, referrers, top; engagements: cities, countries, devices, over_time, referrers, referring_networks, top; qr_scans: cities, countries, over_time, top.
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizenumberoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 timestamp for the END of the time range. The range is the last 'units' periods ending on this date (e.g. '2025-02-28T00:00:00+0000' with units=28 gives all of February). For a full month, use the last day of that month (e.g. 2026-02-28 for Feb 2026). Omit for default: now.
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_bitly_get_group_details#Get metadata for a specific group by GUID, including name, organization, role, creation date, custom domains (BSDs), and status. For the group's preferred short domain, use get_group_preferences instead.3 params

Get metadata for a specific group by GUID, including name, organization, role, creation date, custom domains (BSDs), and status. For the group's preferred short domain, use get_group_preferences instead.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_bitly_get_group_preferences#Get a group's preferences, including its default (preferred) short domain. Check this first when deciding which domain to shorten a link to, then fall back to get_group_details for the group's full list of available custom domains.3 params

Get a group's preferences, including its default (preferred) short domain. Check this first when deciding which domain to shorten a link to, then fall back to get_group_details for the group's full list of available custom domains.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_bitly_get_group_qr_codes#List the QR codes in a group, with search, archived-status and dynamic-routing filters, and pagination. Use this to browse a group's QR codes or to find one by title or destination when you don't have its ID. Note: QR codes backed by an existing short link (coupled) appear here. bitly_update_qr_code can still change their title, archived status and visual customizations, and dynamic routing must be set on the underlying link with bitly_update_short_link instead. Expiration is not supported on coupled QR codes at all.8 params

List the QR codes in a group, with search, archived-status and dynamic-routing filters, and pagination. Use this to browse a group's QR codes or to find one by title or destination when you don't have its ID. Note: QR codes backed by an existing short link (coupled) appear here. bitly_update_qr_code can still change their title, archived status and visual customizations, and dynamic routing must be set on the underlying link with bitly_update_short_link instead. Expiration is not supported on coupled QR codes at all.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
archivedstringoptionalFilter by archived status: 'on' (archived only), 'off' (non-archived only), 'both' (all)
has_dynamic_routingstringoptionalFilter by dynamic routing: 'on' (only QR codes with dynamic routing), 'off' (only those without), 'both' (all, default). Requires the dynamic_routing feature; otherwise ignored.
querystringoptionalSearch term to filter QR codes by title or destination URL
response_formatstringoptional'text' (default) or 'json'
search_afterstringoptionalPagination cursor for retrieving next page of results
sizestringoptionalNumber of QR codes to return (default: 50, max: 100)
bitlymcp_bitly_get_groups#List all groups (workspaces) the authenticated user has access to across all organizations, optionally filtered to one organization. Groups contain links and QR codes; use the returned group_guid with other tools.3 params

List all groups (workspaces) the authenticated user has access to across all organizations, optionally filtered to one organization. Groups contain links and QR codes; use the returned group_guid with other tools.

NameTypeRequiredDescription
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
organization_guidstringoptionalOptional organization GUID to filter groups by specific organization. If provided, only groups belonging to this organization will be returned.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_bitly_get_organizations#Get all organizations that the authenticated user has access to. Returns organization details including organization ID, name, tier information, role, creation/modification dates, and associated custom domains, also known as branded short domains (BSDs). Use this to understand organizational context and access permissions.2 params

Get all organizations that the authenticated user has access to. Returns organization details including organization ID, name, tier information, role, creation/modification dates, and associated custom domains, also known as branded short domains (BSDs). Use this to understand organizational context and access permissions.

NameTypeRequiredDescription
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_bitly_get_qr_code#Get full details for a QR code by its ID: title, destination URL, group, type, archived status, and dynamic routing rules. Use this when you have a QR code ID and need its metadata or current routing. To find QR codes when you don't have an ID, list them with bitly_get_group_qr_codes.3 params

Get full details for a QR code by its ID: title, destination URL, group, type, archived status, and dynamic routing rules. Use this when you have a QR code ID and need its metadata or current routing. To find QR codes when you don't have an ID, list them with bitly_get_group_qr_codes.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_bitly_get_qr_code_analytics#Get scan analytics for a single QR code. Use this when the user asks how one specific QR code is performing. The dimension selects the report: a breakdown by countries, cities, device_os (operating system), or browsers; 'over_time' for a time series of scans; or 'summary' for total scan counts. For a single link's clicks/engagements use bitly_get_link_analytics; for QR scans across a whole group use bitly_get_group_analytics with dataset 'qr_scans'.8 params

Get scan analytics for a single QR code. Use this when the user asks how one specific QR code is performing. The dimension selects the report: a breakdown by countries, cities, device_os (operating system), or browsers; 'over_time' for a time series of scans; or 'summary' for total scan counts. For a single link's clicks/engagements use bitly_get_link_analytics; for QR scans across a whole group use bitly_get_group_analytics with dataset 'qr_scans'.

NameTypeRequiredDescription
dimensionstringrequiredThe report to return: a facet breakdown (countries, cities, device_os, browsers), 'over_time' (time series), or 'summary' (totals).
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizenumberoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 timestamp for the END of the time range. The range is the last 'units' periods ending on this date (e.g. '2025-02-28T00:00:00+0000' with units=28 gives all of February). For a full month, use the last day of that month (e.g. 2026-02-28 for Feb 2026). Omit for default: now.
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_bitly_get_qr_code_image#Return a QR code's image as a base64 data URI (SVG default, or PNG). Most agent UIs cannot render raw image data, so prefer directing the user to the QR code's details page (included in bitly_get_qr_code and bitly_create_qr_code responses) to download the image. Only call this tool if you are certain you can process raw base64 image data.4 params

Return a QR code's image as a base64 data URI (SVG default, or PNG). Most agent UIs cannot render raw image data, so prefer directing the user to the QR code's details page (included in bitly_get_qr_code and bitly_create_qr_code responses) to download the image. Only call this tool if you are certain you can process raw base64 image data.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
formatstringoptionalImage format: 'svg' or 'png' (default: svg)
response_formatstringoptional'text' (default) or 'json'
bitlymcp_bitly_get_user#Get authenticated user information including profile details, email addresses, 2FA status, and default group. Provides user context for other operations.2 params

Get authenticated user information including profile details, email addresses, 2FA status, and default group. Provides user context for other operations.

NameTypeRequiredDescription
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_bitly_update_qr_code#Update an existing QR code's title, visual customizations, archived status, expiration, or dynamic routing rules. Use this to restyle a QR code, archive/unarchive it, or change its routing. Dynamic routing is only supported on QR codes with a long_url destination (decoupled); for a QR backed by an existing short link (coupled), set routing on the link via bitly_update_short_link instead. Rules you send replace all existing rules.8 params

Update an existing QR code's title, visual customizations, archived status, expiration, or dynamic routing rules. Use this to restyle a QR code, archive/unarchive it, or change its routing. Dynamic routing is only supported on QR codes with a long_url destination (decoupled); for a QR backed by an existing short link (coupled), set routing on the link via bitly_update_short_link instead. Rules you send replace all existing rules.

NameTypeRequiredDescription
qrcode_idstringrequiredThe QR code ID to update
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
archivedbooleanoptionalWhether the QR code should be archived
dynamic_routingarrayoptionalOptional dynamic routing rules that redirect visitors to different destinations based on their country, region, device, or OS. Provide an array of up to 10 rule objects; each rule must include 'long_url' plus at least one match/exclude condition. All of a rule's conditions must match for it to apply, and rules are evaluated top to bottom — the first matching rule wins. Fields per rule: 'long_url' (string, required) — destination for matching visitors; 'country_match'/'country_exclude' (array of ISO 3166-1 alpha-2 codes, e.g. ["US","GB"]); 'region_match'/'region_exclude' (array of ISO 3166-2 codes formatted 'CC-SUB', e.g. ["US-CA"]; the region's country must also appear in country_match); 'device_match'/'device_exclude' (array of "mobile", "tablet", or "desktop"); 'os_match'/'os_exclude' (array of "ios" or "android"). Example: [{"long_url":"https://example.com/us","country_match":["US"],"os_match":["ios"]},{"long_url":"https://example.com/row","country_exclude":["US"]}]. Omit to leave existing routing unchanged. When updating, the provided rules replace all existing rules (not additive); pass an empty array ([]) to remove all rules.
expiration_atstringoptionalOptional expiration timestamp in ISO 8601 format 'YYYY-MM-DDTHH:MM:SS+0000' (e.g. "2026-12-31T23:59:59+0000"). Only supported on QR codes with a long_url destination, not ones backed by an existing short link, and on accounts entitled to link expiration; the API rejects it otherwise. When updating, pass an empty string ("") to remove an existing expiration; omit to leave it unchanged.
render_customizationsobjectoptionalCustomize the look of the QR code. Apply 'foreground' colors to all corners and the pips. Space gradient colors evenly if no offsets are specified. Strictly follow the naming and structure of this example (non-relevant values can be left out): {"background_color":"#ffffff","dot_pattern_color":"#EF8000","dot_pattern_type":"rounded","corners":{"corner_1":{"inner_color":"#EF8000","outer_color":"#EF8000","shape":"leaf"},"corner_2":{"inner_color":"#EF8000","outer_color":"#EF8000","shape":"leaf"},"corner_3":{"inner_color":"#EF8000","outer_color":"#EF8000","shape":"leaf"}},"gradient":{"style":"linear","angle":45,"colors":[{"color":"#c80404","offset":10},{"color":"#042f86","offset":90}],"exclude_corners":false},"background_gradient":{"style":"radial","colors":[{"color":"#c696ee","offset":25},{"color":"#d4e1a8","offset":50}]},"logo":{"image_guid":"bitlylogo"},"frame":{"id":"text_bottom","colors":{"primary":"#f55656","background":"#ffffff"},"text":{"primary":{"content":"QR Frame"},"secondary":{"content":"Frame Text"}}},"branding":{"bitly_brand":true},"spec_settings":{"error_correction":4}}
response_formatstringoptional'text' (default) or 'json'
titlestringoptionalThe new title for the QR code
bitlymcp_bulk_upload_file#Upload a CSV or XLSX file to the signed URL returned by bulk_upload_validate. Pass the upload_url, headers, and file_content from the validate response. Requires an enterprise plan.6 params

Upload a CSV or XLSX file to the signed URL returned by bulk_upload_validate. Pass the upload_url, headers, and file_content from the validate response. Requires an enterprise plan.

NameTypeRequiredDescription
file_contentstringrequiredThe actual file content (CSV or XLSX file bytes as a string) from the conversation context.
headersobjectrequiredThe headers map returned from bulk_upload_validate (as a JSON object with string keys and string values).
upload_urlstringrequiredThe signed upload URL returned from bulk_upload_validate.
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
content_typestringoptionalMIME type for the upload. e.g. text/csv for CSV files or application/vnd.openxmlformats-officedocument.spreadsheetml.sheet for XLSX.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_bulk_upload_validate#Validate a bulk upload request and get a signed upload URL. upload_type: 'link' (links only), 'qr_code' (QR codes, requires template_id), 'coupled_link' (both, requires template_id). Template IDs: 'QTDTmplWLogo' (with Bitly logo), 'QTDTmplNLogo' (without). Returns upload_url and headers for use with bulk_upload_file. Requires an enterprise plan.7 params

Validate a bulk upload request and get a signed upload URL. upload_type: 'link' (links only), 'qr_code' (QR codes, requires template_id), 'coupled_link' (both, requires template_id). Template IDs: 'QTDTmplWLogo' (with Bitly logo), 'QTDTmplNLogo' (without). Returns upload_url and headers for use with bulk_upload_file. Requires an enterprise plan.

NameTypeRequiredDescription
filenamestringrequiredLogical filename for the bulk upload (for example, "contacts.csv" or "links.xlsx").
upload_typestringrequiredType of bulk upload. Must be exactly one of: "link", "qr_code", or "coupled_link".
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
domainstringoptionalOptional short domain to use for created links. If omitted, backend defaults and validation apply.
group_guidstringoptionalOptional group GUID to associate with this bulk upload. If omitted, the default group may be used.
response_formatstringoptional'text' (default) or 'json'
template_idstringoptionalQR code template ID. Required for qr_code and coupled_link uploads. Use 'QTDTmplWLogo' to include Bitly logo, 'QTDTmplNLogo' to exclude it.
bitlymcp_create_qr_code#Create a QR code linked to a URL. Supports visual customizations (colors, patterns). Use create_short_link_with_qr to create both a short link and QR code in one step.8 params

Create a QR code linked to a URL. Supports visual customizations (colors, patterns). Use create_short_link_with_qr to create both a short link and QR code in one step.

NameTypeRequiredDescription
group_guidstringrequiredThe GUID of the group to create the QR code in
long_urlstringrequiredThe destination URL for the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
archivedbooleanoptionalWhether the QR code should be archived (default: false)
bitlink_idstringoptionalExisting short link ID to use as destination
render_customizationsobjectoptionalVisual customizations for the QR code as a JSON object. e.g. {"dot_pattern_color": "#EF8000", "dot_pattern_type": "rounded", "background_color": "#ffffff"}. Supports corner colors, gradient, and logo configuration.
response_formatstringoptional'text' (default) or 'json'
titlestringoptionalThe title of the QR code
bitlymcp_expand#Look up the original long URL behind any Bitly short link. Returns destination URL and creation timestamp.3 params

Look up the original long URL behind any Bitly short link. Returns destination URL and creation timestamp.

NameTypeRequiredDescription
bitlink_idstringrequiredThe complete short link in 'domain/hash' format (e.g., 'bit.ly/ABC123' or 'custom-domain.com/keyword')
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_custom_domains#List all custom domains (branded short domains) available to the user. These can be used instead of 'bit.ly' when creating links.2 params

List all custom domains (branded short domains) available to the user. These can be used instead of 'bit.ly' when creating links.

NameTypeRequiredDescription
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_group_details#Get metadata for a specific group by GUID, including name, organization, creation date, and BSDs.3 params

Get metadata for a specific group by GUID, including name, organization, creation date, and BSDs.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_group_engagements_cities#Get engagement metrics (clicks + scans) for all links in a group, broken down by city. Requires a paid Bitly plan.7 params

Get engagement metrics (clicks + scans) for all links in a group, broken down by city. Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_engagements_countries#Get engagement metrics (clicks + scans) for all links in a group, broken down by country. Requires a paid Bitly plan.7 params

Get engagement metrics (clicks + scans) for all links in a group, broken down by country. Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_engagements_devices#Get engagement metrics (clicks + scans) for all links in a group, broken down by device type. Requires a paid Bitly plan.7 params

Get engagement metrics (clicks + scans) for all links in a group, broken down by device type. Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_engagements_over_time#Get engagement metrics (clicks + scans) for all links in a group as a time series. Requires a paid Bitly plan.6 params

Get engagement metrics (clicks + scans) for all links in a group as a time series. Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_engagements_referrers#Get engagement metrics for all links in a group broken down by referrer source (Facebook, Google, direct, etc.). Requires a paid Bitly plan.7 params

Get engagement metrics for all links in a group broken down by referrer source (Facebook, Google, direct, etc.). Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_engagements_referring_networks#Get engagement metrics for all links in a group broken down by referring network category. Requires a paid Bitly plan.7 params

Get engagement metrics for all links in a group broken down by referring network category. Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_engagements_top#Get top-performing links in a group ranked by total engagements. Requires a paid Bitly plan.7 params

Get top-performing links in a group ranked by total engagements. Requires a paid Bitly plan.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_group_qr_codes#List QR codes in a group with optional search and pagination.7 params

List QR codes in a group with optional search and pagination.

NameTypeRequiredDescription
group_guidstringrequiredThe unique identifier of the group (workspace)
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
archivedstringoptionalFilter by archived status: 'on' (archived only), 'off' (non-archived only), 'both' (all)
querystringoptionalSearch term to filter QR codes by title or destination URL
response_formatstringoptional'text' (default) or 'json'
search_afterstringoptionalPagination cursor for retrieving next page of results
sizestringoptionalNumber of QR codes to return (default: 50, max: 100)
bitlymcp_get_groups#List all groups (workspaces) the authenticated user has access to. Groups contain links and QR codes. Use the returned group_guid with other tools.3 params

List all groups (workspaces) the authenticated user has access to. Groups contain links and QR codes. Use the returned group_guid with other tools.

NameTypeRequiredDescription
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
organization_guidstringoptionalOptional organization GUID to filter groups by specific organization. If provided, only groups belonging to this organization will be returned.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_organizations#List all organizations the authenticated user belongs to, including org GUIDs, names, tier, and associated custom domains.2 params

List all organizations the authenticated user belongs to, including org GUIDs, names, tier, and associated custom domains.

NameTypeRequiredDescription
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_qr_code#Get metadata for a QR code by qrcode_id: destination URL, type, customizations, and creation date.3 params

Get metadata for a QR code by qrcode_id: destination URL, type, customizations, and creation date.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_qr_code_image#Get the QR code image as a base64 data URI in SVG (default) or PNG format. Note: most AI UIs cannot render raw image data.4 params

Get the QR code image as a base64 data URI in SVG (default) or PNG format. Note: most AI UIs cannot render raw image data.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
formatstringoptionalImage format: 'svg' or 'png' (default: svg)
response_formatstringoptional'text' (default) or 'json'
bitlymcp_get_qr_scan_metrics#Get QR scan metrics as a time series for a specific QR code. Requires a paid Bitly plan.6 params

Get QR scan metrics as a time series for a specific QR code. Requires a paid Bitly plan.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_qr_scan_summary#Get total scan count for a specific QR code over a time range. Requires a paid Bitly plan.6 params

Get total scan count for a specific QR code over a time range. Requires a paid Bitly plan.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_qr_scans_by_browser#Get QR scan metrics for a specific QR code broken down by browser. Requires a paid Bitly plan.7 params

Get QR scan metrics for a specific QR code broken down by browser. Requires a paid Bitly plan.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_qr_scans_by_city#Get QR scan metrics for a specific QR code broken down by city. Requires a paid Bitly plan.7 params

Get QR scan metrics for a specific QR code broken down by city. Requires a paid Bitly plan.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_qr_scans_by_country#Get QR scan metrics for a specific QR code broken down by country. Requires a paid Bitly plan.7 params

Get QR scan metrics for a specific QR code broken down by country. Requires a paid Bitly plan.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_qr_scans_by_device#Get QR scan metrics for a specific QR code broken down by device OS. Requires a paid Bitly plan.7 params

Get QR scan metrics for a specific QR code broken down by device OS. Requires a paid Bitly plan.

NameTypeRequiredDescription
qrcode_idstringrequiredThe unique identifier of the QR code
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
sizestringoptionalMaximum number of results to return (default varies)
unitstringoptionalTime granularity for metrics data: 'minute', 'hour', 'day', 'week', or 'month'. Determines how metrics are grouped by time. default: day
unit_referencestringoptionalISO 8601 end timestamp for the time range. The range covers the last 'units' periods ending on this date. e.g. 2024-01-31T00:00:00+0000
unitsstringoptionalNumber of time periods to include (e.g., '7' with unit='day' returns 7 days of data). Defaults to 30 when not specified.
bitlymcp_get_user#Get the authenticated user's profile including email addresses, 2FA status, and default group GUID.2 params

Get the authenticated user's profile including email addresses, 2FA status, and default group GUID.

NameTypeRequiredDescription
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
response_formatstringoptional'text' (default) or 'json'
bitlymcp_update_qr_code#Update a QR code's title, visual customizations, or archived status.6 params

Update a QR code's title, visual customizations, or archived status.

NameTypeRequiredDescription
qrcode_idstringrequiredThe QR code ID to update
_metaobjectoptionalOptional metadata about this request. Include user_prompt, caller_agent (e.g. claude), intent_classification, conversation_id.
archivedbooleanoptionalWhether the QR code should be archived
render_customizationsobjectoptionalVisual customizations for the QR code as a JSON object. e.g. {"dot_pattern_color": "#EF8000", "dot_pattern_type": "rounded", "background_color": "#ffffff"}. Supports corner colors, gradient, and logo configuration.
response_formatstringoptional'text' (default) or 'json'
titlestringoptionalThe new title for the QR code