Everything that can leave
Prism is a single process on your own server plus a browser tab on each client. The tables below cover both halves - the server's outbound connections and the ones your users' browsers make - because a network review that only looks at the server misses the second kind entirely. There is a third case, and it gets its own group: if you switch on LAN sync, two Prism installs talk to each other on your own network, which is neither of the first two.
Connections to Reportil
| Destination | What it carries | When it fires | How to stop it |
|---|---|---|---|
| licenses.reportil.comTRIAL LENGTH | Nothing at all. This is the one request Prism makes that sends no information whatsoever - no license ID, no instance ID, no version, no hostname. It asks a single question, "how many days is a trial?", and the answer is one number. It exists so we can change the trial length without shipping a new version. | Once a day, and only while the app is running a trial. An install with a license never makes this request. | Blank the license server in Settings. The trial then runs for the length built into your copy, and is not shortened for being offline. |
| licenses.reportil.comLICENSE HEARTBEAT | Five values and nothing else: the license ID, an instance ID generated locally on first run, the app version, a hash of the installed build, and your update preference (a setting - auto, notify_only or manual - so support can tell a deliberately pinned version from a stalled one). No user names, no email addresses, no hostnames, and never tasks, parts, files or any other content. | Once about 5s after start, then hourly | Blank the license server URL in config |
| licenses.reportil.comCONTACT & SUPPORT REPLIES | What a user types into Settings → Contact us: their name, email, organization, subject and message, plus any screenshot they attach. The reply check sends only the license ID and the user's email. | On Send; plus a reply check every 30 min while a tab is open | Nothing is sent unless a user writes to us |
| licenses.reportil.comBILLING | Billing contact name and email, and the seat email list. Admin-only screens. | Only when an admin opens or changes billing | Firewall the host - the billing screens fail closed |
| Reportil build hostUPDATE DOWNLOAD | An HTTPS GET for a versioned ZIP. Nothing is uploaded - no payload, no identifiers beyond the request itself. The hostname is whatever the heartbeat advertised, so it is a Reportil-controlled CDN rather than a fixed string in the app. | At app start, and on demand from Settings | Set PRISM_AUTO_UPDATE=0 |
AI providers - only ever the one you configure
With no API key set, every AI feature returns an error before a socket is opened. There is no Reportil-operated AI service in the middle: Prism talks to your provider under your own account and agreement, and we never see the traffic.
| Destination | Reached when | How to stop it |
|---|---|---|
| bedrock-runtime.<region>.amazonaws.comSTRICTEST OPTION | You configure AWS Bedrock. Requests stay inside your own AWS account and region; the model provider never receives them. | Do not configure a provider |
| api.anthropic.com | You configure an Anthropic key | Remove the key |
| api.openai.com | You configure an OpenAI key | Remove the key |
| generativelanguage.googleapis.com | You configure a Google Gemini key | Remove the key |
What the AI features actually send
Worth being precise about, because "we send your prompt" undersells it. Most features send exactly what the user is looking at. Two do not wait for a user at all.
| Feature | Content sent to your provider | Triggered by |
|---|---|---|
| Knowledge Base summariesBACKGROUND | Task titles, overdue and stalled items, milestone names, and assignee names with their workloads. | A 6-hour timer. No user action |
| Knowledge Base digestsBACKGROUND | Up to 6,000 characters of each recorded event's text, plus who performed it. | A 6-hour timer. No user action |
| Email to task | The full body of the email, and on follow-ups the existing task description too. | Automatic on mailbox poll, or a user upload |
| Assistant chat | Recent messages in the conversation, plus the names of your workspaces and projects. | A user sends a message |
| Text import | The whole document the user pasted or uploaded. | A user presses Analyze |
| Comment thread summary | Every comment in the thread, with author names. | A user asks for a summary |
| Improve writing, task breakdown, note to task | The selected text, goal or note - verbatim. | A user presses the button |
| Planning helpers | Task titles, descriptions, dates, priorities, effort, and project or area names. | A user opens the smart-schedule or priority helper |
| Spreadsheet column mapping | The header row of the file being imported. Not the data rows. | A user imports a BOM |
The two background jobs are the ones to weigh. They run on a timer whenever the Knowledge Base is in use and a provider is configured, and today they cannot be switched off independently of the rest of AI - removing the API key disables both, along with every interactive feature. If your review requires unattended processing to be off while users keep interactive AI, tell us and we will add the separate control.
Your own systems
These point wherever you point them. All are off until configured, and none of them route through Reportil.
| Destination | What it carries | When it fires |
|---|---|---|
| Your mail serverIMAP / SMTP - OFF BY DEFAULT | Inbound: mail Prism turns into tasks. Outbound: notification and digest mail containing task titles, dates and a link back to your own Prism URL. | Mailbox poll every 5 min once enabled; digests on your schedule |
| Your Jira serverOFF BY DEFAULT | Issue titles, descriptions, priorities, and user lookups by email. Authenticated with each user's own personal access token. | Every 5 min once enabled and a base URL is set |
| Your Confluence serverOFF BY DEFAULT | One direction only: a sprint report - name, dates, goal, task list with assignees and dates, task descriptions and their attached files - written into a page you created. Authenticated with each user's own personal access token. Nothing is ever read back into Prism. | Only when somebody publishes a sprint, and when a published sprint is closed. An administrator sets the base URL, and a page link pointing anywhere else is refused. |
| login.microsoftonline.comOPTIONAL | Microsoft OAuth2 sign-in for mailbox access, if you choose OAuth2 over a password. | Only when the mail connector is set to OAuth2 |
Connections your users' browsers make
These come from the browser rather than the Prism server, so server-side controls do not suppress them - which is why they get their own group instead of a footnote. Both are user-triggered and both fail closed. Web fonts used to be listed here and no longer are: they were fetched from Google on every page load, and were the last unconditional outbound connection in the product. They are now served from your own Prism server.
| Destination | What it carries | When it fires | How to stop it |
|---|---|---|---|
| Carrier tracking sitesME MODULE ONLY | A tracking number. Nothing else - no company name, no order, no part data. Reaches ups.com and DHL's public endpoint in the packaged build; a source install can also reach fedex.com, usps.com, tnt.com and the parcelsapp.com aggregator. | Only when a user clicks Refresh status on a shipment | Block the hosts, or do not use shipment tracking |
| cdn.jsdelivr.net3D VIEWER ONLY | A decoder library for three less common CAD formats. No file contents are uploaded - your model is parsed in the browser. STEP, IGES, BREP, STL and ordinary glTF are handled entirely from your own server and touch nothing external. | Only when a user opens a .3dm, .ifc or Draco-compressed glTF attachment | Block it - those three formats then fail to preview; everything else is unaffected |
Connections between Prism installs on your LAN
Off by default, and the only group here where the other end is another copy of Prism rather than a service. Two colleagues can each run their own install and have them sync when they are on the same network. It is switched on per install in Settings → Sync, and until somebody does that the install will not pair with another, will not serve one a single change, and records nothing to send. (One route stays open either way: an install will always say who it is, which carries an identity and nothing else.) Every connection below is to an address on your own subnet, and every one is refused unless the two installs have been deliberately paired.
| Destination | What it carries | When it fires |
|---|---|---|
| The colleague's Prism, oncePAIRING - OFF BY DEFAULT | Each install's own identity, its signing public key, its schema version, and its licence token. The licence is checked by the receiving install against a key held locally - no server is contacted to do it. Pairing is refused unless both are on the same licence, both are on the same version, and the caller holds a six-digit code the other machine minted and read out. | Only when an administrator pastes a pairing code and presses Pair. The code is single-use and expires in ten minutes. |
| Each paired peerTHE SYNC LOOP | Field-level changes to tasks, projects, areas, workspaces and statuses - a title, a due date, a status, an assignee - and nothing else. Assignees travel as an email address rather than a number, because a number means a different person on the other machine. Attachments, comments, checklists, time entries, wiki pages and every part of the engineering module stay put; they are not sent at all. | Every 15 seconds or so once enabled and paired, and when somebody presses Sync now. Each request is signed with the install's own key and refused by the far end unless it comes from a peer that was pinned during pairing. |
| The peer that just called usONE CHECK, DURING PAIRING | Nothing but a request for the caller's identity, so the address recorded for them can be confirmed to actually be them before it is stored and used later. | Once, inside the pairing exchange. The address is taken from the TCP connection itself — the request carries no address field at all — so it can only ever be the machine that really called. |
| 224.0.0.251 (mDNS)MULTICAST, SUBNET ONLY | The install's name and address, so a colleague's Prism and your own browser can find it without anybody typing an IP. | While Prism is running. Multicast never leaves your subnet, and routers do not forward it. |
Nothing here reaches the internet. A peer address is derived from the connection the peer opened to you, so it is always a machine on your own network; there is no directory, no relay, and no Reportil involvement in any of it - two installs that cannot see each other on the LAN simply do not sync. Switching Sync off stops the loop, and unpairing a peer stops it answering that peer at all.
What is not on this page, because it does not exist
No analytics SDK. No product telemetry. No crash or error reporting service. No session recording. No advertising or attribution pixels. No feature-flag or A/B service phoning home. Prism has none of these, in the server or in the browser bundle - which is a claim you can check rather than take on trust, because the whole list above is short enough to verify with a packet capture in an afternoon.
Two things a scanner will flag that are not what they look like. The address 8.8.8.8 appears twice in the code - both are UDP socket calls used to read the machine's own routing table so Prism can report its LAN address, and no packet is ever transmitted. And Prism advertises itself over mDNS on the local network so clients can find it by name; that is multicast traffic to 224.0.0.251, it never leaves your subnet, and it is listed in full under LAN peers above.
Firewall allowlist
Written for a default-deny egress policy. Start at tier 0 and add only the tiers you actually want. Everything is HTTPS on port 443 unless noted, and every hostname below is either Reportil's, your provider's, or your own.
| Tier | Allow | What you get - and give up |
|---|---|---|
| Tier 1STANDARD LICENSED INSTALL | licenses.reportil.com:443 plus the build host advertised in your license pack |
License validation, in-app support, and one-click updates. This is the smallest allowlist that keeps a normal commercial license working. Only the Prism server needs these - not client machines. |
| Tier 2AI - PICK ONE | bedrock-runtime.<your-region>.amazonaws.com or api.anthropic.com or api.openai.com or generativelanguage.googleapis.com |
Allow exactly one and the others are unreachable by construction. Bedrock is the tightest: the traffic stays in your AWS account. Server-side only. |
| Tier 3CLIENT CONVENIENCE | cdn.jsdelivr.net (only for .3dm / .ifc / Draco glTF) | Applies to client machines, not the server. This tier used to include Google's font hosts; it no longer does, because Prism now serves its own fonts. Skipping jsdelivr costs previews for three uncommon CAD formats and nothing else. |
| Tier 4INTEGRATIONS YOU ENABLE | your mail server (IMAP 993 / SMTP 587) your Jira base URL your Confluence base URL (sprint reports, outbound only) login.microsoftonline.com (OAuth2 mail only) www.ups.com, api-eu.dhl.com (shipment tracking) |
Add only the ones you switch on. All are off out of the box. The carrier hosts are needed only if your team uses shipment tracking in the engineering module. |
Inbound, Prism needs one port: the one you run it on, reachable from your LAN. It does not need to be reachable from the internet for any feature on this page, including updates and licensing - both are outbound-initiated.
Tell us which line, and we will work the list.
This page exists so a security review can be a conversation about specifics instead of a questionnaire. If a particular row blocks an approval - the background AI timer, the update channel, a carrier lookup - say which one. Most of them are a setting we can add or a build we can ship, and we would rather do that than argue about it.