Uniqode (Beaconstac)
MARKETING · MARKETING
Dynamic QR codes, digital business cards, and their templates in that account.
Acts as the person, not as itself
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Credentials never touch the agent
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Every call on the record
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
beaconstac_delete_dbc_by_card_idWRITEDelete a digital business card via DELETE /api/2.0/dbc/{card_id}/. PERMANENTLY DELETE a digital business card by id. Its QR code and wallet passes stop resolving; prefer Deactivate, which is reversible. Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). There is no undo and no recycle bin: Uniqode's API offers no way to restore what this call removes. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_delete_dbc_by_card_id_activateWRITEDeactivate a digital business card via DELETE /api/2.0/dbc/{card_id}/activate/. Deactivate a digital business card (Active `A` to Sleeping `S`), keeping the card. Answers 400 if it is already sleeping. Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). Reversible: the matching activate tool returns it to the Active state. Only dynamic QR codes have a state to change. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_delete_lead_by_lead_idWRITEDelete a lead via DELETE /api/2.0/lead/{lead_id}/. PERMANENTLY DELETE a captured lead by id. There is no undo and no recycle bin: Uniqode's API offers no way to restore what this call removes. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_delete_qrcodes_by_qrcode_idWRITEDelete a QR code via DELETE /api/2.0/qrcodes/{qrcode_id}/. PERMANENTLY DELETE a QR code by id. A printed dynamic code that is deleted stops resolving for everyone who scans it; prefer Deactivate a QR code, which is reversible. There is no undo and no recycle bin: Uniqode's API offers no way to restore what this call removes. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_delete_qrcodes_by_qrcode_id_activateWRITEDeactivate a QR code via DELETE /api/2.0/qrcodes/{qrcode_id}/activate/. Deactivate a DYNAMIC QR code: moves it from Active (`A`) to Sleeping (`S`) so scans stop resolving while the code itself is kept. Not applicable to static codes. Reversible: the matching activate tool returns it to the Active state. Only dynamic QR codes have a state to change. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_delete_qrtemplates_by_template_idWRITEDelete a QR code template via DELETE /api/2.0/qrtemplates/{template_id}/. PERMANENTLY DELETE a QR code template by id. QR codes already rendered with it keep their appearance; the template is simply gone from the picker. The vendor's collection spells this route without the id and its handler does not exist there -- the by-id route is the one that lists DELETE in its allow header (measured 2026-09-19). There is no undo and no recycle bin: Uniqode's API offers no way to restore what this call removes. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_delete_tags_by_tag_idWRITEDelete a tag via DELETE /api/2.0/tags/{tag_id}/. PERMANENTLY DELETE a tag by id. The QR codes it labelled are untouched. There is no undo and no recycle bin: Uniqode's API offers no way to restore what this call removes. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_bulkqrcodesREADList bulk QR code collections via GET /api/2.0/bulkqrcodes/. List the bulk QR code collections created through the vendor's DEPRECATED bulk API; `page` pages. The reply is `{count, next, previous, results}`: `count` is the total, `results` the current page, and `next`/`previous` are ready-made URLs for the adjacent pages (null at either end). Creating a collection needs a CSV upload and is not available through this integration. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_bulkqrcodes_by_bulk_qrcode_idREADGet a bulk QR code collection via GET /api/2.0/bulkqrcodes/{bulk_qrcode_id}/. Fetch one bulk QR code collection by id (deprecated bulk API). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_dbcREADList digital business cards via GET /api/2.0/dbc/. List the digital business cards in the connected organization. Filters: `state` (`A` active, `S` sleeping), `card_owner__is` (a user id), and `page`/`page_size` for paging. The reply is `{count, next, previous, results}`: `count` is the total, `results` the current page, and `next`/`previous` are ready-made URLs for the adjacent pages (null at either end). This is where a card id comes from. Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_dbc_by_card_idREADGet a digital business card via GET /api/2.0/dbc/{card_id}/. Fetch one digital business card by id: the person's details, layout, customizations, template and state. Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_dbc_by_card_id_downloadREADGet card QR code image download URLs via GET /api/2.0/dbc/{card_id}/download/. Get download URLs for a card's QR code image: `canvas_type` (`png`, `jpeg`, `svg`, `pdf`; omit for all), `size` and `error_correction_level`. The reply is `{urls: {<format>: <url>}, name}` -- URLs, not bytes. Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_dbc_by_card_id_walletpassREADList a card's wallet passes via GET /api/2.0/dbc/{card_id}/walletpass/. List a card's Apple Wallet and Google Wallet pass URLs (`detail.apple_wallet_pass_url`, `detail.google_wallet_pass_url`). Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_dbc_templatesREADList card templates via GET /api/2.0/dbc/templates/. List the card design templates in the connected organization. The reply is `{count, next, previous, results}`: `count` is the total, `results` the current page, and `next`/`previous` are ready-made URLs for the adjacent pages (null at either end). Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_formsREADList feedback forms via GET /api/2.0/forms/. List the feedback forms in the connected organization; `title__icontains` filters by title substring. The reply is `{count, next, prev, results}` -- note `prev`, not `previous`, on this one list. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_forms_by_form_idREADGet a feedback form via GET /api/2.0/forms/{form_id}/. Fetch one feedback form by id. An id the organization does not hold answers 200 with `{"detail":"Form not found."}` rather than a 404 (measured 2026-09-19), so check for `detail` before reading fields. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_forms_by_form_id_responsesREADGet feedback form responses via GET /api/2.0/forms/{form_id}/responses/. Fetch the responses submitted to a feedback form: `since`/`until` bound the window in epoch milliseconds, `timezone` is an IANA name for the returned timestamps, and `page_size` pages the list. A form id the organization does not hold answers 404 `Form does not exist for given Organization`. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_leadREADList leads via GET /api/2.0/lead/. List the leads captured through the connected organization's digital business cards, with `page` for paging. The reply is `{count, next, previous, results}`: `count` is the total, `results` the current page, and `next`/`previous` are ready-made URLs for the adjacent pages (null at either end). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_mediaREADList media objects via GET /api/2.0/media/. List the media objects (uploaded images and PDFs) in the connected organization, each with its CDN `url`, `content_type` and status; `page`/`page_size` page the list. The reply is `{count, next, previous, results}`: `count` is the total, `results` the current page, and `next`/`previous` are ready-made URLs for the adjacent pages (null at either end). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_media_by_media_idREADGet a media object via GET /api/2.0/media/{media_id}/. Fetch one media object by id, with its CDN `url`. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_organizationsREADList organizations via GET /api/2.0/organizations/. List every organization this key can see -- the connected one and any child organizations -- with each one's feature permissions and `child_organizations`; `page` pages. The reply is `{count, next, previous, results}`: `count` is the total, `results` the current page, and `next`/`previous` are ready-made URLs for the adjacent pages (null at either end). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_organizations_by_organization_idREADGet the connected organization via GET /api/2.0/organizations/{organization_id}/. Fetch the CONNECTED organization's record: name, parent, child organizations, feature permissions and wallet state. The id is this connection's Organization ID, not an argument. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_organizations_by_organization_id_countsREADCount the connected organization's objects via GET /api/2.0/organizations/{organization_id}/counts/. Count the connected organization's objects: users, QR codes (total, dynamic, paused), forms, cards, LinkPages, places, custom domains and the legacy hardware kinds. Free and instant; a good first call. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_organizationwebhooksREADList webhooks via GET /api/2.0/organizationwebhooks/. List the webhooks registered for the connected organization; `page` pages. The reply is `{count, next, previous, results}`: `count` is the total, `results` the current page, and `next`/`previous` are ready-made URLs for the adjacent pages (null at either end). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_organizationwebhooks_by_webhook_idREADGet a webhook via GET /api/2.0/organizationwebhooks/{webhook_id}/. Fetch one webhook by id: its URL, the events it fires on and its maintainer. Any `webhook_authorization` value is withheld from the reply. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_placesREADList places via GET /api/2.0/places/. List the places (physical locations with a Google place id) in the connected organization; `page` pages. The reply is `{count, next, previous, results}`: `count` is the total, `results` the current page, and `next`/`previous` are ready-made URLs for the adjacent pages (null at either end). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_places_by_place_idREADGet a place via GET /api/2.0/places/{place_id}/. Fetch one place by id. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_qrcodesREADList QR codes via GET /api/2.0/qrcodes/. List the QR codes in the connected organization. Filters: `qr_type` (1 static, 2 dynamic), `campaign__content_type` (the dynamic content type number, e.g. 13 for PDF) and `name__icontains` (case-insensitive name substring); an invalid choice for the first two answers 400 naming the field. The reply is `{count, next, previous, results}`: `count` is the total, `results` the current page, and `next`/`previous` are ready-made URLs for the adjacent pages (null at either end). This is where a QR code id comes from. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_qrcodes_by_qrcode_idREADGet a QR code via GET /api/2.0/qrcodes/{qrcode_id}/. Fetch one QR code by its numeric id: its type, campaign or fields_data, styling attributes, state (`A` active, `S` sleeping) and timestamps. An id the organization does not hold answers 404 `{"detail":"Not found."}`. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_qrcodes_by_qrcode_id_downloadREADGet QR code image download URLs via GET /api/2.0/qrcodes/{qrcode_id}/download/. Get a download URL for a QR code's rendered image. Uniqode renders the code server-side and answers `{"urls": {<format>: <S3 url>}, "name": ...}`, not bytes: `canvas_type` picks `png`, `jpeg`, `svg` or `pdf`, `size` is the pixel size (default 1024), `error_correction_level` the QR error-correction level, and `qr_template`/`template_size`/`logo_url` apply a template or logo at render time. Measured 2026-09-19 on a real code: each of the four formats answers 200 with one URL under its own key; OMITTING `canvas_type` answers the png URL only, not every format as the vendor's page says. An unknown id answers 400 `QRCode matching query does not exist.` Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_qrtemplatesREADList QR code templates via GET /api/2.0/qrtemplates/. List the QR code design templates the connected organization can use, including Uniqode's defaults (`default: true`). `name__icontains` filters by name substring; `page`/`page_size` page the list. The reply is `{count, next, previous, results}`: `count` is the total, `results` the current page, and `next`/`previous` are ready-made URLs for the adjacent pages (null at either end). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_qrtemplates_by_template_idREADGet a QR code template via GET /api/2.0/qrtemplates/{template_id}/. Fetch one QR code template by id: its data pattern, colours, eye shapes, frame, logo and background settings. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_tagsREADList tags via GET /api/2.0/tags/. List the tags in the connected organization; `name__icontains` filters by name substring and `page` pages. The reply is `{count, next, previous, results}`: `count` is the total, `results` the current page, and `next`/`previous` are ready-made URLs for the adjacent pages (null at either end). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_tags_by_tag_idREADGet a tag via GET /api/2.0/tags/{tag_id}/. Fetch one tag by id, with the QR codes it is applied to (`qrcode_set`). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_usersREADList users via GET /api/2.0/users/. List the users on the account, each with their organization memberships and role (`user_group`: OW owner, AD admin, ED editor, VW viewer); `page` pages. The reply is `{count, next, previous, results}`: `count` is the total, `results` the current page, and `next`/`previous` are ready-made URLs for the adjacent pages (null at either end). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_get_users_by_user_idREADGet a user via GET /api/2.0/users/{user_id}/. Fetch one user by id: name, email, role per organization (`org_user_groups[].user_group`, with `qr_permission` and `cards_permission` saying which products they hold), plan and timezone. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_dbcWRITECreate a digital business card via POST /api/2.0/dbc/. Create a digital business card. `first_name` and `customizations` (`background_color`, `user_info_color`, `secondary_color`, `typography`) are required by the vendor; `card_owner` names the user the card belongs to, and `template` carries the QR design. The organization is set from this connection. Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_dbc_bulkdelete_listWRITEBulk delete digital business cards via POST /api/2.0/dbc/bulkdelete/list/. PERMANENTLY DELETE every card whose id is in `ids`, in one call. The reply reports `count`, the number removed. There is no undo. Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). There is no undo and no recycle bin: Uniqode's API offers no way to restore what this call removes. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_dbc_qrcode_filterREADBulk download card QR code images by filter via POST /api/2.0/dbc/qrcode/filter/. Request a zip of QR code images for every card matching `filters` (`card_owner`, `card_owner__email__icontains`, `first_name__icontains`, `last_name__icontains`, `url__icontains`, `state`). Same reply shape as the by-id bulk download, and the same email fallback when no canvas type is set. Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_dbc_qrcode_listREADBulk download card QR code images by id via POST /api/2.0/dbc/qrcode/list/. Request a zip of QR code images for the cards named in `ids`, at the `size` and `canvas_type` given. The reply carries the download `url` and `qr_code_count`; when no canvas type is given the vendor emails the zip to the key holder's registered address instead. Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_formsWRITECreate a feedback form via POST /api/2.0/forms/. Create a feedback form from a `form_structure` document (the vendor's typeform-like schema of fields, choices and scoring logic) plus its title and settings; the form id in the reply is what a Feedback Form QR code (`campaign.content_type` 3, `campaign.form`) points at. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_lead_exportREADExport leads via POST /api/2.0/lead/export/. Request the vendor's CSV report of every lead captured for the connected organization. The body is empty; Uniqode builds the report server-side and answers with the lead records for the export. Measured 2026-09-19 on an Owner key: answers 403 'You do not have permission to export contacts.' -- an export permission on the leads plane, distinct from the key being valid (List leads on the same key answers 200). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizationsWRITECreate a child organization via POST /api/2.0/organizations/. Create a child organization under the connected one, from a `name`. Child organizations are Uniqode's isolation unit; connect one separately to work inside it. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_dbc_contacts_receivedREADCard analytics: contacts received over time via POST /api/2.0/organizations/{organization_id}/products/dbc/contacts/received/. Leads captured through cards over time (`results[]` of `date`, `contacts`). `is_organization_analytics` includes leads with no card attached; `timezone` resolves the local date. The vendor calls this shape best-effort -- read it defensively. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_dbc_downloads_distributionREADCard analytics: saves over time via POST /api/2.0/organizations/{organization_id}/products/dbc/downloads/distribution/. Card saves/downloads per time bucket (`results[]` of `time_in_ms`, `downloads`), zero-filled; `interval` and `timezone` shape the buckets. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_dbc_leaderboardREADCard analytics: leaderboard via POST /api/2.0/organizations/{organization_id}/products/dbc/leaderboard/. Per-card views, saves and contacts as a sorted, paginated roster (`results[]` of `dbc_id`, `dbc_name`, `user_image_url`, `views`, `saves`, `contacts`; `count` is the total across pages). `order_by` is one of views, saves, name, contacts with a leading `-` for descending; `page` and `page_size` (1-100) page it. Cards with zero activity are included. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_dbc_views_cityREADCard analytics: city distribution via POST /api/2.0/organizations/{organization_id}/products/dbc/views/city/. Card views and downloads grouped by city, state/province and country (`results[]` of `city`, `state`, `country`, `views`, `downloads`). `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_dbc_views_device_osREADCard analytics: device OS distribution via POST /api/2.0/organizations/{organization_id}/products/dbc/views/device-os/. Card views by device operating system (`results[]` of `device_os`, `views`, `percentage`). The catch-all label here is lowercase `others`, not the `Other` the QR tool returns; normalise before joining. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_dbc_views_locationsREADCard analytics: view location coordinates via POST /api/2.0/organizations/{organization_id}/products/dbc/views/locations/. Raw latitude/longitude pairs for plotting card views: `ip_data` (IP-geolocated) and `gps_data` (device-reported, permission-gated); neither deduplicated. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_dbc_views_time_of_dayREADCard analytics: time-of-day distribution via POST /api/2.0/organizations/{organization_id}/products/dbc/views/time-of-day/. Card views by weekday and local hour for a heatmap: `results` keyed by day name, each mapping hour (string key) to a count; sparse, not zero-filled. `timezone` resolves the local hour. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_dbc_visitors_distributionREADCard analytics: views and visitors over time via POST /api/2.0/organizations/{organization_id}/products/dbc/visitors/distribution/. Card views and unique visitors per time bucket (`results[]` of `time_in_ms`, `views`, `unique_visitors`), zero-filled; `interval` and `timezone` shape the buckets. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_linkpages_by_linkpage_id_engagement_metricsREADLinkPage analytics: engagement metrics for one LinkPage via POST /api/2.0/organizations/{organization_id}/products/linkpages/{linkpage_id}/engagement-metrics/. Bounce rate and average session duration for ONE LinkPage, named in the path (`total_sessions`, `bounce_sessions`, `engaged_sessions`, `bounce_rate`, `avg_session_duration_seconds`). Answers 404 when the id does not exist or is not visible to this key. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. LinkPages have no create/list tools in this API; `product_ids` and `linkpage_id` come from LinkPage analytics: viewed LinkPages or from the Uniqode dashboard. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_linkpages_clicks_distributionREADLinkPage analytics: clicks over time via POST /api/2.0/organizations/{organization_id}/products/linkpages/clicks/distribution/. Link taps per time bucket (`results[]` of `time_in_ms`, `clicks`) with window totals (`total_clicks`, `unique_clicks`), zero-filled. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. LinkPages have no create/list tools in this API; `product_ids` and `linkpage_id` come from LinkPage analytics: viewed LinkPages or from the Uniqode dashboard. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_linkpages_leaderboardREADLinkPage analytics: link leaderboard via POST /api/2.0/organizations/{organization_id}/products/linkpages/leaderboard/. Per-LINK click data with the parent LinkPage name (`results[]` of `linkpage_name`, `title`, `url`, `clicks`, `unique_clicks`, `last_modified`) -- one row per link, not per page. `sortby` (clicks, unique_clicks, last_modified, title, url) and `descending` order it; omit `page` and `page_size` to get every row. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. LinkPages have no create/list tools in this API; `product_ids` and `linkpage_id` come from LinkPage analytics: viewed LinkPages or from the Uniqode dashboard. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_linkpages_overviewREADLinkPage analytics: all-time views via POST /api/2.0/organizations/{organization_id}/products/linkpages/overview/. All-time total view count across the organization's LinkPages (`overall_view_count`); `account_wide` adds child organizations. The vendor's page says this takes no time window, but the live handler DEMANDS `from_timestamp` and `to_timestamp` (measured 2026-09-19: `{}` and `{account_wide:false}` both answer 403 'Missing required parameter: from_timestamp'; with a 7-day window -> 200 {overall_view_count: 0}) -- send a window and read the total. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. LinkPages have no create/list tools in this API; `product_ids` and `linkpage_id` come from LinkPage analytics: viewed LinkPages or from the Uniqode dashboard. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_linkpages_performance_multiREADLinkPage analytics: multi-LinkPage performance via POST /api/2.0/organizations/{organization_id}/products/linkpages/performance/multi/. View counts and last-modified stamps for many LinkPages in one call (`results[]` of `linkpage_id`, `views`, `last_modified`); `organization_ids` widens it to child organizations. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. LinkPages have no create/list tools in this API; `product_ids` and `linkpage_id` come from LinkPage analytics: viewed LinkPages or from the Uniqode dashboard. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_linkpages_viewedREADLinkPage analytics: viewed LinkPages via POST /api/2.0/organizations/{organization_id}/products/linkpages/viewed/. IDs of every LinkPage that recorded at least one view in the window (`viewed_linkpages`) -- the LinkPage analogue of Scanned QR codes, and where LinkPage ids come from for the other tools. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. LinkPages have no create/list tools in this API; `product_ids` and `linkpage_id` come from LinkPage analytics: viewed LinkPages or from the Uniqode dashboard. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_linkpages_views_cityREADLinkPage analytics: city distribution via POST /api/2.0/organizations/{organization_id}/products/linkpages/views/city/. LinkPage views and clicks grouped by city, state/province and country (`results[]` of `city`, `state`, `country`, `views`, `clicks`). `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. LinkPages have no create/list tools in this API; `product_ids` and `linkpage_id` come from LinkPage analytics: viewed LinkPages or from the Uniqode dashboard. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_linkpages_views_device_osREADLinkPage analytics: device OS distribution via POST /api/2.0/organizations/{organization_id}/products/linkpages/views/device-os/. LinkPage views by device operating system (`results[]` of `device_os`, `views`, `percentage`); the catch-all label is lowercase `others`. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. LinkPages have no create/list tools in this API; `product_ids` and `linkpage_id` come from LinkPage analytics: viewed LinkPages or from the Uniqode dashboard. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_linkpages_views_locationsREADLinkPage analytics: view location coordinates via POST /api/2.0/organizations/{organization_id}/products/linkpages/views/locations/. Raw latitude/longitude pairs for plotting LinkPage views: `ip_data` and permission-gated `gps_data`; neither deduplicated. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. LinkPages have no create/list tools in this API; `product_ids` and `linkpage_id` come from LinkPage analytics: viewed LinkPages or from the Uniqode dashboard. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_linkpages_views_time_of_dayREADLinkPage analytics: time-of-day distribution via POST /api/2.0/organizations/{organization_id}/products/linkpages/views/time-of-day/. LinkPage views by weekday and local hour for a heatmap: `results` keyed by day name, each mapping hour (string key) to a count; sparse. `timezone` resolves the local hour. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. LinkPages have no create/list tools in this API; `product_ids` and `linkpage_id` come from LinkPage analytics: viewed LinkPages or from the Uniqode dashboard. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_linkpages_visitors_distributionREADLinkPage analytics: views and visitors over time via POST /api/2.0/organizations/{organization_id}/products/linkpages/visitors/distribution/. LinkPage views and unique visitors per time bucket (`results[]` of `time_in_ms`, `views`, `unique_visitors`), zero-filled; `interval` and `timezone` shape the buckets. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. LinkPages have no create/list tools in this API; `product_ids` and `linkpage_id` come from LinkPage analytics: viewed LinkPages or from the Uniqode dashboard. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_period_overviewREADQR analytics: period overview via POST /api/2.0/organizations/{organization_id}/products/qr/period-overview/. Summary tile figures for a period: `impression_count`, `unique_user_count` (only when `periodic_request` is true), `scanned_product_count` and `total_product_count`. `notification_count` and `conversion_percentage` are always 0 for QR codes and carry no meaning. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scanners_distributionREADQR analytics: unique scanners over time via POST /api/2.0/organizations/{organization_id}/products/qr/scanners/distribution/. Distinct scanner counts per time bucket (`results[]` of `time_in_ms`, `unique_scanners`), deduplicated within each bucket only; zero-filled. `interval` and `timezone` shape the buckets. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scanners_uniqueREADQR analytics: total unique scanners via POST /api/2.0/organizations/{organization_id}/products/qr/scanners/unique/. Count of DISTINCT scanners for the whole window (`unique_scanners`), deduplicated across the window -- lower than the sum of per-bucket unique counts from the over-time tool, where one scanner on three days counts three times. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scansREADQR analytics: scanned QR codes via POST /api/2.0/organizations/{organization_id}/products/qr/scans/. IDs of every QR code that recorded at least one scan in the window (`scanned_qrcodes`). Resolve which codes had traffic before fanning out to the per-code tools -- feed the ids back as `product_ids`. With `product_ids` supplied, returns the scanned subset of them. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_anomalous_countREADQR analytics: anomalous scan count via POST /api/2.0/organizations/{organization_id}/products/qr/scans/anomalous/count/. Total scans flagged as anomalous (bot or abusive traffic) in the window (`anomalous_scans`) -- the traffic the other tools drop when `hide_anomalies` is true. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_anomalous_distributionREADQR analytics: anomalous scans over time via POST /api/2.0/organizations/{organization_id}/products/qr/scans/anomalous/distribution/. Anomalous scan counts per time bucket (`results[]` of `time_in_ms`, `anomalous_scans`), zero-filled; `interval` and `timezone` shape the buckets. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_campaign_typeREADQR analytics: campaign type distribution via POST /api/2.0/organizations/{organization_id}/products/qr/scans/campaign-type/. Scans grouped by campaign type (`results[]` of `campaign_type` -- the numeric content type -- `scans`, `qr_count` distinct codes of that type, `percentage`). `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_cityREADQR analytics: city distribution via POST /api/2.0/organizations/{organization_id}/products/qr/scans/city/. Scans grouped by city, state/province and country (`results[]` of `city`, `state`, `country`, `scans`). `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_city_regionREADQR analytics: city and region distribution via POST /api/2.0/organizations/{organization_id}/products/qr/scans/city-region/. Scans grouped by city, region and country (`results[]` of `city`, `region`, `country`, `scans`). Near-identical to the city distribution but keyed `region` from a different grouping; do not mix the two in one report. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_countREADQR analytics: total scan count via POST /api/2.0/organizations/{organization_id}/products/qr/scans/count/. Single total scan count for the window (`scans`). `product_ids` scopes it to particular QR codes; `hide_anomalies` excludes bot/abusive traffic; `device_os` and `location` filter the scans counted. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_countryREADQR analytics: country distribution via POST /api/2.0/organizations/{organization_id}/products/qr/scans/country/. Scans grouped by country (`results[]` of `country`, `scans`). `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_device_osREADQR analytics: device OS distribution via POST /api/2.0/organizations/{organization_id}/products/qr/scans/device-os/. Scans by device operating system with share of total (`results[]` of `device_os`, `scans`, `percentage`); labels are iPhone, android, iPad OS, windows, mac and Other. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_distributionREADQR analytics: scans over time via POST /api/2.0/organizations/{organization_id}/products/qr/scans/distribution/. Scan counts bucketed into a time series (`results[]` of `time_in_ms`, `scans`). `interval` sets the bucket (default `1d`) and `timezone` aligns it. The series is complete and zero-filled: every bucket in the window is present. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_listREADQR analytics: scans per QR code via POST /api/2.0/organizations/{organization_id}/products/qr/scans/list/. Scan counts grouped by QR code (`results[]` of `qr_id`, `qr_name`, `scans`), sorted by `sort_key` (`scans` or `beacon`) and capped at `limit` (default 2000, max 5000); `time_of_day_data` restricts to one local hour and weekday. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_locationsREADQR analytics: scan location coordinates via POST /api/2.0/organizations/{organization_id}/products/qr/scans/locations/. Raw latitude/longitude pairs for plotting scans on a map: `ip_data` (IP-geolocated, near-universal, city-accurate) and `gps_data` (device-reported, precise, present only when the scanner granted location permission). Neither array is deduplicated. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_time_of_dayREADQR analytics: time-of-day distribution via POST /api/2.0/organizations/{organization_id}/products/qr/scans/time-of-day/. Scans by weekday and local hour for a heatmap: `results` is keyed by English day name, each mapping hour-of-day (as a JSON string key) to a count. SPARSE, not zero-filled -- quiet hours are omitted. `timezone` resolves the local hour. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_organizations_by_organization_id_products_qr_scans_topREADQR analytics: top QR codes via POST /api/2.0/organizations/{organization_id}/products/qr/scans/top/. Leaderboard of QR codes by scan count (`results[]` of `qr_id`, `qr_name`, `scans`): `limit` (default 5, max 100) rows, highest first unless `descending` is false. `from_timestamp` and `to_timestamp` are epoch MILLISECONDS and both are required. Three replies here are NOT a credential problem (measured 2026-09-19): a missing timestamp answers 403 'Missing required parameter: ...' on the QR and LinkPage families and 400 '{"from_timestamp": ["This field is required."]}' on the Card family; and a window longer than the plan's analytics retention answers 403 'Analytics data access is limited to N days on your current plan' (30 days on the trial) -- shorten the window. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_placesWRITECreate a place via POST /api/2.0/places/. Create a place: `name`, `latitude`, `longitude`, Google `place_id`, `address`, and optional business cover/icon URLs and colour. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_qrcodesWRITECreate a QR code via POST /api/2.0/qrcodes/. Create a QR code in the connected organization. `qr_type` selects the kind: 2 is a DYNAMIC code whose destination is a `campaign` object and can be edited later (and is the only kind with analytics, activation and a sleeping state); 1 is a STATIC code whose payload is baked into the image through `fields_data` and cannot change afterwards. For a dynamic code set `campaign.content_type` and the matching object: 1 Custom URL (`campaign.custom_url`), 3 Feedback Form (`campaign.form`, a form id), 5 App Links (`campaign.app_links`), 7 vCard Plus (`campaign.vcard_plus`), 8 Social Media (`campaign.social_media`), 9 Facebook page (`campaign.facebook_page`), 10 Coupon (`campaign.coupon`), 11 Business Card (`campaign.business_card`), 13 PDF (`campaign.pdf`), 15 Phone call (`campaign.phone_call`), 16 SMS (`campaign.phone_sms`), 17 Email (`campaign.email`), 22 Geo Location (`campaign.geo_location_content`, with `meta.dynamic_sub_campaign: "geo_location"`), 23 Smart Rules (`campaign.smart_rules`, with `meta.dynamic_sub_campaign: "smart_rules"`). For a static code set `fields_data` with `fields_data.qr_type` 1 Website (`url`), 2 SMS (`phone`, `body`), 3 Phone call (`phone`), 4 Email (`email`, `subject`, `body`), 5 vCard (name, phone, address and website fields), 6 Text (`text`), 7 WiFi (`ssid`, `password`, `encryption`). `attributes` styles the image (colours, eye shapes, frame, logo); `name` labels the code in the dashboard. The vendor documents these 21 shapes as separate examples of the one endpoint; this tool's body schema is their union, so send only the fields that belong to the type you chose. Measured 2026-09-19: a dynamic Custom URL body answers 200 with the created record (`id`, `state: A`, the short `url` on qrcodes.pro, the `campaign` object); the organization is written in from this connection. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_qrtemplatesWRITECreate a QR code template via POST /api/2.0/qrtemplates/. Create a QR code design template (data pattern, colours, eye shapes, frame style and text, logo, background). Fields you omit take Uniqode's defaults. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_reporting_csv_exportWRITEEmail a full analytics CSV export via POST /reporting/2.0/. Email a CSV of every analytics metric for the given products over a window to the connection's own account holder. `product_id` is the list of QR code ids (`[]` for every product in the organization), `from`/`to` bound the window in epoch milliseconds, `timezone` defaults to UTC and `product_type` is `qr`. A CSV over 5 MB arrives as a link to a password-protected zip. The vendor's optional `email` recipient field is NOT offered, so the export cannot go to an address a caller names; per the vendor's documentation ('If email is not passed, the mail is automatically sent to the email of the user making the request') it goes to the key holder -- documented, not measured here, because a valid call sends mail. Answers 400 `from and to POST params cannot be empty` when the window is missing (measured 2026-09-19). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_post_tagsWRITECreate a tag via POST /api/2.0/tags/. Create a tag: `name`, `color` (hex) and the object id lists it applies to (`qrcode_set`; `beacon_set`, `nfctag_set` and `geofence_set` belong to legacy hardware products and are normally empty). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_bulkqrcodes_by_bulk_qrcode_idWRITEUpdate a bulk QR code collection via PUT /api/2.0/bulkqrcodes/{bulk_qrcode_id}/. Update a bulk QR code collection's name, styling `attributes` or `media` by id (deprecated bulk API); fields you omit are left unchanged. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_dbc_by_card_idWRITEUpdate a digital business card via PUT /api/2.0/dbc/{card_id}/. Update a digital business card by id; fields you omit are left unchanged. The vendor requires `first_name` and `customizations` on every update. Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_dbc_by_card_id_activateWRITEActivate a digital business card via PUT /api/2.0/dbc/{card_id}/activate/. Activate a digital business card (Sleeping `S` to Active `A`). Answers 400 if the card is already active. Digital Business Cards is a separate Uniqode product: on an account without the Cards entitlement this answers 403 'You do not have permission to perform this action', which is the plan, not the key (measured 2026-09-19). Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_forms_by_form_idWRITEUpdate a feedback form via PUT /api/2.0/forms/{form_id}/. Update a feedback form by id; fields you omit are left unchanged. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_media_by_media_idWRITEUpdate a media object via PUT /api/2.0/media/{media_id}/. Update a media object's `name`, `content_type`, `visible` or `typeform_compatible` flags by id. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_organizations_by_organization_idWRITEUpdate the connected organization via PUT /api/2.0/organizations/{organization_id}/. Update the CONNECTED organization (for example its `name`); fields you omit are left unchanged. The id is this connection's Organization ID. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_organizationwebhooks_by_webhook_idWRITEUpdate a webhook via PUT /api/2.0/organizationwebhooks/{webhook_id}/. Update WHICH EVENTS an existing webhook fires on, by id: `qr_code_events` (create/update/delete/view), `form_events` (form_response_submitted) and the legacy `nfc_tag_events`, `beacon_events`, `geofence_events`; fields you omit are left unchanged. The destination `url` and the `webhook_authorization` headers CANNOT be changed through this tool: Agentic Fabriq strips both from the body before the request leaves, so a webhook can only ever deliver to the URL it was registered with in the Uniqode dashboard. Creating a webhook is not offered for the same reason. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_places_by_place_idWRITEUpdate a place via PUT /api/2.0/places/{place_id}/. Update a place by id; fields you omit are left unchanged. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_qrcodes_by_qrcode_idWRITEUpdate a QR code via PUT /api/2.0/qrcodes/{qrcode_id}/. Update a QR code by id: fields you send are set, fields you omit are left unchanged (a partial update, per the vendor) -- EXCEPT that `qr_type` is required on every update: a body without it answers 400 `{"qr_type": ["This field is required."]}`, and `{name, qr_type}` answers 201 with the updated record (measured 2026-09-19 on a disposable code). Changing a dynamic code's `campaign` re-points every printed copy of it; a static code's payload cannot be changed and only its `name` and `attributes` are editable. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_qrcodes_by_qrcode_id_activateWRITEActivate a QR code via PUT /api/2.0/qrcodes/{qrcode_id}/activate/. Activate a DYNAMIC QR code: moves it from the Sleeping state (`S`) to Active (`A`) so scans resolve again. Not applicable to static codes. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_qrtemplates_by_template_idWRITEUpdate a QR code template via PUT /api/2.0/qrtemplates/{template_id}/. Update a QR code template by id; fields you omit are left unchanged. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_tags_by_tag_idWRITEUpdate a tag via PUT /api/2.0/tags/{tag_id}/. Update a tag by id: rename it, recolour it or change the `qrcode_set` it applies to. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
beaconstac_put_users_by_user_idWRITEUpdate a user via PUT /api/2.0/users/{user_id}/. Update a user's profile fields by id; fields you omit are left unchanged. Scoped to this connection's Uniqode organization; its Organization ID is a connect-time setting, never a tool argument.
Often connected alongside
Put Uniqode (Beaconstac) behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.