All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Brings the SDK in line with the current dosya.dev API. Several 0.2.1 methods did not work against the API at all; they are fixed here, some with new signatures.
- Java 11 is now required. The SDK uses the JDK's
java.net.httpclient:HttpURLConnectioncannot send PATCH, which several endpoints need, and cannot time out a stalled response body. Stay on 0.2.x for Java 8. - Default base URL is now
https://api.dosya.dev. The old default (https://dosya.dev) serves the website, so every call failed. files().unlock(id)andfolders().unlock(id)now take a password and returnUnlockGrant. The old calls always failed (400). Remove a lock withlock(id, LockMode.NONE).files().hide(id)(no mode, which un-hid the file) is removed; usehide(id, SetHideParams), which sendstargetsinstead of the ignoredtarget_ids.files().copy(...)returnsCopiedFile;newNamewas never honoured and the oldFileDetailresult was always empty.files().getShareLinks/createShareLink/createShareBundlereturnItemShareLink,CreatedShareLinkandCreatedShareBundle;ShareLinkDetailandShareBundleLinkare deprecated.folders().rename()called the restore endpoint; it now calls/rename.folders().delete()returns a trash-or-purgeDeleteFolderResult.folders().create():CreateFolderResponse.getFolder()returnsCreatedFolderandgetCreatedFolders()returnsList<CreatedFolderEntry>instead ofFolderDetail, matching the fields the API actually returns.download().getUrl(fileId)returnsDownloadLink(url, size, name, region, expiry) from/download-urlinstead of scraping a redirect. Storage errors areDosyaApiExceptionwith their real status.workspaces().list()returnsWorkspaceListResponse;create()returnsCreatedWorkspace;updateSettings()takesWorkspaceSettingsUpdate;delete(id)is replaced bydelete(id, code, confirmName);UpdateWorkspaceParams.defaultRegion()is removed (the region is fixed at creation).fileRequests().get()reads/:id/uploadsand returnsFileRequestWithActivity;update()uses PATCH;resend(id, recipientId)takes one recipient;listUploads()/listRecipients()return the real shapes.shares().list()rows areWorkspaceShareLink(linkId,sharedAt).- Search and activity pagination use
SearchPagination/ActivityPagination; activity entries exposeentityType/entityId;comments().list(ws)without a target is removed. - Removed
me().listApiKeys(),createApiKey(),deleteApiKey()and their models. Those endpoints require an interactive login and always returned 403 to an API key. - Retries: POST and PATCH are no longer retried on 5xx, timeouts or network errors (only on a 429 with
Retry-After); a 429 withoutRetry-Afteris not retried; trash, purge, restore and move are never retried. UploadParams.regionis deprecated and no longer sent.upload().resume()checks that the source size matches the session.
- Multipart uploads could corrupt their session when the first parts raced; the first part is now sent alone.
UploadParams.fromFileandfromStreamno longer read the whole file into memory; parts are read on demand.- A failed single-request upload is retried on a fresh session, and only after the server confirms the first attempt did not store the file.
completeis not repeated while an earlier attempt may still be finishing. - A JSON response whose body stalls after the headers now times out (
DosyaTimeoutException). files().list()trash and hidden filters were ignored.- Workspace settings with digits in their names (
require_2fa) were sent and read under the wrong key. - Flags the API returns as
0/1deserialize intobooleanfields. - Every id is encoded as a single path segment and
./..are rejected, so an id cannot select a different endpoint.
webhooks()(endpoint management, test, deliveries, redeliver) anddev.dosya.sdk.webhook.WebhookSignaturefor verifying deliveries.team(),roles(),regions(),favourites(),remoteDownloads()(withwaitFor).- Files:
getLock,getHide,batchDelete,duplicates; list gainsdir,unlockToken,groupId,folderand column sorts;movecan rename in the same call; share links acceptexpiresAt,accessMode,recipientEmails,maxDownloads. - Folders:
restore,purge,children,search,createBatch,getLock,getHide,hide, and folder share links. - Upload:
many,batch,uploadPart,complete;UploadSource(bytes, paths, streams);sha256/computeSha256,sourceModifiedAt/sourceCreatedAt,expectedVersion,concurrency. - Download:
downloadTo,raw,thumbnail,archive,archiveEntries,archiveEntry,ttland byte ranges. - Workspaces:
getSettings,uploadLimits,deletePreview,requestDeletion,transfer,leave. Shares:update,analytics,withMe. File requests:list,addRecipient,removeRecipient. Me:permissions,updateName,revokeCurrentKey. DosyaApiExceptionexposesgetCode(),getDetails(),getRetryAfterSeconds(),getMethod(),getPath(). NewDosyaTimeoutExceptionandDosyaWebhookSignatureException.- Options
uploadTimeout,readYourWrites(sendsX-D1-Bookmarkso a read right after a write is consistent) andhttpClient. LockMode,HiddenMode,ShareAccessModeenums.
0.2.1 - 2026-04-22
- Developer contact updated to Dosya.dev Team support@dosya.dev
- Added Support section to README with email and GitHub Issues links
0.2.0 - 2026-04-22
- SLF4J logging support (optional dependency)
@Nullable/@NotNullannotations on all public APIs (JetBrains annotations, provided scope)DosyaInterceptorinterface for request/response observability hooks- Separate
connectTimeoutandreadTimeoutconfiguration inDosyaClientOptions - Request ID propagation on
DosyaApiExceptionviagetRequestId() Automatic-Module-Name: dev.dosya.sdkin JAR manifest for JPMS compatibility- Binary compatibility checking via japicmp (configured, skipped until next release)
- Reproducible build configuration
- Comprehensive Javadoc on all public classes and methods
- Test suite with JUnit 5 and MockWebServer
- HTTPS is now enforced by default —
baseUrl()rejects non-HTTPS URLs unless explicitly opted out UploadStatusResponse.hasMultipart()replacesisHasMultipart()(naming fix)- Retry-After header now supports both delay-seconds and HTTP-date formats
CreateFileRequestParams.emails()now stores a defensive copy of the list
0.1.0 - 2025-04-01
- Initial release of Dosya Java SDK
- File operations: list, get, delete, restore, rename, move, copy, lock/unlock, hide, versions
- Folder operations: create, get, rename, delete, move, tree, lock/unlock
- Upload: single-part and resumable multipart with progress tracking
- Download: URL, bytes, and streaming with version support
- Share links and bundles with password and expiry options
- Workspace management with settings
- File requests with recipient management
- Search across files, folders, shares, and file requests
- Comments with threading support
- Activity log with filtering
- User profile and API key management
- Exponential backoff retry with jitter
- Rate limit handling with Retry-After support
- Configurable timeouts, retries, and debug logging