Dazr Files API: dokumentation for udviklere

Hurtig start

  1. 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).
  2. 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).
  3. Hent et token. Din server beder om et token med grant_type=client_credentials, organisationens id som org og dit klient-id og din hemmelighed (HTTP Basic eller formularens body). Kun apps med en klienthemmelighed kan gøre det.
  4. 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.

ParameterBetydning
grant_typeclient_credentials
orgOrganisationens id, som administratorerne ser under Forbundne apps til Files.
scopefiles.read (standard og det eneste scope).
Client authenticationDit 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.

AnmodningHvad det returnerer
GET /spacesDe 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/childrenMapperne 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}/versionsDe gemte versioner af en fil, nyeste først.
GET /spaces/{space}/files/{id}/contentEn 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}/trashFiler i papirkurven, som metadata. De kan ikke downloades, før nogen gendanner dem.
GET /spaces/{space}/changesHvad der er ændret siden en cursor, til inkrementelle backups (nedenfor).

Hver forespørgsel kræver scopet files.read. Forespørgselsparametre:

ParameterBetydning
limitElementer pr. side for children, trash og changes: 1 til 1000 (standard 200, for changes 500).
cursorDen forrige sides next_cursor, eller for changes den returnerede cursor.
versionFor content: et versionsnummer fra versions. Uden det: den aktuelle version.
redirectFor 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.

StatusKoder
400invalid_limit, invalid_cursor (en cursor fra en anden app eller et andet område)
401unauthenticated, invalid_token (udløbet eller tilbagekaldt, godkendelsen eller personens samtykke er fjernet, eller Dazr Files API er slået fra for din app)
403insufficient_scope, files_api_disabled, network_not_allowed (organisationen har angivet netværk, og forespørgslen kommer et andet sted fra)
404space_not_found, folder_not_found, not_found, version_not_found, unknown_endpoint
405method_not_allowed: enhver anden metode end GET, HEAD og OPTIONS
410cursor_expired: start forfra uden cursor
429rate_limited, med en Retry-After-header
503not_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).

HvadGrænse
API-forespørgsler600 i minuttet pr. godkendelse (eller pr. person og app), 6.000 i minuttet pr. app, 1.200 i minuttet pr. IP-adresse
Downloads300 i minuttet pr. godkendelse via API’et, 600 i minuttet via WebDAV
changes120 i timen pr. område uden sidecursor; de næste sider begrænses ikke særskilt
WebDAV-forespørgsler1.200 i minuttet pr. godkendelse
/oauth/token600 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.

IndstillingVærdi
Serverhttps://files.dazr.eu/dav/
LoginHTTP Basic med brugernavnet (dzw_…) og adgangskoden fra administratoren.
MetoderOPTIONS, 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

  1. Kør rclone config, vælg n for et nyt remote, kald det dazr, og vælg lagertypen webdav.
  2. URL: https://files.dazr.eu/dav/. Vendor: other. User: brugernavnet (dzw_…). Password: vælg selv at indtaste den, og indsæt adgangskoden.
  3. 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

  1. Åbn Cloud Sync på NAS’en, tilføj en cloududbyder, og vælg WebDAV.
  2. Serveradresse: https://files.dazr.eu/dav/. Brugernavn og adgangskode: WebDAV-loginet fra administratoren.
  3. 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.