Core concepts
Jobs
A job represents a single transfer session: one QR code, one upload from the user’s device. Your backend creates a job via the SyncSnap API (using thesyncsnap server SDK). The API returns a job object with:
id— Use this to build the QR URL and to call the wait endpoint.projectId— Your SyncSnap project.status— One ofpending,in_progress,completed,failed.fileName— Set when the upload completes (if provided by the service).createdAt,updatedAt— Timestamps.
Upload URL (QR code target)
The URL encoded in the QR code tells the user’s phone where to upload. SyncSnap’s upload page lives at a host likehttps://upload.syncsnap.xyz/. The only required query parameter is the job ID:
- Default:
https://upload.syncsnap.xyz/?job_id=<jobId> - Custom base: You can pass a different
baseUrl(e.g. for staging or a custom domain) intocreateUploadUrl(jobId, { baseUrl })in@syncsnap/react.
SyncsnapQrCode uses createUploadUrl internally. If you build your own QR UI, use createUploadUrl so the URL stays correct.
Wait for completion
The web app does not get a push when the upload finishes. It calls a wait endpoint (e.g.GET /api/syncsnap/job/:id/wait) once. Your backend then polls the SyncSnap API until the job is completed or failed, and returns the final job plus a result (e.g. presigned download URL or a custom payload from your server’s onCompleted callback). The useSyncsnapJob hook calls this wait endpoint and passes the result to your onCompleted(job, result).
Download URL
After a job iscompleted, your backend can get a presigned download URL from the SyncSnap API. In the default flow, the wait handler does this and returns it (or your custom payload) as result. You can also expose GET /api/syncsnap/job/:id/download so the client can request a fresh URL later. The URL is time-limited; you can pass an expiration in minutes. The syncsnap server SDK’s getDownloadUrl and the Next.js download handler support this.
Summary
- Job = one transfer; create one per QR code.
- Upload URL = SyncSnap host +
?job_id=<jobId>(usecreateUploadUrl). - Wait = client calls one wait endpoint; server polls until done and returns job + result.
- Download URL = backend gets a presigned URL from SyncSnap; returned to the client via the wait result or the download endpoint.