Flytteflow Din flytteassistent
v1 · https://api.flytteflow.dk

Quick start

Authentication

Brug organisationens integrationsnøgle i headeren:

Authorization: Bearer <API_KEY>

Kom i gang

  1. Opret en integrationsnøgle under Organisation i appen.
  2. Gem nøglen sikkert (den vises kun én gang).
  3. Opret projekt via POST /v1/projects med et stabilt externalId.
  4. Hvis du vil, kan du importere projekt + lejemål i samme request via feltet properties.
  5. Alternativt kan du oprette lejemål separat via POST /v1/properties.
  6. Opret planlagt syn via POST /v1/inspections/planned med callbackUrl.

Eksempel: Opret projekt

curl -X POST "https://api.flytteflow.dk/v1/projects" \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": "proj-123",
    "name": "Solsikkevej 12",
    "postalCode": "8000",
    "city": "Aarhus",
    "reference": "SAG-42"
  }'

Projekter

Opret og opdater projekter for organisationen bag API-nøglen.

POST /v1/projects

Opret projekt via externalId.

FeltTypePåkrævetBeskrivelse
externalIdstringJaIntegrators unikke id for projektet
namestringJaProjektnavn
postalCodestringJaPostnummer
citystringJaBy
referencestringNejValgfri reference
propertiesarray<object>NejImportér lejemål i samme request (se struktur nedenfor)

properties[] struktur (ved samlet import)

FeltTypePåkrævetBeskrivelse
externalIdstringJaUnikt id for lejemålet
namestringJaNavn på lejemål
streetstringNejAdressevej
postalCodestringNejPostnummer
citystringNejBy
latitudenumberNejBreddegrad
longitudenumberNejLængdegrad
Vis eksempel: samlet import af projekt + lejemål
curl -X POST "https://api.flytteflow.dk/v1/projects" \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": "proj-123",
    "name": "Solsikkevej 12",
    "postalCode": "8000",
    "city": "Aarhus",
    "reference": "SAG-42",
    "properties": [
      {
        "externalId": "prop-123-01",
        "name": "Lejemål 1",
        "street": "Solsikkevej 12, st.",
        "postalCode": "8000",
        "city": "Aarhus"
      },
      {
        "externalId": "prop-123-02",
        "name": "Lejemål 2",
        "street": "Solsikkevej 12, 1. sal",
        "postalCode": "8000",
        "city": "Aarhus"
      }
    ]
  }'

Svarschema

FeltTypeBeskrivelse
projectIdstringID på oprettet/fundet projekt
propertiesarrayKun ved samlet import; liste af importerede lejemål

PUT /v1/projects/:projectId

Opdater eksisterende projekt med delvist payload.

FeltTypePåkrævetBeskrivelse
projectId (path)stringJaProjektets id i Flytteflow
namestringNejNyt projektnavn
postalCodestringNejNyt postnummer
citystringNejNy by
referencestringNejNy reference
Vis eksempel request
curl -X PUT "https://api.flytteflow.dk/v1/projects/project_abc123" \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Solsikkevej 12 - opdateret",
    "postalCode": "8210",
    "city": "Aarhus V",
    "reference": "SAG-42A"
  }'

Svarschema

FeltTypeBeskrivelse
projectIdstringID på opdateret projekt

Lejemål

Opret og opdater lejemål på eksisterende projekter.

POST /v1/properties

Opret lejemål via externalId.

FeltTypePåkrævetBeskrivelse
externalIdstringJaIntegrators unikke id for lejemålet
projectIdstringNej*Projekt-id i Flytteflow
projectExternalIdstringNej*Alternativ til projectId
namestringJaNavn på lejemål
streetstringNejAdressevej
postalCodestringNejPostnummer
citystringNejBy
latitudenumberNejBreddegrad
longitudenumberNejLængdegrad

*Der skal gives enten projectId eller projectExternalId.

Vis eksempel request
curl -X POST "https://api.flytteflow.dk/v1/properties" \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": "prop-123-01",
    "projectExternalId": "proj-123",
    "name": "Lejemål 1",
    "street": "Solsikkevej 12, st.",
    "postalCode": "8000",
    "city": "Aarhus"
  }'

