Quick start
Authentication
Brug organisationens integrationsnøgle i headeren:
Authorization: Bearer <API_KEY>
Kom i gang
- Opret en integrationsnøgle under Organisation i appen.
- Gem nøglen sikkert (den vises kun én gang).
- Opret projekt via
POST /v1/projectsmed et stabiltexternalId. - Hvis du vil, kan du importere projekt + lejemål i samme request via feltet
properties. - Alternativt kan du oprette lejemål separat via
POST /v1/properties. - Opret planlagt syn via
POST /v1/inspections/plannedmedcallbackUrl.
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.
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
externalId | string | Ja | Integrators unikke id for projektet |
name | string | Ja | Projektnavn |
postalCode | string | Ja | Postnummer |
city | string | Ja | By |
reference | string | Nej | Valgfri reference |
properties | array<object> | Nej | Importér lejemål i samme request (se struktur nedenfor) |
properties[] struktur (ved samlet import)
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
externalId | string | Ja | Unikt id for lejemålet |
name | string | Ja | Navn på lejemål |
street | string | Nej | Adressevej |
postalCode | string | Nej | Postnummer |
city | string | Nej | By |
latitude | number | Nej | Breddegrad |
longitude | number | Nej | Læ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
| Felt | Type | Beskrivelse |
|---|---|---|
projectId | string | ID på oprettet/fundet projekt |
properties | array | Kun ved samlet import; liste af importerede lejemål |
PUT /v1/projects/:projectId
Opdater eksisterende projekt med delvist payload.
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
projectId (path) | string | Ja | Projektets id i Flytteflow |
name | string | Nej | Nyt projektnavn |
postalCode | string | Nej | Nyt postnummer |
city | string | Nej | Ny by |
reference | string | Nej | Ny 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
| Felt | Type | Beskrivelse |
|---|---|---|
projectId | string | ID på opdateret projekt |
Lejemål
Opret og opdater lejemål på eksisterende projekter.
POST /v1/properties
Opret lejemål via externalId.
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
externalId | string | Ja | Integrators unikke id for lejemålet |
projectId | string | Nej* | Projekt-id i Flytteflow |
projectExternalId | string | Nej* | Alternativ til projectId |
name | string | Ja | Navn på lejemål |
street | string | Nej | Adressevej |
postalCode | string | Nej | Postnummer |
city | string | Nej | By |
latitude | number | Nej | Breddegrad |
longitude | number | Nej | Læ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
| Felt | Type | Beskrivelse |
|---|---|---|
propertyId | string | ID på oprettet/fundet lejemål |
PUT /v1/properties/:propertyId
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
propertyId (path) | string | Ja | Lejemålets id i Flytteflow |
name | string | Nej | Nyt navn |
street | string | Nej | Ny adressevej |
postalCode | string | Nej | Nyt postnummer |
city | string | Nej | Ny by |
latitude | number | Nej | Ny breddegrad |
longitude | number | Nej | Ny 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
| Felt | Type | Beskrivelse |
|---|---|---|
propertyId | string | ID 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
| Felt | Type | Beskrivelse |
|---|---|---|
users | array | Liste af organisationsbrugere |
users[].userId | string | Brugerens ID |
users[].role | string | owner | admin | caretaker |
users[].name | string | Brugerens navn (kan være tom) |
users[].email | string | Brugerens 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.
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
inspectionId (path) | string | Ja | Synets id i Flytteflow |
Vis eksempel request
curl -X GET "https://api.flytteflow.dk/v1/inspections/inspection_abc123" \ -H "Authorization: Bearer <API_KEY>"
Svarschema
| Felt | Type | Beskrivelse |
|---|---|---|
inspectionId | string | Synets ID |
externalId | string | Integrators eksterne id |
propertyId | string | Lejemålets ID |
scheduledDate | number | Planlagt tidspunkt i Unix ms |
isMoveOut | boolean | Om synet er fraflytning |
isPlanned | boolean | Om synet er planlagt |
notes | string | Noter |
callbackUrl | string | Gemte callback URL |
reportUrl | string | null | URL til PDF-rapporten, hvis rapporten er genereret og uploadet |
completedDate | number | Afslutningstidspunkt i Unix ms |
allTenantsSigned | boolean (valgfri) | Alle lejere eller deres repræsentanter havde underskrevet godkendelsen ved afslutning. Udeladt betyder ukendt, ikke false. |
allTenantsAcknowledgedReceipt | boolean (valgfri) | Alle havde kvitteret for modtagelse ved afslutning, via underskrift eller gyldig fælles e-mailkvittering. Udeladt betyder ukendt, ikke false. |
createdAt | number | Oprettet tidspunkt i Unix ms |
updatedAt | number | Sidst 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.
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
externalId | string | Ja | Integrators unikke id for synet |
propertyId | string | Nej* | Lejemåls-id i Flytteflow |
propertyExternalId | string | Nej* | Alternativ til propertyId |
assigneeUserId | string | Ja | Bruger-id fra GET /v1/organisation/users |
scheduledDate | number | Ja | Unix ms tidspunkt |
isMoveOut | boolean | Ja | true for fraflytningssyn |
callbackUrl | string | Ja | URL der kaldes ved afslutning og sletning i appen |
tenants | object[] | Ja* | 1–10 lejere i den ønskede rækkefølge. Første lejer er primær lejer. |
tenant | object | Ja* | Bagudkompatibelt alternativ for én lejer. Send enten tenant eller tenants, aldrig begge. |
notes | string | null | Nej | Valgfrie 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
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
firstname | string | Ja | Lejerens fornavn |
lastname | string | Ja | Lejerens efternavn |
email | string | Ja | Lejerens e-mail |
phone | string | Ja | Lejerens 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
| Felt | Type | Beskrivelse |
|---|---|---|
inspectionId | string | ID 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:
| Felt | Type | Beskrivelse |
|---|---|---|
inspectionId | string | Synets id i Flytteflow |
event | string | complete ved afslutning, deleted ved sletning i appen |
allTenantsSigned | boolean (valgfri) | Alle lejere eller deres repræsentanter har underskrevet godkendelsen. Udeladt for ukendt status fra ældre klienter; må ikke tolkes som false. |
allTenantsAcknowledgedReceipt | boolean (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.
| Felt | Type | Påkrævet | Beskrivelse |
|---|---|---|---|
inspectionId (path) | string | Ja | Synets id i Flytteflow |
Vis eksempel request
curl -X DELETE "https://api.flytteflow.dk/v1/inspections/planned/inspection_abc123" \ -H "Authorization: Bearer <API_KEY>"
Svarschema
| Felt | Type | Beskrivelse |
|---|---|---|
ok | boolean | true når synet er slettet |