Minimal target import
Use this payload when no customer mapping is needed yet.
{
"externalId": "JOB-2026-000918",
"title": "Maintenance visit",
"description": "Check refrigeration unit and document status.",
"planning": {
"priority": "High",
"estimatedWorkMinutes": 45,
"dueDate": "2026-07-01"
}
}
Target import with Customer Mapping
This request sends customer, location and contact context with the job. Ordinavo maps or creates the related records depending on the Integration Client settings and scopes.
POST
/inbound/targets
Required scope: inbound.targets.write + customers.map
{
"externalId": "JOB-2026-000918",
"title": "Maintenance visit",
"description": "Check refrigeration unit and document status.",
"customer": {
"externalId": "CUST-10042",
"customerNumber": "RRM-001",
"name": "Rhein-Ruhr Medical Supply"
},
"location": {
"externalId": "LOC-ESSEN-01",
"name": "Essen Center",
"street": "Hachestrasse 12",
"postalCode": "45127",
"city": "Essen",
"country": "DE",
"latitude": 51.451,
"longitude": 7.012,
"defaultEstimatedWorkMinutes": 45,
"defaultPriority": "High"
},
"contact": {
"externalId": "CONT-44",
"displayName": "Anna Weber",
"role": "Operations Manager",
"email": "anna.weber@example.com",
"phone": "+49 201 123456"
},
"planning": {
"priority": "High",
"estimatedWorkMinutes": 45,
"dueDate": "2026-07-01",
"preferredTimeWindowStart": "2026-07-01T08:00:00Z",
"preferredTimeWindowEnd": "2026-07-01T14:00:00Z"
},
"customFields": {
"serviceType": "Maintenance",
"assetId": "FRIDGE-221"
}
}
Batch import with multiple customers
POST
/inbound/targets/batch
Required scope: inbound.targets.batch.write + customers.map
{
"items": [
{
"externalId": "JOB-2026-000918",
"title": "Maintenance visit",
"customer": {
"externalId": "CUST-10042",
"customerNumber": "RRM-001",
"name": "Rhein-Ruhr Medical Supply"
},
"location": {
"externalId": "LOC-ESSEN-01",
"name": "Essen Center",
"city": "Essen",
"country": "DE"
},
"planning": {
"priority": "High",
"estimatedWorkMinutes": 45
}
},
{
"externalId": "JOB-2026-000919",
"title": "Branch inspection",
"customer": {
"externalId": "CUST-20019",
"customerNumber": "BR-019",
"name": "Berg Retail Group"
},
"location": {
"externalId": "LOC-BOCHUM-02",
"name": "Bochum Store",
"city": "Bochum",
"country": "DE"
},
"planning": {
"priority": "Normal",
"estimatedWorkMinutes": 30
}
}
]
}
Import response with Customer Mapping
Detailed mapping IDs are only returned when the API key has customers.read scope.
{
"importJobId": 123,
"status": "Accepted",
"items": [
{
"externalId": "JOB-2026-000918",
"status": "Imported",
"targetId": 456,
"customerMapping": {
"status": "Mapped",
"customerId": 12,
"customerLocationId": 34,
"customerContactId": 56,
"warnings": []
}
}
]
}
cURL: import with Customer Mapping
curl -X POST "https://ordinavo.de/api/connect/v1/inbound/targets" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: JOB-2026-000918" \
-d '{
"externalId": "JOB-2026-000918",
"title": "Maintenance visit",
"customer": {
"externalId": "CUST-10042",
"customerNumber": "RRM-001",
"name": "Rhein-Ruhr Medical Supply"
},
"location": {
"externalId": "LOC-ESSEN-01",
"name": "Essen Center",
"city": "Essen",
"country": "DE"
}
}'
C#: import with Customer Mapping
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
var client = new HttpClient
{
BaseAddress = new Uri("https://ordinavo.de/api/connect/v1/")
};
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var payload = new
{
externalId = "JOB-2026-000918",
title = "Maintenance visit",
customer = new
{
externalId = "CUST-10042",
customerNumber = "RRM-001",
name = "Rhein-Ruhr Medical Supply"
},
location = new
{
externalId = "LOC-ESSEN-01",
name = "Essen Center",
city = "Essen",
country = "DE"
},
planning = new
{
priority = "High",
estimatedWorkMinutes = 45
}
};
var json = JsonSerializer.Serialize(payload);
using var request = new HttpRequestMessage(HttpMethod.Post, "inbound/targets")
{
Content = new StringContent(json, Encoding.UTF8, "application/json")
};
request.Headers.Add("Idempotency-Key", "JOB-2026-000918");
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
Example workflows
- External system imports targets with customer context.
- Ordinavo maps customer, location and contact references.
- Developer polls ImportJob status.
- Manager creates a Smart Route Suggestion.
- Mobile employee completes the appointment and submits a visit report.
- External system receives VisitReport or Billing webhook events with CustomerContext.