Paperless pages
QRalto can turn one Dynamic QR into a hosted mobile menu, salon service list, product-information page, brochure, or memory collection. The printed QR stays the same while an authorized workspace editor updates the content.
Secure upload-first workflow
- Upload each file with
POST /api/v1/qr-assetsasmultipart/form-datausing the field namefile. - Copy the returned asset
idvalues into the payload'sassetIdsarray. - Create the Dynamic QR with
POST /api/v1/qr-codes.
Unattached uploads are private and are removed automatically after 24 hours. An asset can be attached only inside its workspace and to one QR. Files cannot be fetched from the public asset route until they are attached to an active QR with a current subscription. Responses are non-cacheable so the next request rechecks deactivation and expiry.
curl --request POST "https://api.qralto.com/api/v1/qr-assets" \
--header "X-Api-Key: $QRALTO_API_KEY" \
--form "file=@menu.pdf;type=application/pdf"
Accepted formats are genuine PNG/JPG images and passive PDFs. QRalto verifies file signatures, dimensions, byte limits, declared MIME type, and rejects PDFs containing scripts, launch actions, forms, encryption, rich media, or embedded files. Public PDFs are forced to download and all responses use nosniff and a restrictive content-security policy.
The default workspace allowance is 512 MB of active hosted assets, with a separate 50 MB allowance for uploads that have not yet been attached to a QR. These server-side limits are configurable through Uploads:MaxTenantBytes and Uploads:MaxUnclaimedBytes; callers must still obey the smaller per-file and per-experience limits.
Restaurant or salon menu
Use MenuModern, MenuWarm, or SalonLuxe. A menu requires at least one asset and supports up to eight.
{
"name": "Olive & Ember menu",
"mode": "Dynamic",
"payloadType": "Menu",
"content": "{\"businessName\":\"Olive & Ember\",\"title\":\"Dinner menu\",\"description\":\"Seasonal dishes and chef specials.\",\"phone\":\"+971501234567\",\"website\":\"https://example.com\",\"assetIds\":[\"ASSET_UUID\"]}",
"style": {
"templateCode": "MenuModern",
"experienceTemplateCode": "MenuModern",
"experienceFontFamily": "Modern",
"experiencePrimaryColor": "#173B35",
"experienceAccentColor": "#3B7A6D",
"experienceSurfaceColor": "#FFFDF7"
}
}
Product or information page
Use DocumentClean or ProductStory. Provide full details, up to four assets, or both.
{"title":"Product care","summary":"Keep it looking its best.","details":"Cleaning and storage instructions.","ctaLabel":"View product","ctaUrl":"https://example.com/product","assetIds":["ASSET_UUID"]}
Memory collection
Use MemoryGallery or MemoryJournal. Memory collections accept up to twelve images and never accept PDF files.
{"title":"Our favourite moments","story":"A small collection from a wonderful year.","dateLabel":"Summer 2026","location":"Dubai, UAE","assetIds":["IMAGE_ASSET_UUID"]}
Shared, not private
Anyone who receives or photographs a QR can open its published page while the campaign and subscription are active. Do not publish credentials, payment data, identity documents, medical records, or confidential/intimate material.
Page styling
Hosted page typography accepts Modern, Editorial, Elegant, Rounded, or Classic. Primary text, accent, and surface colours must be six-digit hex values and pass server-side 4.5:1 contrast validation. QR geometry has its own independent contrast, quiet-zone, error-correction, and logo checks.