All integrations

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_idWRITE

Delete 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.

api
beaconstac_delete_dbc_by_card_id_activateWRITE

Deactivate 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.

api
beaconstac_delete_lead_by_lead_idWRITE

Delete 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.

api
beaconstac_delete_qrcodes_by_qrcode_idWRITE

Delete 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.

api
beaconstac_delete_qrcodes_by_qrcode_id_activateWRITE

Deactivate 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.

api
beaconstac_delete_qrtemplates_by_template_idWRITE

Delete 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.

api
beaconstac_delete_tags_by_tag_idWRITE

Delete 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.

api
beaconstac_get_bulkqrcodesREAD

List 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.

api
beaconstac_get_bulkqrcodes_by_bulk_qrcode_idREAD

Get 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.

api
beaconstac_get_dbcREAD

List 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.

api
beaconstac_get_dbc_by_card_idREAD

Get 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.

api
beaconstac_get_dbc_by_card_id_downloadREAD

Get 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.

api
beaconstac_get_dbc_by_card_id_walletpassREAD

List 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.

api
beaconstac_get_dbc_templatesREAD

List 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.

api
beaconstac_get_formsREAD

List 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.

api
beaconstac_get_forms_by_form_idREAD

Get 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.

api
beaconstac_get_forms_by_form_id_responsesREAD

Get 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.

api
beaconstac_get_leadREAD

List 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.

api
beaconstac_get_mediaREAD

List 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.

api
beaconstac_get_media_by_media_idREAD

Get 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.

api
beaconstac_get_organizationsREAD

List 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.

api
beaconstac_get_organizations_by_organization_idREAD

Get 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.

api
beaconstac_get_organizations_by_organization_id_countsREAD

Count 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.

api
beaconstac_get_organizationwebhooksREAD

List 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.

api
beaconstac_get_organizationwebhooks_by_webhook_idREAD

Get 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.

api
beaconstac_get_placesREAD

List 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.

api
beaconstac_get_places_by_place_idREAD

Get 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.

api
beaconstac_get_qrcodesREAD

List 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.

api
beaconstac_get_qrcodes_by_qrcode_idREAD

Get 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.

api
beaconstac_get_qrcodes_by_qrcode_id_downloadREAD

Get 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.

api
beaconstac_get_qrtemplatesREAD

List 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.

api
beaconstac_get_qrtemplates_by_template_idREAD

Get 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.

api
beaconstac_get_tagsREAD

List 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.

api
beaconstac_get_tags_by_tag_idREAD

Get 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.

api
beaconstac_get_usersREAD

List 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.

api
beaconstac_get_users_by_user_idREAD

Get 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.

api
beaconstac_post_dbcWRITE

Create 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.

api
beaconstac_post_dbc_bulkdelete_listWRITE

Bulk 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.

api
beaconstac_post_dbc_qrcode_filterREAD

Bulk 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.

api
beaconstac_post_dbc_qrcode_listREAD

Bulk 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.

api
beaconstac_post_formsWRITE

Create 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.

api
beaconstac_post_lead_exportREAD

Export 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.

api
beaconstac_post_organizationsWRITE

Create 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.

api
beaconstac_post_organizations_by_organization_id_products_dbc_contacts_receivedREAD

Card 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.

api
beaconstac_post_organizations_by_organization_id_products_dbc_downloads_distributionREAD

Card 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.

api
beaconstac_post_organizations_by_organization_id_products_dbc_leaderboardREAD

Card 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.

api
beaconstac_post_organizations_by_organization_id_products_dbc_views_cityREAD

Card 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.

api
beaconstac_post_organizations_by_organization_id_products_dbc_views_device_osREAD

Card 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.

api
beaconstac_post_organizations_by_organization_id_products_dbc_views_locationsREAD

Card 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.

api
beaconstac_post_organizations_by_organization_id_products_dbc_views_time_of_dayREAD

Card 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.

api
beaconstac_post_organizations_by_organization_id_products_dbc_visitors_distributionREAD

Card 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.

api
beaconstac_post_organizations_by_organization_id_products_linkpages_by_linkpage_id_engagement_metricsREAD

LinkPage 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.

api
beaconstac_post_organizations_by_organization_id_products_linkpages_clicks_distributionREAD

LinkPage 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.

api
beaconstac_post_organizations_by_organization_id_products_linkpages_leaderboardREAD

LinkPage 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.

api
beaconstac_post_organizations_by_organization_id_products_linkpages_overviewREAD

LinkPage 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.

api
beaconstac_post_organizations_by_organization_id_products_linkpages_performance_multiREAD

LinkPage 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.

api
beaconstac_post_organizations_by_organization_id_products_linkpages_viewedREAD

LinkPage 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.

api
beaconstac_post_organizations_by_organization_id_products_linkpages_views_cityREAD

LinkPage 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.

api
beaconstac_post_organizations_by_organization_id_products_linkpages_views_device_osREAD

LinkPage 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.

api
beaconstac_post_organizations_by_organization_id_products_linkpages_views_locationsREAD

LinkPage 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.

api
beaconstac_post_organizations_by_organization_id_products_linkpages_views_time_of_dayREAD

LinkPage 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.

api
beaconstac_post_organizations_by_organization_id_products_linkpages_visitors_distributionREAD

LinkPage 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_period_overviewREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scanners_distributionREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scanners_uniqueREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scansREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_anomalous_countREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_anomalous_distributionREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_campaign_typeREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_cityREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_city_regionREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_countREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_countryREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_device_osREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_distributionREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_listREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_locationsREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_time_of_dayREAD

QR 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.

api
beaconstac_post_organizations_by_organization_id_products_qr_scans_topREAD

QR 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.

api
beaconstac_post_placesWRITE

Create 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.

api
beaconstac_post_qrcodesWRITE

Create 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.

api
beaconstac_post_qrtemplatesWRITE

Create 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.

api
beaconstac_post_reporting_csv_exportWRITE

Email 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.

api
beaconstac_post_tagsWRITE

Create 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.

api
beaconstac_put_bulkqrcodes_by_bulk_qrcode_idWRITE

Update 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.

api
beaconstac_put_dbc_by_card_idWRITE

Update 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.

api
beaconstac_put_dbc_by_card_id_activateWRITE

Activate 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.

api
beaconstac_put_forms_by_form_idWRITE

Update 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.

api
beaconstac_put_media_by_media_idWRITE

Update 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.

api
beaconstac_put_organizations_by_organization_idWRITE

Update 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.

api
beaconstac_put_organizationwebhooks_by_webhook_idWRITE

Update 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.

api
beaconstac_put_places_by_place_idWRITE

Update 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.

api
beaconstac_put_qrcodes_by_qrcode_idWRITE

Update 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.

api
beaconstac_put_qrcodes_by_qrcode_id_activateWRITE

Activate 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.

api
beaconstac_put_qrtemplates_by_template_idWRITE

Update 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.

api
beaconstac_put_tags_by_tag_idWRITE

Update 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.

api
beaconstac_put_users_by_user_idWRITE

Update 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.

api

Put Uniqode (Beaconstac) behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.