Integration guide
For developers and system partners

Send new tenancies to Muuvo's heating & cooling platform

One simple API for every supplier. Post a tenancy from your system and we do the rest: we work out the supplier from the building, email the tenant their registration link, or prepare the supplier's paperwork for Muuvo.

Base address https://heat.muuvo.app/api/v1 Format JSON Sign-in API key Safe test mode included

How it works

You send us one record per new tenancy. That's it: there's nothing supplier-specific for you to build.

Your systemA tenant is moving in. You post their tenancy to /tenancies with your own reference.
We recognise the buildingFrom the flat's normal postal address, we find the building and its heat network supplier.
Servus buildingsWe email the tenant a personal link to register and set up their Direct Debit, and remind them if they don't.
CEP buildingsWe prepare CEP's Tenancy Management Form for Muuvo to check and send.
Good to knowEach tenancy carries your reference (for example your CRM's tenancy ID). Sending the same reference again updates the record instead of creating a duplicate, so it's always safe to retry.

1Get your API key

Muuvo creates a key for your company and sends it to you privately. It looks like muuvo_live_….

Send it with every request in a header called X-Api-Key. Keep it on your server: never put it in a web page, an app or an email. If you think it has been seen by someone else, tell Muuvo and they'll revoke it and issue a new one.

2Check you're connected

Call GET /ping. If your key is right you'll get your company name back.

A 401 response means the key is missing, mistyped or revoked.

3The address

Just send the flat's normal postal address, exactly as you hold it. We work out the building and its supplier from it.

How we recognise the building

  • We look for the building name anywhere in the address (e.g. "Landmark East Tower"), or failing that the building's street address (e.g. "24 Marsh Wall").
  • The postcode district must agree, so a street with the same name somewhere else won't be mistaken for one of our buildings.
  • The flat number is read from the first line ("Flat 1607", "Apartment 12", "Apt 3B"). You can also send it separately as apartment.
  • Capitals, punctuation, commas and "&" vs "and" don't matter.

GET /developments lists every building we cover, with its supplier, if you'd like to check an address before sending.

Not recognised?If we can't tell which supplier serves an address you'll get a clear 422 error and nothing is created. Add "supplier" ("servus" or "cep") if you know it, or ask Muuvo to add the building. More suppliers will be added; your integration won't need to change.

4Send a tenancy

Call POST /tenancies with the tenancy as JSON. Send whatever you have: we use what each supplier needs.

Example: a Servus building

The tenant is emailed their registration link straight away. The response includes the same link, if you'd like to show it in your own system.

Example: a CEP building

CEP also needs the landlord and (if there is one) the previous tenant. Muuvo checks the form and sends it to CEP.

What you get back

The full list of fields is in All fields.

5Test first

Add "test": true to any tenancy, or send the header X-Test-Mode: true.

We check every field, match the building and tell you exactly what would happen, but nothing is saved and no email is sent. Use it while you build, and keep a test call in your own checks.

6Check progress

Call GET /tenancies/{your reference} any time to see where a tenancy has got to.

StatusSupplierWhat it means
invitedServusThe tenant has been emailed their link and hasn't registered yet. We send reminders automatically.
registration_startedServusThe tenant has filled in their details but hasn't finished the Direct Debit.
dd_completeServusThe Direct Debit form has been submitted. Muuvo is completing the paperwork.
completeServusEverything is done.
already_registeredServusThis tenant was already set up, so no invite was sent.
removedServusMuuvo removed this tenancy from the list.
ready_to_sendCEPThe form is prepared and waiting for Muuvo to send it.
sent_to_cepCEPMuuvo has sent the form to CEP.

All fields

Everything you can send to POST /tenancies. Leave out anything you don't have.

FieldServusCEPNotes
referenceRequiredRequiredYour unique ID for this tenancy. Sending it again updates the same record.
address.addressLine1, .addressLine2, .addressLine3, .townOrCity, .county, .postcodeRequiredRequiredThe flat's postal address, as you hold it. We find the building and supplier from it. .uprn is welcome too.
supplierOptionalservus or cep. Only needed if we can't recognise the address.
apartmentOptionalFlat number, if it isn't in addressLine1.
developmentOptionalThe building's name, if you happen to have it.
property_addressOptionalThe whole address as one line, instead of address.
move_in_dateOptionalRequiredTenancy start date. YYYY-MM-DD (or DD/MM/YYYY).
tenant.first_nameRequiredRequiredFor CEP you can send tenant.name instead.
tenant.last_nameRequiredOptional
tenant.emailRequiredOptionalFor Servus, the invite goes to this address.
tenant.phoneOptionalUK number, any format.
start_meter_reading-OptionalMeter reading at move-in.
landlord.name, .address, .email, .phone-OptionalThe flat's landlord (leaseholder). .address can be text or an address object like above. leaseholder works too.
previous_tenant.name, .end_date, .end_meter_reading, .forwarding_address, .email, .phone-OptionalThe outgoing tenant, if there is one.
resend_inviteOptional-true to email the tenant their link again when you update a tenancy.
testOptionaltrue to check without saving or sending anything.

Responses & errors

What happened: action

actionMeaning
invite_sentNew Servus tenancy: the tenant has been emailed their link. (HTTP 201)
form_createdNew CEP tenancy: the form is ready for Muuvo. (HTTP 201)
updatedYou'd sent this reference before; we've updated the details. No new email.
updated_and_invite_resentUpdated, and the tenant was emailed again (their email changed, or you sent resend_invite).
linked_to_existing_inviteMuuvo had already invited this tenant; we've linked your reference to it. No duplicate email.
already_registeredThe tenant is already set up with the supplier. Nothing was sent.

When something's wrong

Errors always look the same, so they're easy to log and show:

HTTPcodeWhat to do
400invalid_jsonThe body isn't valid JSON. Check your request.
401unauthorisedThe API key is missing, mistyped or revoked.
404not_foundWrong address, or no tenancy with that reference for your key.
409already_sentThe CEP form for this tenancy has already gone to CEP, so it can't be changed. Contact Muuvo.
422validation_failedfields lists each problem, by field name. Fix and resend.
502email_failedWe couldn't email the tenant (usually a bad address). Nothing was saved; fix the email and resend.
500server_errorSomething went wrong on our side. Retry after a short wait; it's safe to resend.

Try it live

Send real requests from this page. Test mode is on until you switch it off, so nothing is saved or emailed.

Response
Press "Send request" to see the response here.

Your key stays in this browser tab only and is sent straight to https://heat.muuvo.app/api/v1.

Go-live checklist

  1. Your key is stored on your server, not in any web page, app or email.
  2. GET /ping returns your company name.
  3. You send the flat's full postal address, including the postcode.
  4. Each tenancy has a unique reference from your system, and you resend the same one for updates.
  5. You've tried a Servus and a CEP tenancy in test mode, and handled a 422 by showing the fields messages.
  6. You retry on 500 after a short wait (it's always safe to resend).
  7. Switch test mode off, send one real tenancy with your own email as the tenant, and check the invite arrives.
Questions?Contact the Muuvo team at hello@muuvo.app.