Dazr Files API: dokumentation for udviklere
Læs filer fra Dazr Files i din egen software, for eksempel for at tage backup: et REST API med et ændringsfeed og WebDAV til backupværktøjer. Kun læsning.
- Hurtig start
- Organisationsadgang
- En persons egne filer
- Reference
- Inkrementelle backups
- Fejl og grænser
- WebDAV
Hurtig start
- Registrér din app, og slå Dazr Files API til. Registrér din app, eller brug en, du har, i Dazr Identity-konsollen: samme sted som til Log ind med Dazr Identity og Dazr Sign API, med samme klient-id og hemmelighed. Vælg Slå Dazr Files API til på appens side. Til automatiske backups skal det være en webserverapp (med en klienthemmelighed).
- Bliv godkendt. Giv organisationen dit klient-id. En ejer eller administrator åbner Dazr Identity → Organisationer → organisationen → Forbundne apps til Files, indtaster klient-id’et og vælger, hvad din app må læse: alle delte filer eller valgte mapper med alt i dem. De kan også begrænse din app til angivne netværk (IP-intervaller).
- Hent et token. Din server beder om et token med
grant_type=client_credentials, organisationensidsomorgog dit klient-id og din hemmelighed (HTTP Basic eller formularens body). Kun apps med en klienthemmelighed kan gøre det. - Kald API’et. Send adgangstokenet som
Authorization: Bearer. Det gælder i 10 minutter, og der er intet refresh-token: bed om et nyt, når det udløber.
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
Organisationsadgang til backup
Der er to veje ind. En ejer eller administrator af en organisation godkender din app til organisationens delte filer, og din server får så tokens uden en person (bedst til automatiske backups). Eller en person giver din app lov med scopet files.read, og din app læser den persons egne filer.
En organisation, der ikke har godkendt din app, en, der har tilbagekaldt den, og en, der ikke findes, svarer alle invalid_grant. Administratorerne ser, hvornår din app sidst blev brugt, og hver fil, den har downloadet, og kan til enhver tid ændre dens mapper eller tilbagekalde den. En tilbagekaldt godkendelse stopper ved næste forespørgsel: tokens, der allerede er udstedt, holder op med at virke med det samme, og det samme gør downloadlinks, der allerede er givet. Medlemmernes egne filer er aldrig en del af en organisations godkendelse.
| Parameter | Betydning |
|---|---|
grant_type | client_credentials |
org | Organisationens id, som administratorerne ser under Forbundne apps til Files. |
scope | files.read (standard og det eneste scope). |
| Client authentication | Dit klient-id og din nuværende klienthemmelighed, med HTTP Basic (client_secret_basic) eller i formularens body (client_secret_post). En tidligere hemmelighed, der er bevaret efter en overdragelse, accepteres ikke. |
En persons egne filer
Bed om openid files.read (og offline_access for et refresh-token) i det sædvanlige authorization code-flow med PKCE. Personen ser på samtykkeskærmen, at din app må se og downloade personens filer. Tokenet når personens egne filer, og en organisations delte filer kun, når organisationen også har godkendt din app, og personen er medlem og må åbne dem, med de samme mapper. Når personen fjerner din app under Forbundne apps, stopper dens tokens.
Reference
Basis-URL https://suite.dazr.eu/api/files/v1. Alle endpoints er GET (og HEAD); enhver anden metode svarer 405. Fejl er JSON: { "error": { "code", "message" } }. Lister tager limit (1 til 1000, standard 200) og returnerer next_cursor, så længe der er mere.
| Anmodning | Hvad det returnerer |
|---|---|
GET /spaces | De områder, dit token når: me for en persons egne filer og organisationer efter deres id. |
GET /spaces/{space} | Ét område. |
GET /spaces/{space}/folders/root/children | Mapperne og derefter filerne øverst i det, dit token når. Brug en mappes id i stedet for root for en mappe. |
GET /spaces/{space}/folders/{id} | Én mappe. |
GET /spaces/{space}/files/{id} | Én fil: name, path, parent_id, size, mime, version, etag, created_at, modified_at og trashed_at. |
GET /spaces/{space}/files/{id}/versions | De gemte versioner af en fil, nyeste først. |
GET /spaces/{space}/files/{id}/content | En omdirigering (302) til et downloadlink på files.dazr.eu, der virker i 5 minutter og understøtter byteintervaller. Tilføj version= for en tidligere version, eller redirect=false for at få linket som JSON. |
GET /spaces/{space}/trash | Filer i papirkurven, som metadata. De kan ikke downloades, før nogen gendanner dem. |
GET /spaces/{space}/changes | Hvad der er ændret siden en cursor, til inkrementelle backups (nedenfor). |
Hver forespørgsel kræver scopet files.read. Forespørgselsparametre:
| Parameter | Betydning |
|---|---|
limit | Elementer pr. side for children, trash og changes: 1 til 1000 (standard 200, for changes 500). |
cursor | Den forrige sides next_cursor, eller for changes den returnerede cursor. |
version | For content: et versionsnummer fra versions. Uden det: den aktuelle version. |
redirect | For content: false returnerer { "url", "expires_in" } i stedet for 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ølg omdirigeringen (curl -L): linket på files.dazr.eu kræver ingen Authorization-header. En fil, der endnu ikke ligger i Files-gatewayen, streames direkte i stedet for at blive omdirigeret.
Checksummer: Dazr Files gemmer ikke en hash af hver fils indhold, så sha256 er altid null. etag ændres, hver gang indholdet ændres (en ny version). Beregn selv en hash under download, hvis du har brug for en. Filer gemmes krypteret (AES-256-GCM, med en nøgle pr. område, som Dazr opbevarer), og Dazr dekrypterer dem, når du downloader dem over TLS. Det er ikke end-to-end-kryptering.
Inkrementelle backups
Kald changes én gang uden cursor: alle mapper og filer kommer tilbage som created med en cursor. Gem cursoren, og send den næste gang som cursor=. Du får det, der er ændret siden: created, updated (nyt indhold), moved (omdøbt eller flyttet til en anden mappe), trashed, restored og deleted (slettet for altid eller ikke længere i de mapper, din app må læse). Hver ændring har id, item_type og det aktuelle item (null ved sletning). Mapper kommer før filer, forældre før deres børn. Så længe has_more er true, kalder du igen med den nye cursor. Er intet ændret, får du den samme cursor tilbage. En cursor virker i 90 dage, kun for din app og det område; en udløbet svarer 410, og du starter forfra uden cursor. Kun appens 5 nyeste cursorer for et område forbliver gyldige.
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 }
Fejl og grænser
Fejl har en HTTP-status og en body som { "error": { "code": "not_found", "message": "..." } }. Alt, hvad dit token ikke når, svarer 404, ligesom noget, der ikke findes.
| Status | Koder |
|---|---|
400 | invalid_limit, invalid_cursor (en cursor fra en anden app eller et andet område) |
401 | unauthenticated, invalid_token (udløbet eller tilbagekaldt, godkendelsen eller personens samtykke er fjernet, eller Dazr Files API er slået fra for din app) |
403 | insufficient_scope, files_api_disabled, network_not_allowed (organisationen har angivet netværk, og forespørgslen kommer et andet sted fra) |
404 | space_not_found, folder_not_found, not_found, version_not_found, unknown_endpoint |
405 | method_not_allowed: enhver anden metode end GET, HEAD og OPTIONS |
410 | cursor_expired: start forfra uden cursor |
429 | rate_limited, med en Retry-After-header |
503 | not_available, storage_unavailable: prøv igen senere |
Token-endpointet svarer med OAuth-fejl: invalid_client (forkert klient-id eller hemmelighed, eller en app uden klienthemmelighed), unauthorized_client (Dazr Files API er ikke slået til for din app), invalid_scope og invalid_grant (ingen godkendelse fra organisationen, eller ikke fra dens angivne netværk).
| Hvad | Grænse |
|---|---|
| API-forespørgsler | 600 i minuttet pr. godkendelse (eller pr. person og app), 6.000 i minuttet pr. app, 1.200 i minuttet pr. IP-adresse |
| Downloads | 300 i minuttet pr. godkendelse via API’et, 600 i minuttet via WebDAV |
changes | 120 i timen pr. område uden sidecursor; de næste sider begrænses ikke særskilt |
| WebDAV-forespørgsler | 1.200 i minuttet pr. godkendelse |
/oauth/token | 600 forespørgsler i minuttet pr. IP-adresse og 300 i minuttet pr. app |
Hver download logges for organisationens administratorer med appens navn, filen, tidspunktet og en del af IP-adressen: de seneste 5.000, i op til 180 dage. Den samme fil, der downloades igen inden for 10 minutter, tæller én gang. Organisationens Files-aktivitet viser én linje om dagen for din app. Downloads fra en persons egne filer vises under personens Forbundne apps.
WebDAV
Til backupværktøjer, der taler WebDAV, opretter en administrator i organisationen et WebDAV-login til din app under Forbundne apps til Files. Adgangskoden vises én gang, gemmes kun som hash og er aldrig nogens Dazr-adgangskode. Loginet følger godkendelsen: samme mapper, netværk og grænser, og det stopper, når godkendelsen tilbagekaldes.
| Indstilling | Værdi |
|---|---|
| Server | https://files.dazr.eu/dav/ |
| Login | HTTP Basic med brugernavnet (dzw_…) og adgangskoden fra administratoren. |
| Metoder | OPTIONS, PROPFIND med Depth: 0 eller 1, GET og HEAD med byteintervaller. Depth: infinity afvises. Enhver skrivning svarer 403 eller 405. |
Mappe- og filnavne vises, som de er i Dazr Files. Når to elementer i en mappe har samme navn (uden hensyn til store og små bogstaver), beholder det ældste det, og de andre får deres id i parentes før filtypen, så hvert element har sin egen sti. En mappe med mere end 10.000 elementer kan ikke vises over WebDAV; brug API’et til den. Efter 10 mislykkede logins fra én IP-adresse inden for 15 minutter venter den adresse i 15 minutter.
rclone
- Kør
rclone config, vælgnfor et nyt remote, kald detdazr, og vælg lagertypenwebdav. - URL:
https://files.dazr.eu/dav/. Vendor:other. User: brugernavnet (dzw_…). Password: vælg selv at indtaste den, og indsæt adgangskoden. - Lad bearer token stå tomt, og gem. Tjek med
rclone lsd dazr:, og tag så backup.
# ~/.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 sammenligner størrelse og ændringstid. Brug copy i stedet for sync for at beholde filer i din backup, der er slettet i Dazr Files.
Synology Cloud Sync
- Åbn Cloud Sync på NAS’en, tilføj en cloududbyder, og vælg WebDAV.
- Serveradresse:
https://files.dazr.eu/dav/. Brugernavn og adgangskode: WebDAV-loginet fra administratoren. - Vælg en lokal mappe, fjernmappen
/(eller én mappe) og synkroniseringsretningen Download remote changes only.
Cloud Sync med WebDAV, synkroniseringsretning “Download remote changes only”. Hyper Backup skriver backups til WebDAV, men kan ikke læse derfra.