Skip to content

Portals

A MASV Portal is a brandable file transfer web page hosted by MASV with a custom URL. End users can visit the page to upload files to MASV. After the sender has uploaded files, MASV notifies the specified email addresses associated with the Portal.

Each Portal can override the default number of days that MASV stores an uploaded package with the custom_expiry_days property. Setting it to -1 specifies storage for an indefinite period if the Team’s plan allows it.

Extended Storage charges will be incurred beyond the free period included with the Team’s plan. For details, see How does Extended Storage Work and Pricing.

A Portal’s access level can be regular or private. By default, all Portals are regular.

Packages received via a regular Portal can be viewed by all Team members, while packages uploaded to private Portals are accessible only for the Team members included in the Portal’s access list.

MethodRoute
POST/v1/teams/{team_id}/portals
NameTypeRequiredDescription
X-API-KEYStringYesAPI key
Content-TypeStringYesMust be application/json
NameTypeRequiredDescription
team_idStringYesThe Team ID to bind the Portal to
NameTypeRequiredDescription
nameStringYesName of the Portal
subdomainStringYesSubdomain of the Portal
messageStringNoMessage displayed on the Portal upload page
has_access_codeBooleanNoEnable/disable access code
access_codeStringNoAccess code for the Portal page
activeBooleanNoEnable/disable Portal page. Default: false
recipientsString[]NoEmail(s) that will receive notifications
has_download_passwordBooleanNoEnable/disable download password. Default: false
download_passwordStringNoPassword to protect download access
custom_expiry_daysIntegerNoStorage days for packages. Range: -1 to 65535
cloud_connectionsObject[]NoCloud connections attached to the Portal. See Cloud Connections
custom_webhooksObject[]NoCustom webhooks attached to the Portal. See Webhooks
tagObjectNoTag object for the Portal. See Tags
access_levelStringNoregular or private. Default: regular
teamspace_idStringNoID of the Teamspace to bind the Portal to
terms_of_service_enabledBooleanNoEnable/disable Terms of Service checkbox
terms_of_serviceObjectNoCustom terms of service object
package_size_restriction_enabledBooleanNoEnable/disable package size restrictions
max_package_sizeIntegerNoMaximum package size in bytes
max_file_sizeIntegerNoMaximum individual file size in bytes
max_file_countIntegerNoMaximum number of files
file_type_restriction_enabledBooleanNoEnable/disable file type restrictions
file_typesString[]NoAllowed file extensions (e.g., ".mov", ".mp4")
expiry_enabledBooleanNoEnable/disable Portal expiry
expiryStringNoPortal expiry date-time. Format: ISO 8601
Terminal window
curl -d '{"name": "$NAME", "subdomain": "$SUBDOMAIN", "recipients": ["$R1_EMAIL"], "has_access_code": false, "active": true}' \
-H "X-API-KEY: $API_KEY" \
-H "Content-Type: application/json" \
-X POST https://api.massive.app/v1/teams/$TEAM_ID/portals

Returns 201 Created with the full Portal object.

MethodRoute
PUT/v1/portals/{portal_id}
NameTypeRequiredDescription
X-API-KEYStringYesAPI key
Content-TypeStringYesMust be application/json

Same fields as creating a Portal. When updating, provide the full Portal object. A typical workflow: Get Portal → Modify Fields → Update Portal.

Terminal window
curl -d '{"name": "$NAME", "subdomain": "$SUBDOMAIN", "active": true, "has_access_code": false}' \
-H "X-API-KEY: $API_KEY" \
-H "Content-Type: application/json" \
-X PUT https://api.massive.app/v1/portals/$PORTAL_ID

Returns 200 OK with the updated Portal object.

MethodRoute
GET/v1/portals/{portal_id}
NameTypeRequiredDescription
X-API-KEYStringYesAPI key
Terminal window
curl -H "X-API-KEY: $API_KEY" \
-X GET https://api.massive.app/v1/portals/$PORTAL_ID

Returns 200 OK with the Portal object.

MethodRoute
GET/v1.1/teams/{team_id}/portals
NameTypeRequiredDescription
X-API-KEYStringYesAPI key
Content-TypeStringYesMust be application/json
NameTypeRequiredDescription
pageIntegerNoPage number. Default: 1
limitIntegerNoRecords per page, 1–50. Default: 50
sortStringNoSort ascending (fieldname) or descending (-fieldname). Accepted: name, created_at, active
nameStringNoSubstring match on Portal name
subdomainStringNoSubstring match on Portal subdomain
tagsStringNoComma-separated tag IDs
teamspacesStringNoComma-separated Teamspace IDs
Terminal window
curl -H "X-API-KEY: $API_KEY" \
-X GET "https://api.massive.app/v1.1/teams/$TEAM_ID/portals?page=1&limit=10"

Returns 200 OK with metadata.total and records array.

MethodRoute
GET/v1.1/portals/{portal_id}/packages
NameTypeRequiredDescription
X-API-KEYStringYesAPI key
Content-TypeStringYesMust be application/json
NameTypeRequiredDescription
pageIntegerNoPage number. Default: 1
limitIntegerNoRecords per page, 1–50. Default: 50
sortStringNoSort ascending or descending
tagsStringNoComma-separated tag IDs
senderStringNoFilter by sender email
created_at_startStringNoCreated after date (ISO 8601)
created_at_endStringNoCreated before date (ISO 8601)
expiry_startStringNoExpires after date
expiry_endStringNoExpires before date
extra_storageBooleanNoFilter by extra storage usage
Terminal window
curl -H "X-API-KEY: $API_KEY" \
-X GET "https://api.massive.app/v1.1/portals/$PORTAL_ID/packages?page=1&limit=3"

Returns 200 OK with metadata.total and records array of package objects.