Categorie: api Bijgewerkt: 2026-04-05 rest-api json odata api-keys crud

REST API

De Ultimo REST API is de primaire interface voor het programmatisch ophalen, invoegen, bijwerken en verwijderen van data in Ultimo. De API is beschikbaar sinds versie 18.04 (2018R2) en gebruikt JSON als standaard dataformaat met OData v4 query opties.

Beschikbaarheid: Professional, Premium, Enterprise


Setupbewerken

Voordat je de REST API kunt gebruiken, moet je een API key aanmaken in de Ultimo Configuration Tool (UCT). Zie api-keys voor uitgebreide instructies.

Vereisten: - Een actieve API key met de juiste entiteiten en properties geconfigureerd - HTTPS-verbinding naar de Ultimo omgeving - Optioneel: API key template voor snelle configuratie


URL Structuurbewerken

Alle REST API requests volgen deze structuur:

https://{service-root}/api/v1/object/{resource-path}?{query-options}
Component Beschrijving Voorbeeld
service-root De Ultimo omgeving URL customer.ultimo.net
resource-path Het gevraagde data-pad Equipment('00001')
query-options Filter- en presentatieparameters $select=Id,Description

Authenticatiebewerken

Elke request vereist een API key in de header:

ApiKey: {API KEY SECRET}

Beschikbare headersbewerken

Header Verplicht Beschrijving
ApiKey Ja Authenticatie met het API key secret
Accept-Language Nee Gewenste taal van de response (NL, en-US)
Ultimo-Company Voorwaardelijk Verplicht bij multi-company configuratie (000001)
Content-Type Bij POST/PUT/PATCH application/json
Prefer Nee strip-html om HTML markup te verwijderen uit responses

Autorisatiebewerken

Record-level autorisatie is gekoppeld aan de systeemgebruiker die aan de API key is gelinkt. Toegang wordt beperkt op basis van afdelingstoewijzingen.


GET - Data ophalenbewerken

De GET methode haalt informatie op uit Ultimo.

Voorbeelden van resource padenbewerken

Type Voorbeeld
Alle entiteiten GET .../api/v1/object/Equipment
Custom entiteit GET .../api/v1/object/_MijnEntiteit
Enkel record op ID GET .../api/v1/object/Equipment('00001')
Samengestelde sleutel GET .../api/v1/object/BuildingFloor(Building='0001',BuildingPart='001',Id='CODE01')
Navigatie (enkel) GET .../api/v1/object/Equipment('00001')/Department
Navigatie (collectie) GET .../api/v1/object/Department('01')/Jobs
Verkort genest pad GET .../api/v1/object/Building('0001')/BuildingParts('001')/BuildingFloors

Voorbeeld: Equipment ophalenbewerken

Request:

GET https://customer.ultimo.net/api/v1/object/Equipment('00001')
ApiKey: abc123def456

Response:

{
  "Id": "00001",
  "Context": 1,
  "Description": "Koelinstallatie gebouw A",
  "InstallDate": "2022-04-07",
  "ManufactureYear": 2020,
  "NextPmMaintenanceDate": "2023-04-07",
  "Status": 2,
  "SerialNumber": "SN-2020-0042",
  "CostCenter": "01",
  "Department": "01",
  "EquipmentType": "HVAC",
  "PartOfEquipment": "GEBOUW-A"
}

Pagineringbewerken

De API gebruikt server-side paginering. De eerste pagina bevat een nextPageLink voor vervolgpagina's:

{
  "nextPageLink": "https://customer.ultimo.net/api/v1/object/Equipment?$skip=100",
  "items": [...]
}

Belangrijk: Gebruik altijd de meegeleverde nextPageLink om alle records op te halen. Bouw geen eigen paginering-logica.

External Identifiersbewerken

Gebruik ExternalId voor identificatie vanuit externe systemen. De combinatie ExternalId + DataProvider is uniek.

GET .../object/Equipment(ExternalId='EXT001')
GET .../object/Equipment(ExternalId='EXT001',DataProvider='SAP')

Meertalige outputbewerken

