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

  1. Log into Simply360: https://app.simply360.com
  2. Navigate to: Team Settings → Integrations → Studio School Pro → API Keys
  3. Click "Create API Key"
  4. Give it a name (e.g., "SSP Nightly Sync")
  5. IMPORTANT: Copy the API key immediately! It's only shown once.
    • The key looks like: s360_aBcDeFgHiJkLmNoPqRsTuVwXyZ...

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-Url header)

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

  1. FM Server scheduled script runs at a set time (e.g., 2:00 AM) → exports Excel files to a known directory
  2. Post-export shell script runs after the FM export → uploads files to our API
  3. 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 curl is 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 ServerExecute Shell Script/path/to/ssp-upload.sh
  • Windows: Perform Script on ServerExecute Batch FileC:\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

  1. Create API key in dev environment
  2. Export a small set of test files from SSP
  3. Run upload with dryRun=true to preview changes
  4. Run actual upload and verify data in Simply360 dev
  5. Check sync history in Simply360 UI

Production Go-Live

  1. Create new API key in production environment
  2. Update script to use production URL
  3. Run first sync with dryRun=true
  4. Review preview results
  5. Run actual sync
  6. 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

Still need help? Contact Us Contact Us