Svarschema

FeltTypeBeskrivelse
propertyIdstringID på oprettet/fundet lejemål

PUT /v1/properties/:propertyId

FeltTypePåkrævetBeskrivelse
propertyId (path)stringJaLejemålets id i Flytteflow
namestringNejNyt navn
streetstringNejNy adressevej
postalCodestringNejNyt postnummer
citystringNejNy by
latitudenumberNejNy breddegrad
longitudenumberNejNy længdegrad
Vis eksempel request
curl -X PUT "https://api.flytteflow.dk/v1/properties/property_abc123" \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Lejemål 1 - opdateret",
    "city": "Aarhus C"
  }'

Svarschema

FeltTypeBeskrivelse
propertyIdstringID på opdateret lejemål

Organisation

Hent medlemmer i organisationen, inkl. roller, til brug ved assignee på syn.

GET /v1/organisation/users

Returnerer alle brugere i organisationen med deres rolle.

Vis eksempel request
curl -X GET "https://api.flytteflow.dk/v1/organisation/users" \
  -H "Authorization: Bearer <API_KEY>"

Svarschema

FeltTypeBeskrivelse
usersarrayListe af organisationsbrugere
users[].userIdstringBrugerens ID
users[].rolestringowner | admin | caretaker
users[].namestringBrugerens navn (kan være tom)
users[].emailstringBrugerens e-mail (kan være tom)

Syn

Hent, opret og slet planlagte syn, inkl. callback URL for afslutning og sletning i appen.

GET /v1/inspections/:inspectionId

Hent et syn via id. Hvis synet har en gemt PDF-rapport, returneres også en URL til rapporten.

FeltTypePåkrævetBeskrivelse
inspectionId (path)stringJaSynets id i Flytteflow
Vis eksempel request
curl -X GET "https://api.flytteflow.dk/v1/inspections/inspection_abc123" \
  -H "Authorization: Bearer <API_KEY>"

Svarschema

FeltTypeBeskrivelse
inspectionIdstringSynets ID
externalIdstringIntegrators eksterne id
propertyIdstringLejemålets ID
scheduledDatenumberPlanlagt tidspunkt i Unix ms
isMoveOutbooleanOm synet er fraflytning
isPlannedbooleanOm synet er planlagt
notesstringNoter
callbackUrlstringGemte callback URL
reportUrlstring | nullURL til PDF-rapporten, hvis rapporten er genereret og uploadet
completedDatenumberAfslutningstidspunkt i Unix ms
allTenantsSignedboolean (valgfri)Alle lejere eller deres repræsentanter havde underskrevet godkendelsen ved afslutning. Udeladt betyder ukendt, ikke false.
allTenantsAcknowledgedReceiptboolean (valgfri)Alle havde kvitteret for modtagelse ved afslutning, via underskrift eller gyldig fælles e-mailkvittering. Udeladt betyder ukendt, ikke false.
createdAtnumberOprettet tidspunkt i Unix ms
updatedAtnumberSidst opdateret i Unix ms

De to underskriftsfelter er de samme gemte værdier som i completion-callbacket. Udeladte felter betyder ukendt status, f.eks. før afslutning eller når ældre data mangler oplysningerne — ikke false. Senere e-mailkvitteringer ændrer ikke disse afslutningsværdier.

POST /v1/inspections/planned

Opret planlagt syn med callback URL.

FeltTypePåkrævetBeskrivelse
externalIdstringJaIntegrators unikke id for synet
propertyIdstringNej*Lejemåls-id i Flytteflow
propertyExternalIdstringNej*Alternativ til propertyId
assigneeUserIdstringJaBruger-id fra GET /v1/organisation/users
scheduledDatenumberJaUnix ms tidspunkt
isMoveOutbooleanJatrue for fraflytningssyn
callbackUrlstringJaURL der kaldes ved afslutning og sletning i appen
tenantsobject[]Ja*1–10 lejere i den ønskede rækkefølge. Første lejer er primær lejer.
tenantobjectJa*Bagudkompatibelt alternativ for én lejer. Send enten tenant eller tenants, aldrig begge.
notesstring | nullNejValgfrie noter. null behandles som tomt.