Bij meertalige configuratie worden alle beschikbare talen als genest object teruggegeven:

{
  "Description": {
    "NL": "Koelinstallatie",
    "EN": "Cooling unit",
    "DE": "Kuhlanlage"
  }
}

PUT - Invoegen of bijwerkenbewerken

PUT voegt een nieuw record in of werkt een bestaand record bij op basis van de opgegeven identifier.

Verplichte properties: Context, Status

Voorbeeld: Equipment aanmaken/bijwerken

PUT https://customer.ultimo.net/api/v1/object/Equipment('00001')
Content-Type: application/json
ApiKey: abc123def456

{
  "Context": 1,
  "Description": "Koelinstallatie gebouw A",
  "InstallDate": "2022-04-07",
  "NextPmMaintenanceDate": "2023-04-07",
  "Status": 2,
  "CostCenter": "01",
  "Department": "01"
}

Let op: Bij PUT worden niet-opgegeven properties teruggezet naar hun standaardwaarde of null.


POST - Nieuw record invoegenbewerken

POST maakt een nieuw record aan zonder identifier (alleen voor entiteiten met autokey).

Voorbeeld: Nieuwe Job aanmaken

POST https://customer.ultimo.net/api/v1/object/Job
Content-Type: application/json
ApiKey: abc123def456

{
  "Context": 1,
  "Status": 1,
  "Description": "Storing koelinstallatie",
  "Equipment": "00001",
  "Department": "01"
}

Response:

{
  "Id": "39938",
  "Context": 1,
  "Status": 1,
  "Description": "Storing koelinstallatie",
  "Equipment": "00001",
  "Department": "01"
}

PATCH - Enkel property bijwerkenbewerken

PATCH werkt specifieke properties bij zonder andere velden te beinvloeden.

Voorbeeld:

PATCH https://customer.ultimo.net/api/v1/object/Equipment('00001')
Content-Type: application/json
ApiKey: abc123def456

{
  "Description": "Koelinstallatie gebouw B"
}

DELETE - Record verwijderenbewerken

DELETE verwijdert een specifiek record.

DELETE https://customer.ultimo.net/api/v1/object/Equipment('00001')
ApiKey: abc123def456

Batch operatiesbewerken

Voor het verwerken van meerdere records in een enkele request.

Endpoint:

POST https://customer.ultimo.net/api/v1/batch

Beperkingen: - Maximaal 100 records per batch request - Maximale payload: 1 MB

Request structuurbewerken

{
  "requests": [
    {
      "id": "req1",
      "method": "PUT",
      "url": "/api/v1/object/Equipment('00001')",
      "body": {
        "Context": 1,
        "Status": 2,
        "Description": "Asset A"
      }
    },
    {
      "id": "req2",
      "method": "PUT",
      "url": "/api/v1/object/Equipment('00002')",
      "body": {
        "Context": 1,
        "Status": 2,
        "Description": "Asset B"
      }
    }
  ]
}

Atomicity groupsbewerken

Groepeer requests voor transactie-verwerking met atomicityGroup:

{
  "requests": [
    {
      "id": "req1",
      "method": "PUT",
      "url": "/api/v1/object/Equipment('00001')",
      "body": { "Context": 1, "Status": 2, "Description": "Asset A" },
      "atomicityGroup": "groep1"
    },
    {
      "id": "req2",
      "method": "PUT",
      "url": "/api/v1/object/Equipment('00002')",
      "body": { "Context": 1, "Status": 2, "Description": "Asset B" },
      "atomicityGroup": "groep1"
    }
  ]
}

Dependenciesbewerken

Gebruik dependsOn om afhankelijkheden tussen requests aan te geven:

{
  "id": "req2",
  "method": "PUT",
  "url": "/api/v1/object/Equipment('00002')",
  "body": { "Context": 1, "Status": 2 },
  "dependsOn": ["req1"]
}

Batch response codesbewerken

Code Betekenis
200 Succesvol verwerkt
201 Aangemaakt
204 Geen content
424 Afhankelijkheid gefaald

