Prerequisites
- β LMA (License Management App) access to the target Salesforce org
- β System Administrator or equivalent setup access in the org via LMA login
Demo Steps
Confirm the symptom
Reproduce the upload failure. Navigate to Image Library (e.g. Channel > Templates > Image Library, or a Service > Content tab > Upload Image). Select a valid PNG, JPEG, or GIF file under 20 MB. Note that the UI shows a generic 'Error' message with no further detail.
Upload fails with a generic 'Error' toast. The file type and size meet platform restrictions.
- π¬ This affects Image Library uploads across Templates, Services Content tab, and other Image Library entry points
- π¬ The error message gives no detail β the failure happens during the browser POST to AWS S3
Confirm root cause (optional)
Open browser DevTools > Network tab and retry the upload. Look for a POST to kaptiotravel.s3.amazonaws.com. A 403 response confirms an S3 credentials or policy issue.
Network tab shows a failed POST to S3 with HTTP 403 (or similar non-2xx response).
- π¬ The browser uploads directly to S3 using signed credentials from the org's Protected Endpoint configuration
- π¬ When credentials are missing or invalid, the upload fails silently in the UI
Log in via LMA
Open the License Management App (LMA) and log in to the affected org as a user with setup access. Protected Endpoint is a managed-package protected custom setting β it can only be written when logged in via LMA or from managed-package code.
You are logged into the target org with sufficient privileges to edit Custom Settings.
- π¬ Direct org login without LMA cannot edit Protected Endpoint records
- π¬ This is why SIT may work but a refreshed PreProd sandbox does not β the S3 record was never re-seeded
Configure the S3 Protected Endpoint
In Setup (Lightning), navigate to Custom Settings > Protected Endpoint. Check whether an S3 record exists. If missing, create one. If present but empty, populate the AccessKey and SecretKey fields with the correct S3 credentials. Contact the Kaptio platform team if you do not have the credential values β do not copy credentials from Jira tickets or Slack threads.
An S3 Protected Endpoint record exists with valid AccessKey and SecretKey values.
- π¬ Compare against a working environment (e.g. SIT) to confirm the record exists and is populated
- π¬ Never document or share credential values in enablement content, tickets, or Slack
Verify the fix
Return to Image Library and upload a test image. Confirm the upload completes without error and the image appears in the library.
Image uploads successfully. The new image is visible in Image Library and can be assigned to content or templates.
- π¬ Also verify uploads from the Service Content tab if that was the original report path
- π¬ If upload still fails, check the org's Kaptio package version β Hawaii 22.12.10+ includes S3 upload fixes (CEE-537 / KHELP-12434)
Success Criteria
- β S3 Protected Endpoint record exists and is populated in the affected org
- β Image Library upload completes without the generic 'Error' message
- β Uploaded image is visible in Image Library and usable in templates or content
Troubleshooting
Overview
When users upload images via Image Library β from Channel Templates, Service Content tabs, or the content editor β a generic βErrorβ message with no explanation usually means the S3 Protected Endpoint is missing or misconfigured in that Salesforce org.
This is an internal reference for implementation and support teams. It is not customer-facing documentation.
Where This Appears
| Entry Point | Path |
|---|---|
| Templates Image Library | Channel > Templates > Image Library > Upload Image |
| Service Content | Service record > Content tab > Upload Image |
| Content Editor | Image Library while editing a content record |
All paths use the same S3 upload mechanism.
Why It Happens
Image uploads in Kaptio work by having the browser POST directly to AWS S3 (kaptiotravel.s3.amazonaws.com) using signed credentials stored in the orgβs Protected Endpoint custom setting (ProtectedEndpoint__c).
When the S3 record is missing or has empty/invalid credentials:
- The platform cannot generate valid signed upload URLs
- The browser POST to S3 fails (typically HTTP 403)
- The UI shows a generic βErrorβ with no detail
This is especially common after sandbox refresh or clone. Protected Endpoint values are not copied during refresh, so an org that worked in SIT may fail in a freshly refreshed PreProd.
Who Fixes It
A Kaptio team member with LMA access to the affected org. Customer users cannot fix this themselves β Protected Endpoint is a managed-package protected setting.
Fix Procedure
Step 1: Log in via LMA
Open the License Management App and log in to the affected org.
Step 2: Navigate to Protected Endpoint
Setup (Lightning) > Custom Settings > Protected Endpoint > Manage
Step 3: Configure the S3 record
- If no S3 record exists, create one
- Populate AccessKey and SecretKey with the correct S3 credentials
- Obtain credential values from the Kaptio platform team β do not copy from Jira comments or Slack history
Step 4: Verify
Upload a test image via Image Library. Confirm it completes without error.
Alternative: Endpoint Seeding via Code
If LMA access is not available, a developer with managed-package context can trigger endpoint creation:
// Trigger default endpoint seeding (includes S3)
KaptioTravel.ServiceCall.execute('PostInstallClass.doInstall', new Map<String, Object>{
'fromVersion' => new Map<String, Integer>{'major' => 1, 'minor' => 0, 'patch' => 0},
'toVersion' => new Map<String, Integer>{'major' => 1, 'minor' => 0, 'patch' => 1},
'notificationTo' => new List<String>{'your-email@example.com'},
'throwException' => false
});
This creates all default Protected Endpoint records, not just S3. Use when multiple endpoints are missing after a fresh install or sandbox refresh.
Post-Sandbox Refresh Checklist
After any sandbox refresh or clone, verify:
- Protected Endpoint > S3 record exists and is populated
- Image Library upload succeeds (test with a small PNG)
- Kaptio package version matches the target environment (Hawaii 22.12.10+ recommended)
Known Incidents
| Date | Customer / Org | Resolution |
|---|---|---|
| Nov 2025 | Belmond SIT | S3 Protected Endpoint configured via LMA (ST-2279) |
| Jul 2026 | Belmond PreProd | Same fix β S3 record missing after sandbox refresh |