*Der skal gives enten propertyId eller propertyExternalId.

Send præcis ét af tenant og tenants. Begge, ingen, en tom liste, mere end 10 lejere eller ugyldige lejerfelter giver HTTP 400. Alle lejere valideres før oprettelse; syn og lejerliste gemmes samlet.

Et gentaget externalId med samme data giver HTTP 200 og samme inspectionId; en ny oprettelse giver HTTP 201. Med tenants sammenlignes hele listen inklusive rækkefølge og normaliserede telefonnumre. Ændret antal, rækkefølge eller lejerdata giver HTTP 409 og ændrer ikke det eksisterende syn. Den gamle tenant-form sammenligner fortsat kun den primære lejer og bevarer øvrige lejere.

Struktur for tenant og hvert element i tenants

FeltTypePåkrævetBeskrivelse
firstnamestringJaLejerens fornavn
lastnamestringJaLejerens efternavn
emailstringJaLejerens e-mail
phonestringJaLejerens telefon med international landekode, fx +4511223344
Vis eksempel request
curl -X POST "https://api.flytteflow.dk/v1/inspections/planned" \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": "insp-1001",
    "propertyExternalId": "prop-123-01",
    "assigneeUserId": "user_2",
    "scheduledDate": 1735770000000,
    "isMoveOut": true,
    "callbackUrl": "https://integrator.example.com/callbacks/inspection",
    "tenants": [
      {
        "firstname": "Maja",
        "lastname": "Nielsen",
        "email": "maja@example.com",
        "phone": "+4511223344"
      },
      {
        "firstname": "Peter",
        "lastname": "Nielsen",
        "email": "peter@example.com",
        "phone": "+4587654321"
      }
    ],
    "notes": "Nøgler afleveres hos vicevært"
  }'

Svarschema

FeltTypeBeskrivelse
inspectionIdstringID på oprettet/fundet syn

Callbacks ved afslutning og sletning

Den gemte callbackUrl modtager HTTP POST med JSON. Ved afslutning sendes event: "complete" med følgende payload:

FeltTypeBeskrivelse
inspectionIdstringSynets id i Flytteflow
eventstringcomplete ved afslutning, deleted ved sletning i appen
allTenantsSignedboolean (valgfri)Alle lejere eller deres repræsentanter har underskrevet godkendelsen. Udeladt for ukendt status fra ældre klienter; må ikke tolkes som false.
allTenantsAcknowledgedReceiptboolean (valgfri)Alle har underskrevet for modtagelse, eller en gyldig fælles e-mailkvittering dækker alle lejere. Udeladt betyder ukendt, ikke false.
{
  "inspectionId": "...",
  "event": "complete",
  "allTenantsSigned": false,
  "allTenantsAcknowledgedReceipt": false
}

Når et syn slettes i appen, sendes følgende payload efter sletningen. inspectionId er fortsat synets id i Flytteflow, selv om synet ikke længere kan hentes:

{
  "inspectionId": "...",
  "event": "deleted"
}

Callbacks har 30 sekunders timeout og genforsøges efter 30 sekunder, 5 minutter og 30 minutter ved fejl. Modtageren skal håndtere gentagne leveringer og må ikke lade et forsinket completion-callback genåbne et annulleret syn. Der sendes ikke et update-event.

Felterne gemmes ved afslutningen og ændres ikke ved callback-genforsøg. Manglende oplysninger fra ældre klienter betyder ukendt status, og felterne udelades — ikke false. En afsendt e-mail alene tæller ikke som modtaget. Senere e-mailkvitteringer udløser ikke et nyt completion-callback.

DELETE /v1/inspections/planned/:inspectionId

Sletter kun planlagte syn. Completed syn returnerer 409.

FeltTypePåkrævetBeskrivelse
inspectionId (path)stringJaSynets id i Flytteflow
Vis eksempel request
curl -X DELETE "https://api.flytteflow.dk/v1/inspections/planned/inspection_abc123" \
  -H "Authorization: Bearer <API_KEY>"

Svarschema

FeltTypeBeskrivelse
okbooleantrue når synet er slettet