SSP File Upload API
This guide is for SSP (Studio School Pro) developers who want to automatically upload export files to Simply360 for synchronization.
📚 Related: SSP Integration Setup (admin configuration) | SSP File Column Reference (supported files and columns)
Overview
You can automate data syncs from SSP to Simply360 by uploading Excel export files to our API endpoint. This replaces the manual upload process in the Simply360 admin UI.
Step 1: Get Your API Key
- Log into Simply360: https://app.simply360.com
- Navigate to: Team Settings → Integrations → Studio School Pro → API Keys
- Click "Create API Key"
- Give it a name (e.g., "SSP Nightly Sync")
- IMPORTANT: Copy the API key immediately! It's only shown once.
- The key looks like:
s360_aBcDeFgHiJkLmNoPqRsTuVwXyZ...
- The key looks like:
Store this key securely. Treat it like a password.
Step 2: API Endpoints
| Environment | Base URL |
|---|---|
| Development (Testing) | https://api-dev.simply360.app |
| Production (Live Data) | https://api.simply360.app |
Upload endpoint path: /public/integration/ssp-sync/upload
Status endpoint path: /public/integration/ssp-sync/status/{syncId}
⚠️ Always test in Development first before sending data to Production.
Step 3: Upload Files
Basic Upload (curl example)
# Single file upload
curl -X POST "https://api-dev.simply360.app/public/integration/ssp-sync/upload" \
-H "Authorization: Bearer YOUR_API_KEY_HERE" \
-F "files=@/path/to/Classes.xlsx"
# Multiple files at once
curl -X POST "https://api-dev.simply360.app/public/integration/ssp-sync/upload" \
-H "Authorization: Bearer YOUR_API_KEY_HERE" \
-F "files=@/path/to/Classes.xlsx" \
-F "files=@/path/to/Faculty.xlsx" \
-F "files=@/path/to/Individuals.xlsx" \
-F "files=@/path/to/Contacts.xlsx"
Dry Run (Preview Mode)
To preview what changes would be made WITHOUT actually saving anything:
curl -X POST "https://api-dev.simply360.app/public/integration/ssp-sync/upload?dryRun=true" \
-H "Authorization: Bearer YOUR_API_KEY_HERE" \
-F "files=@/path/to/Classes.xlsx"
Webhook Callback (Optional)
To receive a webhook when processing completes, include the X-Callback-Url header:
curl -X POST "https://api-dev.simply360.app/public/integration/ssp-sync/upload" \
-H "Authorization: Bearer YOUR_API_KEY_HERE" \
-H "X-Callback-Url: https://your-server.com/webhook/ssp-sync" \
-F "files=@/path/to/Classes.xlsx"
Step 4: Supported Files
Upload these Excel files exported from SSP:
| File | Description |
|---|---|
| Classes.xlsx | Class/Activity registration options |
| Faculty.xlsx | Faculty members |
| Individuals.xlsx | People (students, parents) |
| Contacts.xlsx | Participation accounts (households) |
| TermYear.xlsx | School terms |
| Department.xlsx | Faculty departments |
| Category.xlsx | Activity tags/categories |
| Discipline.xlsx | Discipline/instrument lookup values |
| PayPlan.xlsx | Payment plans |
| PayPlanDates.xlsx | Payment plan due dates |
| Ethnicity.xlsx | Ethnicity reference data |
| Setup.xlsx | School configuration settings |
You can upload any combination of files in a single request (max 20 files, 10 MB per file).
Step 5: Understanding the Response
Success Response (202 Accepted)
{
"syncId": "AAAA-BBBB-CCCC",
"status": "accepted",
"message": "Files received. Processing will begin shortly.",
"statusUrl": "https://api-dev.simply360.app/public/integration/ssp-sync/status/AAAA-BBBB-CCCC",
"filesReceived": ["Classes.xlsx", "Individuals.xlsx"]
}
The sync processes asynchronously. You'll receive:
- Email notification when complete (if configured)
- Webhook callback to your URL (if provided via
X-Callback-Urlheader)
Check Sync Status
curl "https://api-dev.simply360.app/public/integration/ssp-sync/status/AAAA-BBBB-CCCC" \
-H "Authorization: Bearer YOUR_API_KEY_HERE"
Error Responses
// 401 Unauthorized - Invalid or missing API key
{
"error": "UNAUTHORIZED",
"message": "Invalid or expired API key"
}
// 400 Bad Request - No files uploaded
{
"error": "NO_FILES",
"message": "No files uploaded. Include files using multipart/form-data with field name \"files\""
}
// 400 Bad Request - File too large
{
"error": "FILE_TOO_LARGE",
"message": "File size exceeds 10 MB limit"
}
Automation Examples
Windows Batch Script
@echo off
set API_KEY=s360_your_key_here
set API_URL=https://api.simply360.app/public/integration/ssp-sync/upload
set EXPORT_DIR=C:\SSP\Exports
curl -X POST "%API_URL%" ^
-H "Authorization: Bearer %API_KEY%" ^
-F "files=@%EXPORT_DIR%\Classes.xlsx" ^
-F "files=@%EXPORT_DIR%\Individuals.xlsx" ^
-F "files=@%EXPORT_DIR%\Contacts.xlsx"
PowerShell Script
$ApiKey = "s360_your_key_here"
$ApiUrl = "https://api.simply360.app/public/integration/ssp-sync/upload"
$ExportDir = "C:\SSP\Exports"
$files = @(
"$ExportDir\Classes.xlsx",
"$ExportDir\Individuals.xlsx",
"$ExportDir\Contacts.xlsx"
)
$form = @{}
foreach ($file in $files) {
$form["files"] = Get-Item $file
}
Invoke-RestMethod -Uri $ApiUrl -Method Post -Headers @{
"Authorization" = "Bearer $ApiKey"
} -Form $form
Bash Script (Linux/Mac)
#!/bin/bash
API_KEY="s360_your_key_here"
API_URL="https://api.simply360.app/public/integration/ssp-sync/upload"
EXPORT_DIR="/path/to/ssp/exports"
curl -X POST "$API_URL" \
-H "Authorization: Bearer $API_KEY" \
-F "files=@$EXPORT_DIR/Classes.xlsx" \
-F "files=@$EXPORT_DIR/Individuals.xlsx" \
-F "files=@$EXPORT_DIR/Contacts.xlsx"
FileMaker Server Automation
If you're running the export from FileMaker Server, here's how to set up automated nightly syncs.
Recommended Workflow
- FM Server scheduled script runs at a set time (e.g., 2:00 AM) → exports Excel files to a known directory
- Post-export shell script runs after the FM export → uploads files to our API
- Simply360 processes asynchronously → optional webhook callback on completion
FileMaker Server Post-Export Script
Create a script that FM Server runs after the export completes:
macOS/Linux (FM Server on Mac):
#!/bin/bash
# ssp-upload.sh — Upload SSP exports to Simply360
# Place this at a known path on the FM Server machine
# Call from FM Server after export script completes
API_KEY="s360_your_key_here"
API_URL="https://api.simply360.app/public/integration/ssp-sync/upload"
EXPORT_DIR="/path/to/fm-server/exports"
LOG_FILE="/var/log/ssp-sync.log"
echo "$(date): Starting SSP sync upload..." >> "$LOG_FILE"
# Build curl command with all xlsx files in export directory
CMD="curl -s -X POST $API_URL -H \"Authorization: Bearer $API_KEY\""
for f in "$EXPORT_DIR"/*.xlsx; do
if [ -f "$f" ]; then
CMD="$CMD -F \"files=@$f\""
echo "$(date): Including file: $(basename $f)" >> "$LOG_FILE"
fi
done
# Execute upload
RESPONSE=$(eval $CMD)
echo "$(date): Response: $RESPONSE" >> "$LOG_FILE"
echo "$(date): SSP sync upload complete." >> "$LOG_FILE"
Windows (FM Server on Windows):
@echo off
REM ssp-upload.bat — Upload SSP exports to Simply360
REM Place in a known path on the FM Server machine
set API_KEY=s360_your_key_here
set API_URL=https://api.simply360.app/public/integration/ssp-sync/upload
set EXPORT_DIR=C:\FMServer\Data\SSPExports
echo %DATE% %TIME%: Starting SSP sync upload... >> C:\Logs\ssp-sync.log
curl -s -X POST "%API_URL%" ^
-H "Authorization: Bearer %API_KEY%" ^
-F "files=@%EXPORT_DIR%\Classes.xlsx" ^
-F "files=@%EXPORT_DIR%\Faculty.xlsx" ^
-F "files=@%EXPORT_DIR%\TermYear.xlsx" ^
-F "files=@%EXPORT_DIR%\Department.xlsx" ^
-F "files=@%EXPORT_DIR%\Category.xlsx" ^
-F "files=@%EXPORT_DIR%\Discipline.xlsx" ^
-F "files=@%EXPORT_DIR%\PayPlan.xlsx" ^
-F "files=@%EXPORT_DIR%\PayPlanDates.xlsx" ^
-F "files=@%EXPORT_DIR%\Contacts.xlsx" ^
-F "files=@%EXPORT_DIR%\Individuals.xlsx" ^
-F "files=@%EXPORT_DIR%\Ethnicity.xlsx" ^
>> C:\Logs\ssp-sync.log 2>&1
echo %DATE% %TIME%: Upload complete. >> C:\Logs\ssp-sync.log
Notes for FM Server Setup
- Excel format is preferred — SSP fields may contain CR/LF characters that break CSV
- Export all files at once — Upload all files in a single API call for atomicity
- Max 20 files / 10 MB each — Well within SSP export limits
- API key security — Store the API key securely; it should not be version-controlled
- curl requirement — Ensure
curlis installed on the FM Server machine (included on macOS; Windows 10+ includes it)
Calling from FileMaker
You can invoke the post-export script from a FileMaker script step using:
- macOS:
Perform Script on Server→Execute Shell Script→/path/to/ssp-upload.sh - Windows:
Perform Script on Server→Execute Batch File→C:\path\to\ssp-upload.bat
Or use FM's "Send Event" script step to trigger the shell command after the export.
FileMaker Native Upload (Using Insert from URL)
You can also call the API directly from a FileMaker script:
Set Variable [ $apiKey ; Value: "your_api_key_here" ]
Set Variable [ $baseUrl ; Value: "https://api.simply360.app/public/integration/ssp-sync" ]
# Export files to temporary location
Export Records [ File: "Classes.xlsx" ; Format: Excel ]
Export Records [ File: "Contacts.xlsx" ; Format: Excel ]
# Upload using Insert from URL with cURL options
Set Variable [ $curlOptions ; Value:
"-X POST " &
"-H 'Authorization: Bearer " & $apiKey & "' " &
"-F 'files=@Classes.xlsx' " &
"-F 'files=@Contacts.xlsx'"
]
Insert from URL [ $response ; $baseUrl & "/upload" ; cURL options: $curlOptions ]
# Parse response for syncId
Set Variable [ $syncId ; Value: JSONGetElement ( $response ; "syncId" ) ]
# Poll for completion (loop until status = completed or failed)
Loop
Pause/Resume Script [ Duration: 30 ]
Insert from URL [ $statusResponse ; $baseUrl & "/status/" & $syncId ]
Exit Loop If [ JSONGetElement ( $statusResponse ; "status" ) ≠ "processing" ]
End Loop
# Log results
Set Field [ SyncLog::Results ; $statusResponse ]
Testing Checklist
Development Testing
- Create API key in dev environment
- Export a small set of test files from SSP
- Run upload with
dryRun=trueto preview changes - Run actual upload and verify data in Simply360 dev
- Check sync history in Simply360 UI
Production Go-Live
- Create new API key in production environment
- Update script to use production URL
- Run first sync with
dryRun=true - Review preview results
- Run actual sync
- Set up scheduled task for nightly syncs (optional)
Rate Limits
| Limit | Value |
|---|---|
| Max file size | 10 MB per file |
| Max files per request | 20 files |
| Requests per minute | 10 |
| Concurrent sync jobs | 1 per team |
Troubleshooting
| Issue | Solution |
|---|---|
| "Invalid API key" | Check key is correct, not expired, and for the right environment |
| "File format not supported" | Only .xlsx files are accepted |
| No data imported | Check field mappings in Simply360 Admin → Integrations |
| Partial sync | Check Simply360 sync history for error details |
Security Notes
- API keys are environment-specific (dev key won't work on prod)
- Keys can be revoked instantly if compromised
- All uploads are logged with IP address and timestamp
- Optional: Configure IP allowlist for additional security
Support
- Simply360 Support: support@simply360.com
- View Sync History: Simply360 → Admin → Integrations → SSP → History
- Include your sync ID and API key prefix (first 8 characters) in support requests