Public API Reference
Integration & mail-plugin endpoints
This document describes the public HTTP API exposed by the FileCap server. These endpoints are intended for mail plugins, third-party integrations and other external systems that need to upload files, request invites, validate transfer metadata or read server configuration. Internal endpoints used by the admin panel, the OWA add-in and partner / license-server integrations are out of scope.
The API has grown in two distinct generations:
.jsp URLs (e.g. process_upload.jsp) that historically powered the Outlook classic plugin and similar integrations. Each JSP performs a server-side forward to a modern REST endpoint; both the JSP and the modern path keep working./FileCap/api/... that return a structured ApiResult<T> envelope. New integrations should target this surface.All endpoints are served from the FileCap web application at the context root /FileCap. The Postman collection that ships with this document uses a baseURL variable that should contain the scheme + host (no trailing slash), e.g.:
https://filecap.example.com
Resulting URLs are then constructed as {{baseURL}}/FileCap/<path>.
Most endpoints accept an APIKey in the request body (form field, urlencoded parameter or JSON property — the modern variants accept apiKey as well). The key is configured per FileCap tenant and is required for every integration call unless the endpoint is explicitly public (e.g. password-rules and the validate/* endpoints).
A subset of the modern endpoints additionally accepts a deviceApiKey, returned by the device registration flow (section 9). Endpoints that require web-portal authentication use either the portal session cookie or a JWT Bearer token (scope transfer:free).
Modern JSON endpoints wrap their result in:
{
"success": true,
"value": { ... },
"errorMessage": null
}
On failure, success is false, value is null and errorMessage contains the reason.
The legacy / *.jsp endpoints return plain text:
true — request succeeded.false|<ERROR_CODE> — request failed; the code identifies the cause.Several endpoints are rate-limited per session, per JWT or globally. Limits are shown in the endpoint reference where relevant. When a limit is exceeded the server responds with HTTP 429.
These are the original public endpoints. They are kept for backward compatibility with deployed mail plugins and third-party scripts. New integrations should prefer the modern equivalents in the next chapters; the table below shows which legacy URL forwards to which modern path.
| Legacy URL | Method | Forwards to | Notes |
|---|---|---|---|
process_upload.jsp | POST | /api/transfer/v1/send-outlook-transfer | multipart/form-data, text/plain response |
invite.jsp | POST | /api/invite/old | application/x-www-form-urlencoded |
mailPluginSettings.jsp | POST | /api/settings/outlook-windows | application/x-www-form-urlencoded → XML |
checkFile.jsp | POST | /api/validate/file | application/x-www-form-urlencoded |
checkTransfer.jsp | POST | /api/validate/transfer | application/x-www-form-urlencoded |
domainCheck.jsp | POST | /api/validate/domain | application/x-www-form-urlencoded |
Each legacy endpoint is documented in detail below.
{{baseURL}}/FileCap/process_upload.jspContent-Type: multipart/form-data
Upload one or more files in a single transfer. Forwards to /api/transfer/v1/send-outlook-transfer. Returns plain text: true on success, false|<ERROR_CODE> on failure.
Field ordering: the server streams the multipart body and processes parts in the order they arrive. The fileMetadata field MUST be sent BEFORE the file parts (file01, file02, ...). When a file part is read the server looks up its expected size in the metadata list; on S3 storage the upload is rejected with "File metadata required" when the metadata has not yet been seen, and on FREE-tier portals a NullPointerException is raised. A typical multipart body therefore starts with all text fields (APIKey, ids, from, ..., fileMetadata) and ends with the binary file01 / file02 / ... parts.
| Name | Type | Req. | Description |
|---|---|---|---|
APIKey | string | yes | FileCap server API key. |
deviceApiKey | string | no | Per-device API key when the integration is registered as a device. |
ids | string | yes | Transfer ID. Must be unique per transfer. |
from | string | yes | Sender e-mail address. |
fromName | string | no | Display name of the sender. |
subject | string | yes | Subject of the transfer. |
comment | string | yes | Message body. |
encryptMessage | boolean | no | When true the message body is encrypted (plain text only). Requires a password. |
rec0, rec1, ... | string | yes | TO recipients. The first is rec0, the next rec1 etc. |
cc0, cc1, ... | string | no | CC recipients. |
bcc0, bcc1, ... | string | no | BCC recipients. |
nameRec0, ... | string | no | Display names for the matching recN recipient. |
storeDays_value | integer | no | How long the transfer stays on the FileCap server. |
downloadLoadable_value | integer | no | Maximum number of downloads. |
password | string | no | Mandatory when encryptMessage = true or when policy requires a password. |
useSmsTextAuthentication | boolean | no | Enable SMS verification for the recipient (requires mobileNr). |
mobileNr | string | no | Recipient mobile number when SMS verification is used. |
dontNotify | boolean | no | When true, FileCap does not send a notification mail to the recipient. |
nrOfFilesInTransfer | integer | no | Explicit number of files in the transfer. |
userAgent | string | no | Identifier of the calling client. |
version | string | no | Version of the calling client. |
fileMetadata | JSON (text) | yes | JSON array describing every file part. One entry per file with filename, mimetype and size (bytes). The filename MUST exactly match the filename of the corresponding file part. CRITICAL: this field MUST appear in the multipart body BEFORE the file parts (see note above). |
file01, file02, ... | file | yes | File parts. The first file is file01, the next file02 etc. MUST appear AFTER the fileMetadata field. |
Plain text.
true
false|VIRUS_FOUND
VIRUS_FOUND — A virus was detected in one of the files. The transfer was cancelled.NO_RECIPIENT_GIVEN — No recipients were supplied for the transfer.FILETYPE_NOT_ALLOW — File type forbidden by MIME or extension policy.PASSWORD_MANDATORY_BUT_NOT_GIVEN — A password is required by policy but missing.CANNOT_SEND_MAIL — FileCap could not send the notification mail (mailserver / relay misconfigured).API_KEY_INVALID — The supplied APIKey is not valid.GENERAL_ERROR — Unknown error; check the FileCap server log for the stack trace. Often a network / proxy issue.{{baseURL}}/FileCap/invite.jspContent-Type: application/x-www-form-urlencoded
Send a FileCap invite to an external user, asking them to upload files for the inviter. Forwards to /api/invite/old. Returns plain text true / false|<ERROR_CODE>.
| Name | Type | Req. | Description |
|---|---|---|---|
APIKey | string | yes | FileCap server API key. |
deviceApiKey | string | no | Per-device API key. |
id | string | yes | Invite ID. MUST start with the prefix iiiii. |
senderEmail | string | yes | E-mail address of the person who needs to receive the invite (the inviter). |
receiverEmail | string | yes | E-mail address of the person who needs to receive the files (normally your own e-mail address). |
receiverMobileNr | string | no | Mobile number of the receiver when SMS verification is required. |
message | string | no | Free-form message attached to the invite. |
notify | boolean | no | When false, FileCap will not send a notification mail (the calling system must handle it). |
Plain text.
true
false|CANNOT_SEND_MAIL
CANNOT_SEND_MAIL — The mailserver could not process the invite mail.CANNOT_ADD_INVITE_TO_DB — FileCap could not persist the invite ID.UNKNOWN_ERROR — An exception was raised. Check the server log.{{baseURL}}/FileCap/mailPluginSettings.jspContent-Type: application/x-www-form-urlencoded
Request the FileCap server settings used by mail plugins (Outlook classic etc.). Forwards to /api/settings/outlook-windows. Returns the plug-in configuration as XML.
| Name | Type | Req. | Description |
|---|---|---|---|
APIKey | string | yes | FileCap server API key. |
userAgent | string | no | Identifier of the calling client. |
version | string | no | Version of the calling client. |
lang | string | no | Locale (e.g. NL, EN). |
XML document containing maximum file size, allowed extensions, password policy, verification methods, branding, etc.
{{baseURL}}/FileCap/checkFile.jspContent-Type: application/x-www-form-urlencoded
Verify – before uploading – whether a single file is allowed by the server policy (extension and MIME blocklists, sender restrictions). Forwards to /api/validate/file.
| Name | Type | Req. | Description |
|---|---|---|---|
APIKey | string | yes | FileCap server API key. |
filename | string | yes | Name of the file. |
sender | string | yes | Sender e-mail address. |
mime | string | yes | MIME type of the file. |
fileID | string | no | Identifier of the file. |
Plain text true when allowed, false|<ERROR_CODE> when blocked.
{{baseURL}}/FileCap/checkTransfer.jspContent-Type: application/x-www-form-urlencoded
Inspect a previously created transfer (used by mail plugins to check status / contents). Forwards to /api/validate/transfer.
| Name | Type | Req. | Description |
|---|---|---|---|
APIKey | string | yes | FileCap server API key. |
deviceApiKey | string | no | Per-device API key. |
id | string | yes | Transfer ID. |
email | string | no | Recipient e-mail; when supplied the response is scoped to this recipient. |
Plain text response with the transfer status / file list.
{{baseURL}}/FileCap/domainCheck.jspContent-Type: application/x-www-form-urlencoded
Verify whether the sender domain is allowed to send to the recipient domain (whitelist / IP rules). Forwards to /api/validate/domain.
| Name | Type | Req. | Description |
|---|---|---|---|
email | string | yes | Recipient e-mail address whose domain has to be validated. |
sender | string | yes | Sender e-mail address. |
Plain text true / false|<ERROR_CODE>.
Modern transfer endpoints under /FileCap/api/transfer. The send-outlook-transfer endpoint replaces the legacy process_upload.jsp flow but returns a structured JSON ApiResult instead of plain text. The /transfer/v1/send-outlook-transfer endpoint is the path the legacy JSP forwards to (text response) and is documented for completeness.
All multipart upload endpoints in this chapter (send-outlook-transfer, v1/send-outlook-transfer, send-transfer, send-reply) share a single multipart parser. They all accept — and require — a fileMetadata form field that MUST be sent BEFORE the file parts. See the note in section 3.1 for details and consequences when the order is reversed.
{{baseURL}}/FileCap/api/transfer/send-outlook-transferContent-Type: multipart/form-data
Modern Outlook plugin upload endpoint. Same form fields as process_upload.jsp; the response is a JSON ApiResult<ApiUploadValue>. Rate-limited per session (SendOutlookTransfer).
Field ordering: like the legacy endpoint, the fileMetadata form field is required and MUST be sent BEFORE the file parts. The server processes the multipart body in stream order; for each file part it looks up the expected size in the metadata list, and rejects the upload ("File metadata required" on S3 storage; NullPointerException on FREE-tier portals) when the metadata has not yet been seen.
[
{ "filename": "report.pdf", "mimetype": "application/pdf", "size": 102400 },
{ "filename": "photo.jpg", "mimetype": "image/jpeg", "size": 51200 }
]
| Name | Type | Req. | Description |
|---|---|---|---|
APIKey | string | yes | FileCap server API key (alias: apiKey). |
deviceApiKey | string | no | Per-device API key. |
ids | string | yes | Transfer ID (alias: transferId). |
from | string | yes | Sender e-mail (aliases: fromEmail, senderEmail, senderEmailAddress). |
fromName | string | no | Sender display name (alias: senderName). |
subject | string | yes | Transfer subject. |
comment | string | yes | Message body. |
encryptMessage | boolean | no | Encrypt the message body (alias: useEncryption). |
rec0, rec1, ... | string | yes | TO recipients (alias: recipient). |
cc0, cc1, ... | string | no | CC recipients. |
bcc0, bcc1, ... | string | no | BCC recipients. |
maxDownloads | integer | no | Maximum number of downloads (alias: downloadLoadable_value). |
maxDaysToStore | integer | no | Retention period in days (alias: storeDays_value). |
password | string | no | Transfer password. |
useSmsTextAuthentication | boolean | no | Enable SMS verification (alias: enableToken). |
verificationMethod1 | string | no | Primary verification method (e.g. EMAIL_ACCESS_CODE, SMS, PASSWORD, NONE). |
verificationMethod2 | string | no | Secondary verification method. |
dontNotify | boolean | no | When true, FileCap does not send a notification mail. |
nrOfFilesInTransfer | integer | no | Explicit file count. |
userAgent / version | string | no | Identification of the calling client. |
fileMetadata | JSON (text) | yes | JSON array describing every file part. One entry per file with filename, mimetype and size (bytes). The filename MUST exactly match the corresponding file part. CRITICAL: must appear BEFORE the file parts in the multipart body. |
file01, file02, ... | file | yes | File parts. MUST appear AFTER the fileMetadata field. |
JSON. Example:
{
"success": true,
"value": {
"transferId": "263478632784632748237513",
"generatedPassword": "Ax9!kp2Qm"
},
"errorMessage": null
}
{{baseURL}}/FileCap/api/transfer/v1/send-outlook-transferContent-Type: multipart/form-data
Plain-text variant of the upload (returns true / false|<ERROR_CODE>). This is the endpoint that process_upload.jsp forwards to. Use it when the calling client requires the legacy text response shape.
| Name | Type | Req. | Description |
|---|---|---|---|
APIKey | string | yes | FileCap server API key. |
deviceApiKey | string | no | Per-device API key when the integration is registered as a device. |
ids | string | yes | Transfer ID. Must be unique per transfer. |
from | string | yes | Sender e-mail address. |
fromName | string | no | Display name of the sender. |
subject | string | yes | Subject of the transfer. |
comment | string | yes | Message body. |
encryptMessage | boolean | no | When true the message body is encrypted (plain text only). Requires a password. |
rec0, rec1, ... | string | yes | TO recipients. The first is rec0, the next rec1 etc. |
cc0, cc1, ... | string | no | CC recipients. |
bcc0, bcc1, ... | string | no | BCC recipients. |
nameRec0, ... | string | no | Display names for the matching recN recipient. |
storeDays_value | integer | no | How long the transfer stays on the FileCap server. |
downloadLoadable_value | integer | no | Maximum number of downloads. |
password | string | no | Mandatory when encryptMessage = true or when policy requires a password. |
useSmsTextAuthentication | boolean | no | Enable SMS verification for the recipient (requires mobileNr). |
mobileNr | string | no | Recipient mobile number when SMS verification is used. |
dontNotify | boolean | no | When true, FileCap does not send a notification mail to the recipient. |
nrOfFilesInTransfer | integer | no | Explicit number of files in the transfer. |
userAgent | string | no | Identifier of the calling client. |
version | string | no | Version of the calling client. |
fileMetadata | JSON (text) | yes | JSON array describing every file part. One entry per file with filename, mimetype and size (bytes). The filename MUST exactly match the filename of the corresponding file part. CRITICAL: this field MUST appear in the multipart body BEFORE the file parts. |
file01, file02, ... | file | yes | File parts. The first file is file01, the next file02 etc. MUST appear AFTER the fileMetadata field. |
Plain text.
true
false|API_KEY_INVALID
{{baseURL}}/FileCap/api/transfer/validate-uploadContent-Type: application/json
Validate the metadata of an upload before sending bytes. Checks server quota, allowed extensions / MIME, max size etc. The aliased path /transfer/validateUpload works as well.
{
"lang": "NL",
"fileMetadataList": [
{
"fileName": "report.pdf",
"fileSize": 102400,
"mimeType": "application/pdf"
}
]
}
ApiResult<Void> — only success and errorMessage are populated.
{{baseURL}}/FileCap/api/transfer/validate-filesContent-Type: application/json
Per-file validation. Returns one entry per file indicating whether it is allowed and, if not, which rule was violated.
{
"lang": "NL",
"fileMetadataList": [
{ "fileName": "clean.pdf", "fileSize": 1024, "mimeType": "application/pdf" },
{ "fileName": "forbidden.exe", "fileSize": 2048, "mimeType": "application/x-msdownload" }
]
}
ApiResult<ValidateFilesResultModel>.
{{baseURL}}/FileCap/api/transfer/validate-recipientContent-Type: application/json
Validate the sender / recipient combination against domain whitelists, IP allow-lists and the emailMaySend / emailMayReceive rules.
{
"senderEmailAddress": "kees@example.com",
"recipientEmailAddress": "piet@receiver.com"
}
ApiResult<Void>.
VALIDATION_ERROR_DOMAIN_INVALID — Recipient or sender domain is not allowed.VALIDATION_ERROR_EMAIL_ADDRESS — One of the e-mail addresses is malformed.{{baseURL}}/FileCap/api/transfer/send-replyContent-Type: multipart/form-data
Send a secure reply to an existing transfer. The original transfer is identified by its transfer ID. Rate-limited (SendReply). Same multipart parser as section 3.1, so when file parts are attached the fileMetadata field MUST appear before them.
| Name | Type | Req. | Description |
|---|---|---|---|
ids | string | yes | ID of the original transfer. |
from | string | yes | Sender e-mail. |
subject | string | yes | Reply subject. |
comment | string | no | Reply message. |
replyToAll | boolean | no | Reply to every recipient of the original transfer. |
fileMetadata | JSON (text) | yes* | JSON array describing every file part (filename, mimetype, size). Required when file parts are attached. MUST appear BEFORE the file parts. |
file01, ... | file | no | Optional file parts. Place AFTER fileMetadata. |
ApiResult<SentTransferInfo>.
{{baseURL}}/FileCap/api/transfer/checkConnectionContent-Type: application/json
Lightweight liveness probe. Always returns ApiResult.success("connected") when the FileCap portal is reachable.
Always returns:
{ "success": true, "value": "connected", "errorMessage": null }
Endpoints for sending FileCap invites. The whole controller is rate-limited at 10 requests / minute.
{{baseURL}}/FileCap/api/inviteContent-Type: application/json
Modern JSON variant of the legacy invite.jsp flow. Accepts a list of invitees in a single call.
{
"apiKey": "HKADASD68768768ASDASDASDAD",
"deviceApiKey": "",
"sender": {
"emailAddress": "kees@example.com",
"name": "Kees Janssen"
},
"invitees": [
"piet@company.com",
"jan@partner.com"
],
"message": "Please upload the requested documents."
}
ApiResult<Void>.
{{baseURL}}/FileCap/api/invite/oldContent-Type: application/x-www-form-urlencoded
Direct call to the endpoint that invite.jsp forwards to. Returns plain text true / false|<ERROR_CODE>.
| Name | Type | Req. | Description |
|---|---|---|---|
APIKey | string | yes | FileCap server API key. |
deviceApiKey | string | no | Per-device API key. |
id | string | yes | Invite ID, must start with iiiii. |
senderEmail | string | yes | Inviter e-mail. |
receiverEmail | string | yes | Receiver e-mail. |
receiverMobileNr | string | no | Receiver mobile number. |
message | string | no | Optional free-form message. |
notify | boolean | no | When false, FileCap will not send a notification mail. |
Plain text true / false|<ERROR_CODE>.
{{baseURL}}/FileCap/api/invite/generate-idContent-Type: application/json
Pre-generate the invite ID used in the id field of the legacy invite call (the value starting with iiiii). Aliased path: /invite/generateInviteId.
{
"apiKey": "HKADASD68768768ASDASDASDAD",
"deviceApiKey": "",
"sender": {
"emailAddress": "kees@example.com"
}
}
ApiResult<String> — the generated invite ID.
Server settings used by clients and plugins: password policy, recipient verification options, branding, plugin settings.
{{baseURL}}/FileCap/api/settings/getPasswordRulesContent-Type: application/json
Detailed description of the password requirements.
{
"apiKey": "HKADASD68768768ASDASDASDAD",
"lang": "NL"
}
ApiResult<PasswordRules>:
{
"success": true,
"value": {
"enabled": true,
"title": "Password requirements",
"rules": [
{ "description": "At least 8 characters", "requirement": ".{8,}" },
{ "description": "At least one digit", "requirement": "(?=.*\\d)" }
]
}
}
UNEXPECTED_ERROR — Internal server error; check the server log.{{baseURL}}/FileCap/api/settings/password-rules?lang=NLPublic, unauthenticated GET version. Returns the same ApiResult<PasswordRules> body.
| Name | Type | Req. | Description |
|---|---|---|---|
lang | string | no | Locale code (e.g. NL, EN). |
{{baseURL}}/FileCap/api/settings/getPasswordPolicyContent-Type: application/json
Short summary of the password requirements: minimum length, character classes, expiration, reuse.
{
"apiKey": "HKADASD68768768ASDASDASDAD"
}
ApiResult<PasswordPolicy>.
UNEXPECTED_ERROR — Internal server error; check the server log.{{baseURL}}/FileCap/api/settings/outlook-windowsContent-Type: application/x-www-form-urlencoded
Endpoint that mailPluginSettings.jsp forwards to. Returns the plug-in configuration as XML.
| Name | Type | Req. | Description |
|---|---|---|---|
APIKey | string | yes | FileCap server API key. |
userAgent | string | no | Identifier of the calling client. |
version | string | no | Client version. |
lang | string | no | Locale code. |
XML document. Also exposed as a JSON variant on the same path (POST application/json) which returns HTTP 202 + ApiResult<OutlookClassicSettings>, or HTTP 401 when authentication fails.
{{baseURL}}/FileCap/api/settings/recipient-verification-optionsContent-Type: application/json
Lists the verification methods that can be applied to a transfer (e.g. NONE, EMAIL_ACCESS_CODE, SMS, PASSWORD) and which ones are mandatory by current policy.
{ "apiKey": "HKADASD68768768ASDASDASDAD" }
ApiResult<RecipientVerificationOptions>.
UNEXPECTED_ERROR — Internal server error; check the server log.{{baseURL}}/FileCap/api/settings/app-settingsContent-Type: application/json
Generic settings bundle for client apps: enabled features, max upload size, branding, supported languages, etc.
{
"apiKey": "HKADASD68768768ASDASDASDAD",
"lang": "NL"
}
ApiResult<AppSettings>.
UNEXPECTED_ERROR — Internal server error; check the server log.{{baseURL}}/FileCap/api/settings?lang=NLReturns ApiResult<WebPortalSettings> for the web portal (theme, locale options, feature flags). Allowed for portal types MAIN, SUB and FREE.
| Name | Type | Req. | Description |
|---|---|---|---|
lang | string | no | Locale code. |
{{baseURL}}/FileCap/api/settings/is-shared-access-code-availableContent-Type: application/json
Returns a raw boolean (true / false) — not wrapped in ApiResult — indicating whether a shared access code has been configured for the given transfer.
{ "transferId": "263478632784632748237513" }
Raw boolean: true or false. Returns false on any internal error.
Lightweight validators that mail plugins call before composing or sending a message. All endpoints under /api/validate return plain text (true / false|<ERROR_CODE>).
{{baseURL}}/FileCap/api/validate/fileContent-Type: application/x-www-form-urlencoded
Validate a single file by name + MIME against the policy engine. Path that checkFile.jsp forwards to.
| Name | Type | Req. | Description |
|---|---|---|---|
APIKey | string | yes | FileCap server API key. |
filename | string | yes | File name. |
sender | string | yes | Sender e-mail. |
mime | string | yes | MIME type. |
fileID | string | no | File identifier. |
Plain text true / false|<ERROR_CODE>.
{{baseURL}}/FileCap/api/validate/transferContent-Type: application/x-www-form-urlencoded
Path that checkTransfer.jsp forwards to.
| Name | Type | Req. | Description |
|---|---|---|---|
APIKey | string | yes | FileCap server API key. |
deviceApiKey | string | no | Per-device API key. |
id | string | yes | Transfer ID. |
email | string | no | Optional recipient e-mail. |
Plain text true / false|<ERROR_CODE>.
{{baseURL}}/FileCap/api/validate/domainContent-Type: application/x-www-form-urlencoded
Path that domainCheck.jsp forwards to. Validates the sender domain against the recipient domain.
| Name | Type | Req. | Description |
|---|---|---|---|
email | string | yes | Recipient e-mail. |
sender | string | yes | Sender e-mail. |
Plain text true / false|<ERROR_CODE>.
{{baseURL}}/FileCap/api/validate/email-may-sendContent-Type: text/plain
Returns a raw boolean for the question "is this sender allowed to send via FileCap?". The body is the bare e-mail address as text/plain.
Raw boolean: true / false.
Endpoints for the policy / DLP engine. Both endpoints require either DEVICE or API_KEY authentication and are rate-limited at 60 requests / minute.
{{baseURL}}/FileCap/api/business-rules/scan-attachmentContent-Type: multipart/form-data
Run a DLP / business-rules scan against a single attachment.
| Name | Type | Req. | Description |
|---|---|---|---|
APIKey | string | yes | FileCap server API key. |
file | file | yes | File part to scan. |
ApiResult<BusinessRulesScanResult> with the scan verdict and any policy violations.
{{baseURL}}/FileCap/api/business-rules/scan-textContent-Type: application/json
Run a DLP scan against arbitrary text.
{
"text": "Hello, this is the message body that needs to be scanned for sensitive data."
}
ApiResult<BusinessRulesScanResult>.
Sender-facing endpoints to inspect and revoke (block) a transfer that has already been sent. When a transfer is created, FileCap stores a hashed blockPassword together with the transfer and e-mails the SENDER a notification that contains a block link of the form:
https://<host>/FileCap/blockTransfer.jsp?id=<transferId>&blockId=<blockId>&email=<senderEmail>
The JSP sanitizes the parameters and redirects to the portal "block" page, which loads transfer metadata via GET /api/block/info and — on confirmation — calls POST /api/block to actually block the transfer. The blockId is the secret: anyone holding transferId + blockId + sender e-mail can block the transfer; no API key or session is required. Every validation failure (wrong blockId, wrong sender, unknown transferId) deliberately returns the same generic error PORTAL_BLOCK_TRANSFER_NOT_FOUND so the caller cannot tell which field was wrong.
Integrations that suppress FileCap's own notification mails (dontNotify=true on upload) must capture and forward the blockId to the sender themselves — without it the transfer cannot be blocked through the API.
{{baseURL}}/FileCap/api/block/info?transferId=...&blockId=...&emailAddress=...Return the metadata that the FileCap web UI shows on the block confirmation page: the TO recipients of the transfer, the file names and a flag that indicates whether the message body was encrypted. The call is read-only — it does not modify the transfer, send any mail or write to the audit log.
Validation order (every failure collapses to PORTAL_BLOCK_TRANSFER_NOT_FOUND unless noted):
blockId must match the stored blockPassword;emailAddress must be a known sender of the transfer;PORTAL_DOWNLOAD_TRANSFER_EXPIRED;PORTAL_BLOCK_TRANSFER_ALREADY_BLOCKED.| Name | Type | Req. | Description |
|---|---|---|---|
transferId | string | yes | The transfer's unique ID (the ids value supplied at upload time). Used to look up the transfer record. |
blockId | string | yes | The block secret embedded in the FileCap notification mail to the sender (URL parameter blockId of blockTransfer.jsp). The server hashes this value and compares it to the blockPassword stored on the transfer. |
emailAddress | string | yes | The e-mail address of the SENDER of the transfer. Validated against the transfer's sender record (SenderDb.isSender). Not the recipient's address. |
ApiResult<TransferBlockInfo> with three fields: recipients (array of e-mail addresses of the TO recipients), files (set of filenames inside the transfer, no path) and hasEncryptedMessage (true when the message body was encrypted at upload time). Example success body:
{
"success": true,
"value": {
"recipients": ["piet@company.com", "jan@partner.com"],
"files": ["contract.pdf", "appendix.docx"],
"hasEncryptedMessage": false
},
"errorMessage": null
}
{{baseURL}}/FileCap/api/blockContent-Type: application/json
Mark the transfer as blocked. After a successful call:
| Name | Type | Req. | Description |
|---|---|---|---|
transferId | string | yes | The transfer's unique ID (the ids value from the upload call). |
blockId | string | yes | The block secret from the sender notification mail. |
emailAddress | string | yes | The SENDER's e-mail address (validated against the transfer's sender record, not the recipient address). |
{
"transferId": "263478632784632748237513",
"blockId": "BLK-1234",
"emailAddress": "kees@example.com"
}
ApiResult<Void> — only success and errorMessage are populated. Possible error messages:
PORTAL_BLOCK_TRANSFER_NOT_FOUND — generic catch-all for missing parameters, unknown transfer, wrong blockId, wrong sender e-mail or any unexpected exception — deliberately ambiguous so the server does not leak which field was wrong.PORTAL_DOWNLOAD_TRANSFER_EXPIRED — the transfer has already expired (status DISABLED).PORTAL_BLOCK_TRANSFER_ALREADY_BLOCKED — the transfer was blocked previously.PORTAL_BLOCK_TRANSFER_ERROR — the database update failed.The call is idempotent: a second call with the same parameters returns PORTAL_BLOCK_TRANSFER_ALREADY_BLOCKED, the underlying state is not changed and no extra notification mail is sent. Side-effect ordering: the DB update happens before the notification mail is sent, so if the mail server is unreachable the transfer is still blocked and only the mail failure is logged.
Endpoints for registering an external device (a 3rd party system) with the FileCap server so it can call the API with its own per-device API key. The flow is: register → the server sends a verification code by mail → verify → caller receives a JWT / device token.
{{baseURL}}/FileCap/api/user/devices/registerContent-Type: application/json
Initiate device registration. The server e-mails a verification code to emailAddress.
{
"emailAddress": "kees@example.com",
"apiKey": "HKADASD68768768ASDASDASDAD",
"deviceName": "My integration server",
"lang": "NL"
}
ApiResult<Void>.
{{baseURL}}/FileCap/api/user/devices/verifyContent-Type: application/json
Exchange the e-mailed verification code for a JWT / device token.
{
"email": "kees@example.com",
"verificationCode": "123456"
}
ApiResult<String> — the issued token.