Dazr Files API: dokumentation för utvecklare
Läs filer från Dazr Files i din egen programvara, till exempel för säkerhetskopiering: ett REST API med ändringsflöde och WebDAV för verktyg för säkerhetskopiering. Endast läsning.
- Snabbstart
- Organisationsåtkomst
- En persons egna filer
- Referens
- Inkrementella säkerhetskopior
- Fel och gränser
- WebDAV
Snabbstart
- Registrera din app och aktivera Dazr Files API. Registrera din app, eller använd en du redan har, i Dazr Identity-konsolen: samma ställe som för Logga in med Dazr Identity och Dazr Sign API, med samma klient-id och hemlighet. Välj Aktivera Dazr Files API på appens sida. För obevakade säkerhetskopior måste det vara en webbserverapp (med en klienthemlighet).
- Bli godkänd. Ge organisationen ditt klient-id. En ägare eller administratör öppnar Dazr Identity → Organisationer → organisationen → Anslutna appar för Files, anger klient-id:t och väljer vad din app får läsa: alla delade filer eller valda mappar med allt i dem. De kan också begränsa appen till angivna nät (IP-intervall).
- Hämta en token. Din server ber om en token med
grant_type=client_credentials, organisationensidsomorgoch ditt klient-id och din hemlighet (HTTP Basic eller formulärets body). Bara appar med en klienthemlighet kan göra det. - Anropa API:t. Skicka åtkomsttoken som
Authorization: Bearer. Den gäller i 10 minuter och det finns ingen refresh-token: be om en ny när den går ut.
curl -u "$DAZR_CLIENT_ID:$DAZR_CLIENT_SECRET" https://identity.dazr.eu/oauth/token \
-d grant_type=client_credentials -d scope=files.read -d org=org_3k9x2m0q8w1v5t7a
{ "access_token": "eyJhbGciOiJFUzI1NiIs...", "token_type": "Bearer", "expires_in": 600, "scope": "files.read" }
curl -H "Authorization: Bearer $TOKEN" https://suite.dazr.eu/api/files/v1/spaces
Organisationsåtkomst för säkerhetskopior
Det finns två vägar in. En ägare eller administratör i en organisation godkänner din app för organisationens delade filer, och din server får då token utan en person (bäst för obevakade säkerhetskopior). Eller så tillåter en person din app med scopet files.read, och appen läser personens egna filer.
En organisation som inte har godkänt din app, en som har återkallat den och en som inte finns svarar alla invalid_grant. Administratörerna ser när appen senast användes och varje fil den har laddat ned, och kan när som helst ändra dess mappar eller återkalla den. Ett återkallat godkännande slutar gälla vid nästa begäran: redan utfärdade token slutar fungera direkt, och det gör även nedladdningslänkar som redan lämnats ut. Medlemmarnas egna filer ingår aldrig i en organisations godkännande.
| Parameter | Betydelse |
|---|---|
grant_type | client_credentials |
org | Organisationens id, som administratörerna ser under Anslutna appar för Files. |
scope | files.read (standard och det enda scopet). |
| Client authentication | Ditt klient-id och din nuvarande klienthemlighet, med HTTP Basic (client_secret_basic) eller i formulärets body (client_secret_post). En tidigare hemlighet som finns kvar efter en överlåtelse godtas inte. |
En persons egna filer
Be om openid files.read (och offline_access för en refresh-token) i det vanliga authorization code-flödet med PKCE. Personen ser på samtyckesskärmen att din app får se och ladda ned personens filer. Token når personens egna filer, och en organisations delade filer bara när organisationen också har godkänt din app och personen är en medlem som får öppna dem, med samma mappar. När personen tar bort din app under Anslutna appar slutar dess token att fungera.
Referens
Bas-URL https://suite.dazr.eu/api/files/v1. Alla endpoints är GET (och HEAD); alla andra metoder svarar 405. Fel är JSON: { "error": { "code", "message" } }. Listor tar limit (1 till 1000, standard 200) och returnerar next_cursor så länge det finns mer.
| Förfrågan | Vad den returnerar |
|---|---|
GET /spaces | De utrymmen din token når: me för en persons egna filer och organisationer efter deras id. |
GET /spaces/{space} | Ett utrymme. |
GET /spaces/{space}/folders/root/children | Mapparna och sedan filerna överst i det som din token når. Använd en mapps id i stället för root för en mapp. |
GET /spaces/{space}/folders/{id} | En mapp. |
GET /spaces/{space}/files/{id} | En fil: name, path, parent_id, size, mime, version, etag, created_at, modified_at och trashed_at. |
GET /spaces/{space}/files/{id}/versions | De sparade versionerna av en fil, nyast först. |
GET /spaces/{space}/files/{id}/content | En omdirigering (302) till en nedladdningslänk på files.dazr.eu som fungerar i 5 minuter och stöder byteintervall. Lägg till version= för en tidigare version, eller redirect=false för att få länken som JSON. |
GET /spaces/{space}/trash | Filer i papperskorgen, som metadata. De kan inte laddas ned förrän någon återställer dem. |
GET /spaces/{space}/changes | Vad som har ändrats sedan en cursor, för inkrementella säkerhetskopior (nedan). |
Varje begäran kräver scopet files.read. Frågeparametrar:
| Parameter | Betydelse |
|---|---|
limit | Objekt per sida för children, trash och changes: 1 till 1000 (standard 200, för changes 500). |
cursor | Föregående sidas next_cursor, eller för changes den returnerade cursor. |
version | För content: ett versionsnummer från versions. Utan det: den aktuella versionen. |
redirect | För content: false returnerar { "url", "expires_in" } i stället för en 302. |
GET /spaces
{ "spaces": [ { "id": "org_3k9x2m0q8w1v5t7a", "type": "organisation", "name": "Bakkerij Jansen", "folders": "chosen" } ] }
GET /spaces/org_3k9x2m0q8w1v5t7a/folders/root/children?limit=2
{ "items": [
{ "id": "Hk2mQ9xP4aL1", "type": "folder", "name": "Finance", "parent_id": null, "path": "/Finance",
"created_at": "2026-09-01T08:12:40.000Z" },
{ "id": "p3RtY7uW0zQe", "type": "file", "name": "Budget 2027.xlsx", "parent_id": "Hk2mQ9xP4aL1",
"path": "/Finance/Budget 2027.xlsx", "size": 48213,
"mime": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "version": 3, "version_count": 3,
"etag": "\"p3RtY7uW0zQe.3.48213\"", "sha256": null, "created_at": "2026-09-02T10:00:00.000Z",
"modified_at": "2026-10-14T16:31:09.000Z", "trashed_at": null } ],
"next_cursor": "o.2" }
GET /spaces/org_3k9x2m0q8w1v5t7a/files/p3RtY7uW0zQe/versions
{ "versions": [ { "version": 3, "size": 48213, "mime": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"created_at": "2026-10-14T16:31:09.000Z", "current": true, "restored_from": null } ] }
GET /spaces/org_3k9x2m0q8w1v5t7a/files/p3RtY7uW0zQe/content
302 Found
Location: https://files.dazr.eu/v1/file?t=g1.…
curl -L -o "Budget 2027.xlsx" -H "Authorization: Bearer $TOKEN" \
https://suite.dazr.eu/api/files/v1/spaces/org_3k9x2m0q8w1v5t7a/files/p3RtY7uW0zQe/content
Följ omdirigeringen (curl -L): länken på files.dazr.eu behöver ingen Authorization-header. En fil som ännu inte finns i Files-gatewayen strömmas direkt i stället för att omdirigeras.
Kontrollsummor: Dazr Files sparar ingen hash av varje fils innehåll, så sha256 är alltid null. etag ändras varje gång innehållet ändras (en ny version). Beräkna en egen hash medan du laddar ned om du behöver en. Filer lagras krypterade (AES-256-GCM, med en nyckel per utrymme som Dazr förvaltar) och Dazr dekrypterar dem när du laddar ned dem över TLS. Det här är inte end-to-end-kryptering.
Inkrementella säkerhetskopior
Anropa changes en gång utan cursor: alla mappar och filer kommer tillbaka som created, med en cursor. Spara cursorn och skicka den nästa gång som cursor=. Du får det som har ändrats sedan dess: created, updated (nytt innehåll), moved (bytt namn eller flyttad till en annan mapp), trashed, restored och deleted (borta för gott, eller inte längre i mapparna som appen får läsa). Varje ändring har id, item_type och aktuellt item (null när den raderats). Mappar kommer före filer, föräldrar före sina barn. Så länge has_more är true anropar du igen med den nya cursorn. Om inget har ändrats får du samma cursor tillbaka. En cursor fungerar i 90 dagar, bara för din app och det utrymmet; en utgången svarar 410, och du börjar om utan cursor. Bara appens 5 senaste cursorer för ett utrymme förblir giltiga.
GET /spaces/org_3k9x2m0q8w1v5t7a/changes?cursor=dc1.ds_…
{ "changes": [
{ "type": "updated", "id": "p3RtY7uW0zQe", "item_type": "file",
"item": { "id": "p3RtY7uW0zQe", "type": "file", "name": "Budget 2027.xlsx", "version": 4, … } },
{ "type": "deleted", "id": "Zx81LmQa2bNc", "item_type": "file", "item": null } ],
"cursor": "dc1.ds_…",
"has_more": false }
Fel och gränser
Fel har en HTTP-status och en body som { "error": { "code": "not_found", "message": "..." } }. Allt som din token inte når svarar 404, precis som något som inte finns.
| Status | Koder |
|---|---|
400 | invalid_limit, invalid_cursor (en cursor från en annan app eller ett annat utrymme) |
401 | unauthenticated, invalid_token (utgången eller återkallad, godkännandet eller personens samtycke har tagits bort, eller Dazr Files API har inaktiverats för din app) |
403 | insufficient_scope, files_api_disabled, network_not_allowed (organisationen har angett nät och begäran kommer någon annanstans ifrån) |
404 | space_not_found, folder_not_found, not_found, version_not_found, unknown_endpoint |
405 | method_not_allowed: alla metoder utom GET, HEAD och OPTIONS |
410 | cursor_expired: börja om utan cursor |
429 | rate_limited, med ett Retry-After-huvud |
503 | not_available, storage_unavailable: försök igen senare |
Token-endpointen svarar med OAuth-fel: invalid_client (fel klient-id eller hemlighet, eller en app utan klienthemlighet), unauthorized_client (Dazr Files API är inte aktiverat för din app), invalid_scope och invalid_grant (inget godkännande från organisationen, eller inte från dess angivna nät).
| Vad | Gräns |
|---|---|
| API-anrop | 600 per minut per godkännande (eller per person och app), 6 000 per minut per app, 1 200 per minut per IP-adress |
| Nedladdningar | 300 per minut per godkännande via API:t, 600 per minut via WebDAV |
changes | 120 per timme per utrymme utan sidcursor; följande sidor begränsas inte separat |
| WebDAV-anrop | 1 200 per minut per godkännande |
/oauth/token | 600 förfrågningar per minut per IP-adress och 300 per minut per app |
Varje nedladdning loggas för organisationens administratörer med appens namn, filen, tiden och en del av IP-adressen: de senaste 5 000, i upp till 180 dagar. Samma fil som laddas ned igen inom 10 minuter räknas en gång. Organisationens Files-aktivitet visar en rad per dag för din app. Nedladdningar från en persons egna filer visas under personens Anslutna appar.
WebDAV
För verktyg för säkerhetskopiering som använder WebDAV skapar en administratör i organisationen en WebDAV-inloggning för din app under Anslutna appar för Files. Lösenordet visas en gång, sparas bara som hash och är aldrig någons Dazr-lösenord. Inloggningen följer godkännandet: samma mappar, nät och gränser, och den slutar fungera när godkännandet återkallas.
| Inställning | Värde |
|---|---|
| Server | https://files.dazr.eu/dav/ |
| Inloggning | HTTP Basic med användarnamnet (dzw_…) och lösenordet från administratören. |
| Metoder | OPTIONS, PROPFIND med Depth: 0 eller 1, GET och HEAD med byteintervall. Depth: infinity avvisas. Alla skrivningar svarar 403 eller 405. |
Mapp- och filnamn visas som de är i Dazr Files. När två objekt i en mapp har samma namn (oavsett versaler) behåller det äldsta namnet och de andra får sitt id inom parentes före filändelsen, så att varje objekt får en egen sökväg. En mapp med fler än 10 000 objekt kan inte listas över WebDAV; använd API:t för den. Efter 10 misslyckade inloggningar från en IP-adress inom 15 minuter får den adressen vänta i 15 minuter.
rclone
- Kör
rclone config, väljnför en ny remote, döp den tilldazroch välj lagringstypenwebdav. - URL:
https://files.dazr.eu/dav/. Vendor:other. User: användarnamnet (dzw_…). Password: välj att skriva det själv och klistra in lösenordet. - Lämna bearer token tom och spara. Kontrollera med
rclone lsd dazr:och säkerhetskopiera sedan.
# ~/.config/rclone/rclone.conf (rclone obscure <password> gives the pass value)
[dazr]
type = webdav
url = https://files.dazr.eu/dav/
vendor = other
user = dzw_0123456789abcdef0123
pass = <obscured password>
rclone lsd dazr:
rclone sync dazr: /backup/dazr --transfers 4
rclone jämför storlek och ändringstid. Använd copy i stället för sync för att behålla filer i säkerhetskopian som har raderats i Dazr Files.
Synology Cloud Sync
- Öppna Cloud Sync på NAS:en, lägg till en molnleverantör och välj WebDAV.
- Serveradress:
https://files.dazr.eu/dav/. Användarnamn och lösenord: WebDAV-inloggningen från administratören. - Välj en lokal mapp, fjärrmappen
/(eller en mapp) och synkroniseringsriktningen Download remote changes only.
Cloud Sync med WebDAV, synkroniseringsriktning ”Download remote changes only”. Hyper Backup skriver säkerhetskopior till WebDAV men kan inte läsa därifrån.