File uploadsbewerken

Twee methoden voor het uploaden van bestanden:

Multipart/form-data (aanbevolen)bewerken

curl --location "https://customer.ultimo.net/api/v1/action/_REST_UploadFile" \
  --header "applicationelementid: 99999999-9999-9999-9999-999999999999" \
  --header "apikey: abc123def456" \
  --form "File=@C:/temp/Rapport.pdf" \
  --form "JobId=123456789"

Aanbeveling: Gebruik multipart/form-data in plaats van Base64. Base64 encoding vergroot het bestand met circa 33%.

Limieten voor uploadsbewerken

Type Maximum
Multipart/form-data 500 MB
Workflow payload 20 MB
Standaard payload 1 MB

Query opties (OData)bewerken

Zie odata-filters voor een uitgebreide referentie van alle OData filter opties.

Snel overzichtbewerken

GET .../object/Equipment?$filter=Status eq 2&$select=Id,Description&$top=10&$orderby=Description asc
Optie Beschrijving
$filter Filter resultaten
$select Selecteer specifieke properties
$expand Voeg gerelateerde entiteiten toe (max 3 niveaus)
$orderby Sorteer resultaten
$top Beperk aantal resultaten
$skip Sla records over
$count Voeg totaal aantal toe

Foutafhandelingbewerken

Zie de volledige lijst bij API overzicht.

HTTP response codesbewerken

Code Status Beschrijving
200 OK Request ontvangen, details in response body
201 Created Record succesvol aangemaakt
400 Bad Request Ongeldige syntax of parameters
401 Unauthorized Authenticatie mislukt
404 Not Found Endpoint niet gevonden
413 Payload Too Large Payload overschrijdt limiet
429 Too Many Requests Rate limit of dagelijks quotum overschreden
500 Internal Server Error Serverfout, details mogelijk in response body

Belangrijk: Een 200 OK response betekent alleen dat de request is ontvangen, niet dat deze succesvol is verwerkt door Ultimo. Controleer altijd de response body.


Limieten en quotabewerken

Limiet Waarde
Requests per dag 10.000 (alle API keys samen)
Requests per 10 seconden 100 (alle API keys samen)
Batch grootte 100 records per request
Payload per request 1 MB
Workflow payload 20 MB
File upload (multipart) 500 MB

Individuele API keys kunnen een eigen dagelijks quotum krijgen voor verdeling over meerdere partijen.


Aanvullende beveiliging (Azure)bewerken

IP Filteringbewerken

Per API key kan een IP-adresreeks worden geconfigureerd als whitelist: - Gebruik - voor bereiken, ; voor meerdere bereiken - Ondersteunt IPv4 en IPv6 - Als slechts een protocol is geconfigureerd, wordt het andere geblokkeerd

Client Certificatesbewerken

Per API key kan een certificaat-thumbprint worden ingesteld. Bij gebruik van certificaten wijzigt de endpoint URL:

Type URL
Standaard https://customer.ultimo.net/api/v1/
Met certificaat https://api-customer.ultimo.net/api/v1/

Testenbewerken

Ultimo genereert API key-specifieke Swagger documentatie met alle beschikbare commando's en testfunctionaliteit.

Tool URL
Swagger https://customer.ultimo.net/swagger
Postman postman.com

Speciale tekensbewerken

Forward slashes in IDsbewerken

Forward slashes worden als pad-scheiders geinterpreteerd. Gebruik een filter als alternatief:

# Werkt NIET:
GET .../object/Building('01/02')

# Werkt WEL:
GET .../object/Building?filter=Id eq '01/02'

Beperkte tekens in IDsbewerken

De volgende tekens zijn niet toegestaan: < > * % & : \ ?

Gebruik URL encoding:

GET .../object/Building?filter=Id+eq+'%3C%3E*%25%26%3A%3F'

Aanhalingstekens in filtersbewerken

Enkele aanhalingstekens in filterwaarden moeten verdubbeld worden:

GET .../object/Building?filter=Description eq 'single''quote'

Gerelateerde artikelenbewerken