data/download-upload/ first.| File | Size | Encrypt/Decrypt |
|---|
/| Job | Category | Progress | Started | Elapsed |
|---|
| Job / Run | Category | Status | User | Files | Started | Duration | Details |
|---|
archive/<folder>/. Pick a folder to browse it. Only files in download-upload (User Based) can be re-sent; API & Managed-Identity files are view-only. Progress & results show on the Job Status tab.| File | Date Archived |
|---|
| Tool | What it does | |
|---|---|---|
| READ | list_clients | List the clients you can act on via MCP (those you're assigned to with MCP access). |
| READ | list_connections | List a client's SFTP / SharePoint connections (id, name, type). |
| READ | list_remote_files | List files in a connection's remote directory. |
| READ | list_history | Recent transfer-run history for a client (newest first). |
| READ | get_run_status | Status + per-file results of one transfer run by runId. |
| WRITE | upload_files | Stage a file (base64) and push it to a connection β data/mcp/. |
| WRITE | download_files | Pull a remote file from a connection into staging (data/mcp/). |
There is no separate portal password β authentication is your organization's Microsoft sign-in, and access is granted by WCM ahead of time. The whole process takes a few seconds:
Step by step:
If sign-in doesn't complete: two different messages can appear after Microsoft accepts your credentials β "Account isn't authorized" (your account isn't registered for the portal) or "Account locked" (too many failed attempts). Both are explained under Sign-in refused or locked.
After sign-in you land on the client list β the client organizations your account is authorized to act for. Most people see exactly one; accounts that work with several clients see a card for each.
Step by step:
Things worth knowing:
Once a client is open, the screen has four fixed regions β everything you do happens in the content area under the tab row:
What each tab is for:
| Tab | Use it to⦠|
|---|---|
| Manage Items | List a connection's own folder and permanently remove files from it (typing Delete to confirm). More β |
| Upload | Send files to a destination WCM configured for you β with optional encryption. More β |
| Download | Browse a remote server, SharePoint library or mailbox and pull files. More β |
| Job Status | Watch live progress of anything currently running. More β |
| History | Look up any past run and read its step-by-step log. More β |
| Archive | Browse every delivered file; re-send or encrypt/decrypt User files. More β |
| π€ Connect AI | Connect an AI assistant that acts as you. More β |
| β Help | This guide β opened from the β Help button in the top bar (next to your account), from anywhere in the portal. |
Every timestamp in the portal β run start times, durations, archive dates, log steps β is shown in one configured time zone, set by your WCM administrator. The column header always tells you which zone you're looking at:
| Job / Run | Status | Started (PDT) 1 | Duration |
|---|---|---|---|
| Portal Upload β Acme Production | Completed | Aug 3, 2026, 9:14:02 AM | 18s |
| API Upload β Globex Dropbox | Completed | Aug 3, 2026, 6:00:11 AM | 42s |
How it works:
A connection is a destination WCM has set up for your client β an SFTP server, a SharePoint library, or an email delivery. Your first decision on the Upload tab is which one the files should go to:
Step by step:
Things worth knowing:
Add files by dragging them in or browsing for them, then review the list before sending:
| File | Size | |
|---|---|---|
| π statement-july.csv | 2.4 MB | β 3 |
| π invoices.zip | 18.1 MB | β |
Step by step:
Files can be protected (or un-protected) in transit, as part of the send itself β no separate tool needed. Once files are listed, the encryption bar appears:
| File | Encrypt/Decrypt |
|---|---|
| π statement-july.csv | None |
| π readme.txt | None |
| File | Encrypt/Decrypt |
|---|---|
| π statement-july.csv | π Encrypt |
| π readme.txt | None |
| File | Encrypt/Decrypt |
|---|---|
| π statement-july.csv.pgp | π Decrypt |
| π invoices.zip.pgp | π Decrypt |
The three choices (bulk bar, or per file):
name.pgp (or name.p7m); only the destination's key holder can open it. See Encrypting a file.How the bulk bar and the per-file column interact:
With the connection chosen and files listed, one click starts the delivery:
| Job | Progress 2 | Elapsed |
|---|---|---|
| Portal Upload β Acme Production | 0:12 |
What happens after you click Send:
There's no size limit on uploads β but very large files are handled differently behind the scenes, and it helps to know what that looks like:
| Job / Run | Status 1 | Files |
|---|---|---|
| Portal Upload β Acme Production | Queued | backup-full.zip (3.2 GB) |
| Portal Upload β Acme Production | Running | backup-full.zip (3.2 GB) |
| Portal Upload β Acme Production | Completed | backup-full.zip (3.2 GB) |
How it works:
The Download tab pulls files from a source β a remote SFTP server, a SharePoint library, or a monitored mailbox. Start by picking where to look:
/outboundStep by step:
/outbound) β leave it empty to list the connection's default directory. The banner shows which directory will be listed.A mailbox connection is a monitored email inbox: partners email files in as attachments, and you collect them here β no server or credentials on their side needed. When you pick one, the directory path is replaced by a look-back control:
How it works:
Things worth knowing:
Before listing files, choose what happens to the bytes as they're downloaded β the dropdown sits just under the connection picker:
| File on the server | Arrives on your computer as |
|---|---|
| π statement-july.csv.pgp | statement-july.csv.pgp |
| π remittance-advice.pdf | remittance-advice.pdf |
| File on the server | Arrives on your computer as |
|---|---|
| π statement-july.csv.pgp | statement-july.csv |
| π invoices.zip.pgp | invoices.zip |
| File on the server | Arrives on your computer as |
|---|---|
| π remittance-advice.pdf | remittance-advice.pdf.pgp |
| π payroll-extract.csv | payroll-extract.csv.pgp |
The three choices:
report.csv.pgp): the connection's private key decrypts in transit and you receive the readable report.csv. See Decrypting a file.report.csv.pgp), useful when the readable version shouldn't touch your machine. See Encrypting a file.With the source and options set, connect and pick what you need:
| File | Size | Modified | |
|---|---|---|---|
| π statement-july.csv.pgp | 2.4 MB | Aug 1, 2026 | β¬ Download 2 |
| π remittance-advice.pdf | 310 KB | Jul 29, 2026 | β¬ Download |
Step by step:
Job Status is the live view: every job currently running for this client, whoever started it β you, a schedule, a partner system, or an AI assistant:
| Job | Category 1 | Progress 2 | Elapsed |
|---|---|---|---|
| Portal Upload β Acme Production | User Based | 0:12 | |
| Nightly Statements β Acme Production | Schedule Based | 0:34 | |
| API Upload β Globex Dropbox | MI Based | 0:07 |
How to read it:
Not everything that moves files starts in your browser β schedules fire, partner systems call the API, AI assistants act on someone's behalf. When one of those completes while you have the client open, it surfaces here briefly so the activity doesn't slip past you:
| Job | Category | Result 1 |
|---|---|---|
| MCP Upload β Acme Production | MCP Based | β Completed moving to Historyβ¦ |
What to expect:
History holds every run that ever executed for this client, so the filter bar is how you find the one you're after:
Each control:
yyyy-mm-dd. Combine with search to find "that file we sent in June".Every run carries a category badge saying which channel started it, and a User column saying exactly who or what that was:
| Job / Run | Category 1 | User 2 |
|---|---|---|
| Portal Upload β Acme Production | User Based | Jane Doe |
| Nightly Statements β Acme Production | Schedule Based | Schedule |
| API Upload β Acme Production | API Based | sk_acme |
| MCP Upload β Acme Production | MCP Based | jane.doe@acme-client.com |
| API Upload β Acme Production | MI Based | acme-billing-app |
The five categories:
| Badge | Meaning | User column shows |
|---|---|---|
| User Based | Started by a person in this portal (Upload / Download / Re-Send). | The person's name |
| Schedule Based | A recurring transfer configured by WCM, run automatically. | The schedule |
| API Based | A system calling the REST API with an API key. More β | The key's prefix (e.g. sk_acme) |
| MCP Based | An AI assistant acting for a signed-in user. More β | That user's email |
| MI Based | An Azure application using its Managed Identity. More β | The application's name |
The Status column tells you how each run ended β or that it hasn't yet. The colors are consistent everywhere in the portal:
| Job / Run | Status 1 | Files |
|---|---|---|
| Portal Upload β Acme Production | Completed | 2 / 2 |
| Nightly Statements β Acme Production | Partial | 3 / 4 |
| API Upload β Globex Dropbox | Failed | 0 / 1 |
| Portal Upload β Acme Production | Queued | 0 / 1 |
| API Upload β Acme Production | Unconfirmed 2 | ? / 1 |
Every status:
| Status | Meaning |
|---|---|
| Completed | Every file delivered successfully. |
| Partial | Some files delivered, some failed β open the Log to see which. |
| Failed | Nothing was delivered; the Log has the error. |
| Running | In progress β watch it on Job Status. |
| Queued | Accepted for background delivery (large files) and waiting its turn. |
| Unconfirmed | The outcome is unknown β the engine didn't report back in time. The file may have been delivered: check before re-sending. See troubleshooting. |
| Cancelled | Stopped before completion at someone's request. |
Every run keeps a step-by-step record of what actually happened. Click Log on any History row to open it:
| Job / Run | Status | Details |
|---|---|---|
| Portal Upload β Acme Production | Failed | Log 1 |
What the timeline tells you:
Every delivered file is retained, organized by the channel that sent it. The folder dropdown switches between them:
The folders:
The separation is deliberate: it keeps each channel's activity distinct, so "what did the portal send" and "what did the partner's system send" are never mixed together.
A partner lost a file, or needs last month's delivery again? Nothing needs re-uploading β the archived copy can be pushed again as-is:
| β | File | Date Archived (PDT) |
|---|---|---|
| β 1 | π statement-july.csv.pgp | Jul 31, 2026, 6:00 PM |
| β | π remittance-advice.pdf | Jul 29, 2026, 2:11 PM |
| β | π onboarding-pack.zip | Jun 12, 2026, 9:40 AM |
Step by step:
Archived files can be transformed where they sit β no transfer involved. Select files in the User folder and the crypto buttons appear next to Re-Send:
| β | File | Date Archived (PDT) |
|---|---|---|
| β | π statement-july.csv.pgp | Jul 31, 2026, 6:00 PM |
| File | Date Archived (PDT) |
|---|---|
| π statement-july.csv.pgp | Jul 31, 2026, 6:00 PM |
| π statement-july.csv 2 | Aug 3, 2026, 9:20 AM |
How it behaves:
statement-july.csv.pgp β π Decrypt β select the new statement-july.csv β Re-Send. Two clicks, no re-upload, full audit trail.Archives grow over time, so each folder has the same finding tools as History:
| β | File | Date Archived (PDT) βΎ 2 |
|---|---|---|
| β | π statement-july.csv.pgp | Jul 31, 2026, 6:00 PM |
| β | π remittance-advice.pdf | Jul 29, 2026, 2:11 PM |
Keys live on the connection and are managed by WCM β you never handle key material. Each connection has two independent key slots:
The two slots in detail:
| Slot | Used for | Where it's kept |
|---|---|---|
| Encryption public key | Encrypting files you send / download | On the connection (public β not a secret) |
| Decryption private key | Decrypting files you receive / hold | Secure vault β used only by the engine, never shown |
Neither key implies the other: a connection may encrypt only, decrypt only, both, or neither. The file format is chosen automatically from the key type β a PGP key produces name.pgp, an X.509 certificate produces S/MIME name.p7m.
Encrypting locks a file with the connection's public key so only the destination's key holder can open it:
Where you can do it β three places, all using the same key:
name.pgp / name.p7m.Decrypting is the mirror image: the connection's private key β which never leaves WCM's vault β unlocks a protected file back into its readable form:
Where you can do it β the same three places:
.pgp, .gpg, .asc, .p7m, .smime) are stripped from the result's name.Encryption errors are designed to be loud and specific β the portal never silently skips protection. A typical one looks like this:
What each message means:
| Message | What it means |
|---|---|
| "β¦no Encryption public key on connectionβ¦" | The connection can't encrypt β ask WCM to attach the partner's public key. |
| "β¦no Decryption private key on connectionβ¦" | The connection can't decrypt β ask WCM to attach the private key. |
| An error naming the file during decrypt | Usually the file wasn't encrypted to this connection's key pair, or isn't an encrypted file at all. |
| "already exists β¦ pass overwrite" | In-place encrypt/decrypt refuses to replace an existing result file β remove or rename it first. |
Stargate is also an MCP server β a standard interface AI assistants use to work with external systems. Connect your assistant and file transfers become something you can simply ask for:
| MCP Upload β Acme Production | MCP Based | jane.doe@acme-client.com 2 |
The key idea β it acts as you:
Everything you need lives on the portal's π€ Connect AI tab β most importantly the server URL:
Add it to your assistant:
claude mcp add --transport http wcm-sftp <server URL>The first time your assistant talks to Stargate, it hands the sign-in to your browser β the same Microsoft prompt you know from the portal:
How it works:
Requirements β both must be true, or tool calls will say so:
Once connected, plain requests translate into Stargate operations β a good first ask is read-only:
The full toolbox:
| Tool | What it does | |
|---|---|---|
| READ | list_clients / list_connections | Your clients, and each client's connections. |
| READ | list_remote_files | Files in a connection's remote directory. |
| READ | list_mailbox / download_mailbox | List and fetch email-received attachments. |
| READ | list_history / get_run_status | Run history and per-run status. |
| WRITE | upload_files | Send a small file (inline) to a connection. |
| WRITE | request_upload β commit_upload | Two-step large-file upload β the bytes never pass through the assistant. |
| WRITE | download_files | Pull a remote file into your staging area. |
| WRITE | encrypt_file / decrypt_file | Transform a file already in your storage. |
WCM can limit which tools are available to your client; a missing tool is policy, not a bug.
Sending the same file to the same connection twice within 15 minutes is refused β and that refusal is a feature. Here's the guard working as intended:
Why this exists: the usual reason anyone re-sends is a first attempt that looked failed β and with large transfers, the request can time out while the delivery carries on and completes. Without the guard, that pattern produces duplicate files on the partner's server.
The right sequence when a send looks failed:
list_history / get_run_status for the run.force for exactly that case.Rather than configuring by hand, you can hand the setup to your assistant: download this Markdown guide and give it to your Claude (or any MCP-capable assistant). It contains everything the assistant needs to connect itself to Stargate and verify the connection works.
How to use it:
What's inside β the guide's sections, so you know what your assistant is following:
| Section | What it does |
|---|---|
| What you need first | The three prerequisites: a portal account, AI access enabled on your client, and an MCP-capable assistant β plus the two access gates that must both pass. |
| Server URL | The one address to add (the same one shown on the Connect AI tab) β and why there's no key or secret to paste. |
| How sign-in works | The automatic discovery + browser sign-in flow, so nothing needs manual configuration β see Signing in (OAuth). |
| Setup by client | Exact steps per assistant: Claude Desktop, Claude Code, and other MCP clients. |
| What the assistant can do | The full tool list with descriptions β the same 16 tools covered in What the assistant can do, including both large-file upload routes. |
| Verifying it works | A safe, read-only first ask that proves sign-in and access without moving any data. |
| Troubleshooting | Symptom β cause table for every common error message, including the duplicate-send guard and unconfirmed-run discipline. |
| What gets recorded | The audit trail: every sign-in and transfer logged under your name β matching what you see on History. |
The API channel lets your systems β scripts, schedulers, integration platforms β exchange files without a person in the loop. Access rests on two things WCM sets up for you:
How it works:
sk_β¦) and records the IP addresses it may call from. Both must match β a valid key from an unlisted address is refused.X-Api-Key header β see Available commands.The API mirrors this portal β everything a person can do on these tabs, a system can do with one HTTP call. The first call to make is always /v1/me:
The full command reference. Each command below has its parameters and a ready-to-run example. Pick your format once β cURL, REST (raw HTTP), or PowerShell β and every example on the page switches together. Replace <connId>, <runId>, and file names with your own values.
BASE is the gateway; the key goes in the X-Api-Key header on every request.| Parameter | Description | |
|---|---|---|
| No parameters β just the auth header. | ||
<connId> in the commands below comes from β each row has id, name, type (sftp / sharepoint / sendemail / receiveemail), and the crypto flags hasEncryption / hasDecryption.| Parameter | Description | |
|---|---|---|
| No parameters β just the auth header. | ||
| Parameter | Description | |
|---|---|---|
folder | optional | Query. Browse a specific archive folder (download-upload, api, mi, mcp, schedule). Default: your own channel's folder (api). |
/v1/transfer to deliver.
/v1/transfer call.| Parameter | Description | |
|---|---|---|
file | required | Multipart form field holding the file bytes. The field name must be exactly file β one per request; extra file fields are ignored. |
fileName | optional | Multipart form field. Overrides the stored name (default: the uploaded file's own name). |
| Parameter | Description | |
|---|---|---|
name | required | Path segment. The file name as it appears in the /v1/files listing. |
dir | optional | Query. archive = fetch the archived (delivered) copy instead of the staged one. |
| Parameter | Description | |
|---|---|---|
connId | required | The destination connection's id from /v1/connections. |
fileName | required | The staged file to send (name only, no path). |
crypto | optional | "encrypt", "decrypt", or "none" β transform in transit using the connection's keys. Encrypt delivers name.pgp/.p7m; decrypt delivers the plaintext. |
fromArchive | optional | true = re-send the archived copy of an earlier delivery, byte-for-byte. Crypto is ignored on re-sends. |
async | optional | true = don't hold the request open: large files return 202 + a runId immediately; poll /v1/runs/{runId}. |
force | optional | true = send despite the recent-duplicate guard. Only after /v1/history confirms the earlier attempt did NOT deliver. |
202 actionable. Poll until it reports a final state.| Parameter | Description | |
|---|---|---|
runId | required | Path segment. Returned by /v1/transfer (async) and present on every history row. |
| Parameter | Description | |
|---|---|---|
connId | required | Query. The connection to browse. |
path | optional | Query. Directory to list. SFTP: full path with leading slash (/outbound); default is the connection's working directory. β SharePoint: folder-qualified with NO leading slash (Upload). |
| Parameter | Description | |
|---|---|---|
connId | required | Query. The connection to pull from. |
path | required | Query. Full file path β same SFTP/SharePoint path rules as /v1/remote. |
crypto | optional | Query. decrypt = receive the readable file; encrypt = receive it protected; none = exactly as stored. Omitted = handled automatically. |
receiveemail connection.| Parameter | Description | |
|---|---|---|
connId | required | Query. Must be a receiveemail connection. |
days | optional | Query. Look-back window, 1β1095 days. Default: 30 (or the connection's configured window). |
| Parameter | Description | |
|---|---|---|
connId | required | Query. The receiveemail connection. |
id | required | Query. The attachment id from /v1/mailbox. |
crypto | optional | Query. decrypt to receive an encrypted attachment readable; omitted = handled automatically. |
connId names whose keys to use.| Parameter | Description | |
|---|---|---|
connId | required | The connection whose key performs the operation. |
fileName | required | The stored file to transform. |
fromArchive | optional | true = operate on the archived copy instead of the staged one. |
overwrite | optional | true = replace an existing result file. Default: refuse rather than clobber. |
| Parameter | Description | |
|---|---|---|
| No parameters β just the auth header. | ||
The typical send sequence: POST /v1/files (stage the file) β POST /v1/transfer (push it to a connection) β check the result. Encryption works exactly as in the portal β pass "crypto": "encrypt" (or "decrypt") on the transfer.
Large transfers: pass "async": true on /v1/transfer β you get 202 + a runId immediately; poll /v1/runs/{runId} for the outcome instead of holding the request open.
/v1/history before re-sending β the same verify-before-retry discipline as everywhere else in Stargate.Nothing your systems do via the API is invisible β it all lands in the same portal views you already use:
| Job / Run | Category | User 1 |
|---|---|---|
| API Upload β Acme Production | API Based | sk_acme |
| API Download β Acme Production | API Based | sk_acme |
Where API activity shows up:
sk_acme) as the user, so you can always tell which system did what. Filter Category to "API Based" to see only machine traffic.If your integration runs in Azure (Function App, Web App, VMβ¦), it can authenticate as itself β using the identity Azure manages for the app β instead of holding an API key:
Why teams choose it over an API key:
WCM allowlists your app's identity (its Object ID) and binds it to your client β see Setting it up. Runs show the MI Based badge with your app's name as the user, and files go to the mi archive folder β same auditing as every other channel.
Setup is a one-time exchange: you flip one switch in Azure and send WCM three pieces of information.
Step by step:
az functionapp identity assign.)Two lines of ceremony, then it's the exact same API as the API-key channel: request a token for Stargate's audience, send it as a Bearer header instead of X-Api-Key. Every command in the reference works identically.
Node.js (install @azure/identity):
PowerShell (inside the Azure app β uses the injected identity endpoint):
Any other language: use its Azure Identity SDK (ManagedIdentityCredential with the same api://β¦/.default scope), or call the raw identity endpoint as the PowerShell example does β it's plain HTTP.
The first-call test sequence:
/v1/me β expect { mode: "managed-identity", clientCode: "β¦" }./v1/connections β stage β transfer β history.Hand the whole setup to your developers β or their AI assistant: download this Markdown guide and pass it along. It contains everything needed to configure an Azure Function App (or any Azure-hosted app) to connect to Stargate with its Managed Identity, end to end.
How to use it:
What's inside β the guide's sections and what each covers:
| Section | What it does |
|---|---|
| Model & fixed values | How MI auth works in one paragraph, plus the three constants every caller uses: gateway URL, token audience, and tenant. |
| Part 1 β Configure the Function App | Enable the system-assigned identity, capture the Object ID, and the three items to send WCM β matching Setting it up. |
| Admin steps (reference) | What WCM does with the enrollment request β included so the reader knows what to expect, clearly marked as not theirs to do. |
| Part 2 β Calling the gateway | How the token works, the Node.js client, the raw REST form for other languages, and the first-call verification β matching Calling the API from your app. |
| Part 3 β The API surface | Every endpoint with parameters: staging, transfers with async polling, remote browsing with the SFTP/SharePoint path rules, mailbox, and encryption options. |
| Error matrix | Every response the caller will actually see, including the pre-registration 403 that doubles as a smoke test. |
| Operational notes | Revocation timing, auditing, the User-Agent recommendation, and a suggested smoke sequence. |
The most common "problem" isn't a fault at all: every connection is enabled per channel, and a channel it isn't enabled for simply never sees it:
What this looks like in practice:
connId β or the other way around.The fix is always the same: ask your WCM administrator to check the connection's channel settings and tick the channel you need. It takes effect within about a minute.
connId, which is exactly the point: what you can see is what you can use.Large transfers can outlive the request that started them: the browser (or API call) gives up waiting while the engine carries on β often finishing successfully. That's what Unconfirmed means: unknown, not failed.
| Job / Run | Status | Details |
|---|---|---|
| Portal Upload β Acme Production | Unconfirmed 1 | Log 2 |
The right sequence β verify before re-sending:
Two different messages can appear after Microsoft accepts your credentials β they look similar but mean different things:
What each means and what to do:
| Message | Meaning | What to do |
|---|---|---|
| π« Access denied / not authorized | Your Microsoft sign-in worked β but the account isn't registered for this portal. Nothing is wrong with your password. | Ask WCM to add your account. Once registered, sign in again β no reset needed. |
| π Account locked | Repeated failed attempts locked the account temporarily, as a protection. | Wait out the grace period and try again β or ask a WCM administrator, who can unlock it immediately. |
The Manage Items tab lists the files sitting in one connection's own folder and lets you permanently remove them β it exists to withdraw something sent by accident, before the other side picks it up.
Delete before anything happens. One confirmation covers every file you ticked;
a wrong or empty word cancels safely.You'll notice the Archive tab has Re-Send and Encrypt/Decrypt β but no delete button. That's by design, not an omission:
Why: the archive is the proof of what was delivered, when, and in exactly what form. It's what makes Re-Send trustworthy and History verifiable β for you as much as for WCM. A quietly deletable archive would be worth much less the day you need it in a dispute.
When something genuinely must go (sent in error, contains data it shouldn't):
Contact your WCM representative β and include three things from History, which turn "something's wrong" into a case WCM can act on immediately:
Where to find each item: