Read and write in Mobigo over HTTP: tasks, customers, products, quotes, orders, contracts, time, materials and documents.
You need a clientId and an API key from whoever operates Mobigo. The key is shown once, when the integration is created.
curl -H "Authorization: Bearer mk_..." \
"https://mobigo-api.kundens-server.se/v1/whoami"
# → {"integration":"Webshop","tenant":"Demo","scopes":["tasks:read","tasks:write"]}
/v1/whoami tells you which integration the key belongs to and what it may do.
curl -X POST "https://mobigo-api.kundens-server.se/v1/tasks" \
-H "Authorization: Bearer mk_..." \
-H "Idempotency-Key: order-4711" \
-H "Content-Type: application/json" \
-d '{
"customerNr": "10003",
"taskText": "Lift service",
"materials": [{ "productNr": "A10001", "quantity": 3 }],
"times": [{ "timeType": "Normal time", "hours": 2 }]
}'
# → {"nr":"U039071","id":105933,
# "materials":[{"id":44821,"productNr":"A10001"}],
# "times":[{"id":100636,"timeType":"Normal time"}]}
The response carries an id for every line created. With that id the line can
be updated directly through PATCH /v1/materials/{id} or
PATCH /v1/times/{id}.
materials[1]: Ingen artikel med nummer "FINNS-EJ".
Everything under /v1 requires Authorization: Bearer <value>.
The value is either the key itself or a token. Both give the same company, the same
permissions and the same IP restriction.
| Value | What | Lifetime |
|---|---|---|
Bearer mk_… | The API key | Until revoked |
Bearer mt_… | Token from POST /v1/token |
At most 60 minutes |
Bearer mk_… the long-lived
secret travels with every call. Anything that logs headers along the way — a
reverse proxy, an APM tool, a shared Postman collection — then captures a key that is
valid until someone revokes it. A token leaked the same way dies within the hour.
Tokens are fetched with client_credentials:
curl -X POST "https://mobigo-api.kundens-server.se/v1/token" \
-H "Content-Type: application/json" \
-d '{"clientId":"f287ea5c…","clientSecret":"mk_…"}'
# → {"access_token":"mt_…","token_type":"Bearer","expires_in":3600,
# "scope":"tasks:read tasks:write"}
Fetch a new one when expires_in has passed, or when a call answers
401. There is no refresh token — fetching is one call, and costs less than
keeping track of two kinds of token.
It is created by whoever operates Mobigo, on the server, with
SitterIT.Mobigo.Api keys create. You cannot create it yourself — by design:
the key is tied to a company and to a Mobigo signature, and both are the customer's
decisions to make.
Ask for three things:
| You get | Which is |
|---|---|
| The address | e.g. https://mobigo-api.kundens-server.se |
clientId |
The integration's id. Only needed for POST /v1/token |
The API key mk_… |
Shown once when the integration is created, and never retrievable again |
Say at the same time which scopes you need — they are set when the key is created and cannot be widened afterwards without a new key.
Every resource has two: <resource>:read and
<resource>:write. Without the scope the API answers 403.
On top of them, Mobigo's own permissions apply to the signature the key works as. A wide scope therefore never grants more than that signature may do in Mobigo.
POST /v1/tasks accepts the task's whole writable surface. Only
customerNr is required. An omitted field is left untouched.
| Field | Type | Description |
|---|---|---|
customerNr | text | Required. Must exist in Mobigo |
nr | text | Task number. Omitted, Mobigo's number series takes over |
taskText | text | Task text |
taskNote | text | Task note |
actionText | text | Action text |
actionNote | text | Action note |
customerOrderer | text | Who ordered, at the customer |
customerRef | text | The customer's reference |
ownerSign | text | Owner. Omitted, the integration's own signature is used |
userSigns | list | Assigned users. Every signature must exist |
planStartDate | date | Start alone means one day |
planStopDate | date | End of the planned period |
planDateType | text | FromTo, Day, Week, Month
or Fixed. Defaults to Day |
estimatedTime | number | Estimated hours |
projectNr | text | Project. Must exist |
priorityName | text | The priority's name in the customer's Mobigo |
priceListNr | text | Price list. Drives the pricing of the lines |
object1Nr–object4Nr | text | The customer's own objects. The name is taken from the record |
customT1–customT3 | text | Own text fields |
customA1–customA3 | text | Own note fields |
extraFields | object | The customer's own fields. See Extra fields |
materials | list | Material lines in the same call |
times | list | Time lines in the same call |
curl -X POST "https://mobigo-api.kundens-server.se/v1/tasks" \
-H "Authorization: Bearer mk_..." \
-H "Idempotency-Key: order-4712" \
-H "Content-Type: application/json" \
-d '{
"customerNr": "10003",
"taskText": "Half-year service, lift 3",
"taskNote": "Customer wants notice the day before.",
"customerRef": "Order 88214",
"ownerSign": "AN",
"userSigns": ["AN", "PL"],
"planStartDate": "2026-09-14",
"planStopDate": "2026-09-16",
"planDateType": "FromTo",
"estimatedTime": 6.5,
"projectNr": "P-204",
"priorityName": "High",
"object1Nr": "LIFT-0031",
"customT1": "Service contract",
"extraFields": { "Visma_Ordernr.": "VO-4711" },
"materials": [{ "productNr": "A10001", "quantity": 3 }],
"times": [{ "timeType": "Normal time", "hours": 4 }]
}'
POST /v1/tasks/{nr}/status, which goes through Mobigo's own
transition rules.
Both are created with their lines in one call. If any line fails the whole record is rolled back — half an order looks like a real one and never gets completed.
curl -X POST "https://mobigo-api.kundens-server.se/v1/orders" \
-H "Authorization: Bearer mk_..." \
-H "Idempotency-Key: order-B-4711" \
-H "Content-Type: application/json" \
-d '{
"customerNr": "10018",
"supplierNr": "L00001",
"userSign": "AN",
"customerOrderer": "Anna Beställare",
"orderDate": "2026-08-20",
"deliveryDate": "2026-09-14",
"deliveryName": "Ekehamn Bygg AB",
"deliveryAddressLine1": "Verkstadsgatan 8",
"deliveryPostalCode": "417 05",
"deliveryCity": "Göteborg",
"internalNote": "Call before delivery",
"lines": [
{ "productNr": "10053", "quantity": 5, "supplierNr": "L00001" },
{ "productNr": "A10001", "quantity": 2 },
{ "productNr": "A10002", "quantity": 1, "price": 1250 }
]
}'
# → { "Nr": "B00065", "Status": "Planned", "CustomerNr": "10018",
# "SupplierNr": "L00001", "OrderDate": "2026-08-20T00:00:00", … }
The number comes from Mobigo's number series. orderDate defaults to today,
and the product's unit and name are taken from the product register.
supplierNr only when that
line is bought from someone else.
price and the line stands at
zero.
POST https://mobigo-api.kundens-server.se/v1/orders/B00065/lines
Idempotency-Key: line-B00065-4
{ "productNr": "A10003", "quantity": 2, "deliveryDate": "2026-09-20" }
# → { "id": 10011, "orderNr": "B00065", "productNr": "A10003", "totalPrice": 1900 }
PATCH touches only the fields you send. The rest are left as Mobigo has them.
curl -X PATCH "https://mobigo-api.kundens-server.se/v1/orders/B00065" \
-H "Authorization: Bearer mk_..." \
-H "Idempotency-Key: order-B00065-delivery" \
-H "Content-Type: application/json" \
-d '{ "deliveryDate": "2026-09-21",
"internalNote": "Delivery moved, customer informed" }'
Individual lines are changed by their id:
PATCH https://mobigo-api.kundens-server.se/v1/orderlines/10011
Idempotency-Key: line-10011-quantity
{ "quantity": 3, "discountPct": 10 }
A quote carries material and time lines, like a task — not order lines.
curl -X POST "https://mobigo-api.kundens-server.se/v1/quotes" \
-H "Authorization: Bearer mk_..." \
-H "Idempotency-Key: quote-4711" \
-H "Content-Type: application/json" \
-d '{
"customerNr": "10018",
"description": "Lift service, half year",
"ownerSign": "AN",
"materials": [
{ "productNr": "A10001", "quantity": 3 },
{ "productNr": "A10002", "quantity": 1 }
],
"times": [
{ "timeType": "Normal time", "hours": 4 },
{ "timeType": "Normal time", "hours": 2.5 }
]
}'
quoteDate defaults to today and the validity to 30 days when omitted. Get the
time types' names from GET /v1/timetypes.
Material and time lines hang off different kinds of record. ownerType says
which — task, quote, order or
contract. Omitted together with ownerNr, a task is assumed.
GET https://mobigo-api.kundens-server.se/v1/materials?ownerType=quote&ownerNr=Q00005
GET https://mobigo-api.kundens-server.se/v1/times?ownerType=quote&ownerNr=Q00005
GET https://mobigo-api.kundens-server.se/v1/orderlines?orderNr=B00065
Every line says what it hangs off, in OwnerNr and OwnerType.
A call can arrive without its response getting back. Without protection the retry gives the customer two identical tasks.
Idempotency-Key is a string you choose per operation. When the same key comes
back with the same content, the API answers with the first response
instead of doing the work again.
The response echoes the key back and says whether it is a stored response. The echo is present on error responses too.
Idempotency-Key: order-4711
Idempotency-Replayed: false ← the call ran now
Idempotency-Replayed: true ← you got the receipt for an earlier call
Idempotency-Key: order-4711 → {"nr":"U039075"}
Idempotency-Key: order-4711 → {"nr":"U039075"} ← same task, nothing new
Idempotency-Key: order-4712 → {"nr":"U039076"} ← new order, new task
Idempotency-Key: order-4711 + changed content → 409
without the header → 400
Every writing call requires the header: POST and PATCH, on all
resources.
The response looks the same for every resource:
{ "items": [ … ], "nextCursor": "105935", "page": 1, "total": 65233 }
limit defaults to 50 and is capped at 500.
total is null for the resources Mobigo cannot count.
Constant speed however deep you go. Use it when syncing.
GET https://mobigo-api.kundens-server.se/v1/customers?limit=500
# → "nextCursor": "105935"
GET https://mobigo-api.kundens-server.se/v1/customers?limit=500&cursor=105935
nextCursor is where the previous page ended. null means there is
nothing more to fetch.
GET https://mobigo-api.kundens-server.se/v1/customers?limit=50&page=3
page counts from the start of the result list,
and the list is sorted newest first. If ten records are created while you page, every older
row is pushed ten steps down, so the next page starts with rows you already fetched. The
cursor does not count — it continues from the last row you got — and is therefore immune.
GET https://mobigo-api.kundens-server.se/v1/tasks?modifiedSince=2026-08-19T00:00:00Z
Store Modified from the previous run and ask for everything changed since.
Contact persons and extra addresses are records of their own, hanging off a customer, a
supplier or an object. They are identified by Id, not by a number.
GET https://mobigo-api.kundens-server.se/v1/contacts?customerNr=10003
# → { "items": [ { "Id": "11311", "CustomerNr": "10003", "Name": "Linus Sedin",
# "Position": "Property manager", "Mobile": "070-1234567",
# "Email": "[email protected]", "MostImportant": true } ],
# "nextCursor": null, "page": 1 }
Without customerNr the whole register is listed. name is a free
text search on the name.
GET https://mobigo-api.kundens-server.se/v1/contacts?limit=500
GET https://mobigo-api.kundens-server.se/v1/contacts?name=Sedin
GET https://mobigo-api.kundens-server.se/v1/contacts?modifiedSince=2026-08-01T00:00:00Z
POST https://mobigo-api.kundens-server.se/v1/contacts
Idempotency-Key: contact-10003-linus
{ "customerNr": "10003", "name": "Linus Sedin",
"position": "Property manager", "email": "[email protected]",
"mobile": "070-1234567", "mostImportant": true }
Send them in the same call. If any contact is rejected the whole customer is rolled back.
POST https://mobigo-api.kundens-server.se/v1/customers
Idempotency-Key: customer-storfors
{
"name": "Storfors Service AB",
"addressLine1": "Storgatan 1",
"postalCode": "412 50",
"city": "Göteborg",
"contacts": [
{ "name": "Linus Sedin", "position": "Property manager",
"email": "[email protected]", "mostImportant": true },
{ "name": "Anna Ek", "position": "Finance", "email": "[email protected]" }
]
}
The number was omitted, so Mobigo's number series assigned it. The response contains the
customer with its Nr.
Same fields, own path: /v1/suppliercontacts with supplierNr.
Extra addresses — delivery, invoice, visiting. The owner must be given, because the address table is shared between customers, suppliers and objects.
GET https://mobigo-api.kundens-server.se/v1/addresses?customerNr=10003
GET https://mobigo-api.kundens-server.se/v1/addresses?objectNr=O1-11840&level=1
The customer's own fields, defined in their Mobigo. They are named whatever the customer called them and always arrive as strings.
Every resource describes its extra fields: key, type, whether it can be written and which values a list field allows.
GET https://mobigo-api.kundens-server.se/v1/customers/extra-fields
# → { "items": [
# { "Key": "Avtals_typ", "Name": "Contract type", "Category": "Contract",
# "Type": "Combo", "Writable": true, "ReadOnly": false, "Computed": false,
# "Options": ["Basic service", "Incentive", "On call"] },
# { "Key": "Startdatum_avtal", "Name": "Contract start",
# "Type": "Date", "Writable": true },
# { "Key": "Region", "Name": "Region",
# "Type": "Sql", "Writable": false, "Computed": true }
# ],
# "count": 59 }
Writable: false means a write is rejected — the field is either read only or
computed by Mobigo. Options is present on list fields only.
The same path exists on every resource, tasks included:
GET https://mobigo-api.kundens-server.se/v1/tasks/extra-fields.
GET https://mobigo-api.kundens-server.se/v1/customers/10003
# → {
# "Nr": "10003",
# "Name": "Storfors Service AB",
# "ExtraFields": {
# "Avtals_typ": "Helservice",
# "Startdatum_avtal": "2024-01-01",
# "Index_regleras": ""
# }
# }
Empty fields are included as empty strings, so you can see which fields exist. That is also how you get the exact names.
curl -X PATCH "https://mobigo-api.kundens-server.se/v1/customers/10003" \
-H "Authorization: Bearer mk_..." \
-H "Idempotency-Key: sync-10003-v4" \
-H "Content-Type: application/json" \
-d '{ "extraFields": { "Avtals_typ": "Delservice", "Avtals_nr": "A-9912" } }'
The same object, in the same call that creates the task:
curl -X POST "https://mobigo-api.kundens-server.se/v1/tasks" \
-H "Authorization: Bearer mk_..." \
-H "Idempotency-Key: order-4713" \
-H "Content-Type: application/json" \
-d '{
"customerNr": "10003",
"taskText": "Service",
"extraFields": {
"Visma_Ordernr.": "VO-4711",
"Avtals_typ": "Helservice",
"Startdatum": "2026-09-14"
}
}'
The key is the field's name in the customer's Mobigo, exactly as it appears in
ExtraFields when you read the record. Dots and underscores are part of the
name. The value is always a string, dates and numbers included.
| Response | Meaning |
|---|---|
Posten har inget extrafält som heter "X". Giltiga: … |
The fields are defined in Mobigo. The response lists the valid names |
Extrafältet "Region" beräknas av Mobigo (typ Sql) och går inte att
skriva till. |
The field is computed at display time. A value sent there disappears silently |
Värdet "imorgon" passar inte extrafältet "TestDatum", som är av typen
Date. |
Mobigo silently discards values it cannot parse. The API reads back and objects |
The values other calls require. They belong to the customer, so they cannot be listed in advance. All of them are read only — they are set in Mobigo's administration.
| Path | Gives | Needed for |
|---|---|---|
GET /v1/users | Signatures and names | ownerSign, userSigns, userSign |
GET /v1/timetypes | The time types' names | timeType on a time line |
GET /v1/pricelists | The price lists' numbers | priceListNr |
GET /v1/field-names | The customer's labels for standard fields | showing fields the user recognises |
GET https://mobigo-api.kundens-server.se/v1/timetypes
# → { "items": [ { "Name": "Normal time", "Unit": "h", "BasePrice": 750,
# "InternalType": false, "SpecOptions": ["Diagnosis", "Replacement"] } ] }
Custom1–Custom4 are called something else at the customer.
/v1/field-names says what.
GET https://mobigo-api.kundens-server.se/v1/field-names
# → { "items": [
# { "DbFieldName": "CustCustom1", "UserFieldName": "Postal address",
# "ListOnly": false, "Hidden": false },
# { "DbFieldName": "TaskCustom1", "UserFieldName": "Service contract",
# "ListOnly": true, "Hidden": false }
# ] }
DbFieldName is the name this API uses. UserFieldName is the
customer's label. Hidden means the field is not shown in Mobigo.
Mobigo geocodes its own records, against the map service and the rules the customer has set up. This API reads that position and can ask Mobigo to recalculate it, but never geocodes on its own.
GET https://mobigo-api.kundens-server.se/v1/tasks/U039079/location
# → { "Latitude": 57.7089, "Longitude": 11.9746,
# "Address": "Storgatan 1, 412 50 Göteborg",
# "Status": "Ok", "SourceType": "Address", "Provider": "GoogleMaps",
# "Fixed": false, "Ambiguous": false }
?locate=true recalculates the position first, from the task's customer,
object or address. ?force=true redoes it even when a position already exists.
Latitude and Longitude are null when the record has
no position. Status says why: NoAddress,
AddressNotFound, AddressInvalid, Pending or
Error.
For addresses that cannot be looked up. A fixed position is never overwritten by Mobigo's own geocoding.
PUT https://mobigo-api.kundens-server.se/v1/tasks/U039079/location
Idempotency-Key: pos-U039079
{ "latitude": 57.7089, "longitude": 11.9746,
"address": "Building site, Ringön" }
The same two paths exist on every resource:
/v1/customers/10003/location,
/v1/objects1/O1-11840/location and so on.
Three calls: attach, list and fetch. The list and the content are separate — a task can carry attachments of tens of megabytes.
POST /v1/tasks/U039079/documents
Idempotency-Key: attachment-4711
{ "name": "workorder.pdf", "contentBase64": "JVBERi0xLjQK..." }
201 { "id": 60728, "nr": "U039079", "name": "workorder.pdf" }
GET /v1/tasks/U039079/documents
{ "items": [ { "Id": 60728, "Name": "workorder.pdf", "DocType": "EMBED",
"Kind": "embedded", "IsInternal": false, "HasContent": true,
"Modified": "2026-08-19T22:41:23.72" } ],
"count": 1 }
GET /v1/tasks/U039079/documents/60728
200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename=workorder.pdf
<the file's content>
Kind says what the document is:
| Kind | What it is | What you get |
|---|---|---|
embedded | The file is stored in Mobigo | the file as is |
link | Points at a path outside Mobigo | the file, fetched from that path |
html | HTML content in Mobigo | |
other | Only has a print template | PDF, rendered from the template |
Mobigo's own document handling does the work in all four cases. That is why
Content-Type can be application/pdf even when the file name ends
in something else — the type comes from the content, not from the name. If the name has no
extension, the right one is added in Content-Disposition.
A link whose path is unreachable from the server gives 422 saying so, not an
empty file.
All errors are application/problem+json per RFC 9457.
{ "type": "https://sitterit.se/problems/command_failed",
"title": "command_failed",
"status": 422,
"detail": "Ingen artikel med nummer FINNS-EJ." }
| Code | Meaning | What you do |
|---|---|---|
| 400 | The call is wrong: missing Idempotency-Key, unknown field
name, malformed JSON | Fix the call |
| 401 | The key is missing, wrong or revoked | Check the key |
| 403 | The key is valid but lacks the scope | Ask for a wider scope |
| 409 | Idempotency-Key reused with different content |
Use a new key |
| 413 | The request is larger than 32 MB. Base64 makes documents about a third larger than the file | Send fewer or smaller documents |
| 422 | The call was well formed but Mobigo said no. The text is Mobigo's own | Read the text |
| 429 | Too many calls | Wait per Retry-After |
| 503 | The engine is down (engine_unreachable) or full
(engine_busy) | Retry per Retry-After |
| 504 | The engine did not answer in time (engine_timeout) |
Retry with the same Idempotency-Key |
503 the engine never received
the call and a retry is safe. On 504 it may have written before it stopped
answering — retry with the same Idempotency-Key.
X-Request-IdEvery response carries X-Request-Id. Error responses have the same value in
the requestId field. Quote it in support cases.
{ "type": "https://sitterit.se/problems/command_failed",
"title": "command_failed",
"status": 422,
"detail": "Ingen artikel med nummer FINNS-EJ.",
"requestId": "8d1f55fc02754b1e" }
If you send your own X-Request-Id it is used instead and echoed back. Allowed
characters are letters, digits and - _ . :, at most 64.
Every resource has the same shape: GET /v1/<resource> for a list, GET /v1/<resource>/<key> for one record, and where allowed POST and PATCH.
customers products suppliers quotes orders orderlines contracts resources projects contacts suppliercontacts addresses users timetypes pricelists objects1 objects2 objects3 objects4 times materials
GET /v1/customers, GET /v1/customers/<Nr>, POST /v1/customers, PATCH /v1/customers/<Nr>
Scopes: customers:read, customers:write
Filters: modifiedSince, modifiedBefore, name, category
| Field | Type | Writable |
|---|---|---|
Nr | text | yes |
Status | text | |
Name | text | yes |
Category | text | yes |
AddressLine1 | text | yes |
AddressLine2 | text | yes |
PostalCode | text | yes |
City | text | yes |
State | text | yes |
Country | text | yes |
Phone | text | yes |
Fax | text | yes |
Email | text | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) | |
ExtraFields | object, string → string | yes |
GET /v1/products, GET /v1/products/<Nr>, POST /v1/products, PATCH /v1/products/<Nr>
Scopes: products:read, products:write
Filters: modifiedSince, modifiedBefore, name, category
| Field | Type | Writable |
|---|---|---|
Nr | text | yes |
Status | text | |
Name | text | yes |
Category | text | yes |
Unit | text | yes |
BasePrice | number | yes |
PurchasePrice | number | yes |
CostPrice | number | yes |
Barcode | text | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) | |
ExtraFields | object, string → string | yes |
GET /v1/suppliers, GET /v1/suppliers/<Nr>, POST /v1/suppliers, PATCH /v1/suppliers/<Nr>
Scopes: suppliers:read, suppliers:write
Filters: modifiedSince, modifiedBefore, name, category
| Field | Type | Writable |
|---|---|---|
Nr | text | yes |
Status | text | |
Name | text | yes |
Category | text | yes |
AddressLine1 | text | yes |
AddressLine2 | text | yes |
PostalCode | text | yes |
City | text | yes |
State | text | yes |
Country | text | yes |
Phone | text | yes |
Fax | text | yes |
Email | text | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) | |
ExtraFields | object, string → string | yes |
GET /v1/quotes, GET /v1/quotes/<Nr>, POST /v1/quotes, PATCH /v1/quotes/<Nr>
Scopes: quotes:read, quotes:write
Filters: modifiedSince, modifiedBefore, status, customerNr
| Field | Type | Writable |
|---|---|---|
Nr | text | yes |
Status | text | |
CustomerNr | text | yes |
CustomerName | text | |
CustomerOrderer | text | yes |
CustomerRef | text | yes |
Description | text | yes |
Note | text | yes |
OwnerSign | text | yes |
QuoteDate | date (ISO 8601) | yes |
ValidUntilDate | date (ISO 8601) | yes |
AcceptedDate | date (ISO 8601) | yes |
PlanStartDate | date (ISO 8601) | yes |
PlanStopDate | date (ISO 8601) | yes |
PlanDateType | text | yes |
Object1Nr | text | yes |
Object1Name | text | |
Object2Nr | text | yes |
Object2Name | text | |
Object3Nr | text | yes |
Object3Name | text | |
Object4Nr | text | yes |
Object4Name | text | |
CreatedBy | text | |
CreatedDate | date (ISO 8601) | |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Modified | date (ISO 8601) | |
ExtraFields | object, string → string | yes |
GET /v1/orders, GET /v1/orders/<Nr>, POST /v1/orders, PATCH /v1/orders/<Nr>
Scopes: orders:read, orders:write
Filters: modifiedSince, modifiedBefore, status, customerNr, supplierNr
| Field | Type | Writable |
|---|---|---|
Nr | text | yes |
Status | text | |
CustomerNr | text | yes |
CustomerName | text | |
CustomerOrderer | text | yes |
SupplierNr | text | yes |
UserSign | text | yes |
OrderDate | date (ISO 8601) | yes |
DeliveryDate | date (ISO 8601) | yes |
DeliveryName | text | yes |
InternalNote | text | yes |
Note | text | yes |
DeliveryAddressLine1 | text | yes |
DeliveryAddressLine2 | text | yes |
DeliveryPostalCode | text | yes |
DeliveryCity | text | yes |
DeliveryState | text | yes |
DeliveryCountry | text | yes |
DeliveryAddressId | text | yes |
CreatedBy | text | |
CreatedDate | date (ISO 8601) | |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Modified | date (ISO 8601) | |
ExtraFields | object, string → string | yes |
GET /v1/orderlines, GET /v1/orderlines/<Id>, PATCH /v1/orderlines/<Id>
Scopes: orderlines:read, orderlines:write
Filters: modifiedSince, modifiedBefore, orderNr, includeZeroQuantity
| Field | Type | Writable |
|---|---|---|
Id | text | |
OrderNr | text | yes |
ProductNr | text | yes |
ProductName | text | |
Quantity | number | yes |
Unit | text | yes |
Price | number | yes |
PurchasePrice | number | yes |
PriceListNr | text | yes |
PurchasePriceListNr | text | yes |
SupplierNr | text | yes |
DiscountPct | number | yes |
DiscountPrice | number | yes |
TotalPrice | number | |
DeliveryDate | date (ISO 8601) | yes |
Note | text | yes |
InternalNote | text | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Modified | date (ISO 8601) |
GET /v1/contracts, GET /v1/contracts/<Nr>, POST /v1/contracts, PATCH /v1/contracts/<Nr>
Scopes: contracts:read, contracts:write
Filters: modifiedSince, modifiedBefore, status, customerNr
| Field | Type | Writable |
|---|---|---|
Nr | text | yes |
Status | text | |
CustomerNr | text | yes |
CustomerName | text | |
CustomerRef | text | yes |
CustomerOrderer | text | yes |
StartDate | date (ISO 8601) | yes |
StopDate | date (ISO 8601) | yes |
LastGenerationDate | date (ISO 8601) | |
GeneratedStartDate | date (ISO 8601) | yes |
GeneratedStopDate | date (ISO 8601) | yes |
IsGenerated | true/false | |
Object1Nr | text | yes |
Object1Name | text | |
Object2Nr | text | yes |
Object2Name | text | |
Object3Nr | text | yes |
Object3Name | text | |
Object4Nr | text | yes |
Object4Name | text | |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) | |
ExtraFields | object, string → string | yes |
GET /v1/resources, GET /v1/resources/<Nr>, POST /v1/resources, PATCH /v1/resources/<Nr>
Scopes: resources:read, resources:write
Filters: modifiedSince, modifiedBefore, name, category
| Field | Type | Writable |
|---|---|---|
Nr | text | yes |
Status | text | |
Name | text | yes |
Category | text | yes |
ProductNr | text | yes |
LogUnit | text | yes |
BasePrice | number | yes |
CostPrice | number | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) | |
ExtraFields | object, string → string | yes |
GET /v1/projects, GET /v1/projects/<Nr>, POST /v1/projects, PATCH /v1/projects/<Nr>
Scopes: projects:read, projects:write
Filters: modifiedSince, modifiedBefore, customerNr, owner, status
| Field | Type | Writable |
|---|---|---|
Nr | text | yes |
Status | text | |
Name | text | yes |
CustomerNr | text | yes |
CustomerName | text | |
CustomerRef | text | yes |
CustomerOrderer | text | yes |
Owner | text | yes |
PlanStartDate | date (ISO 8601) | yes |
PlanStopDate | date (ISO 8601) | yes |
Object1Nr | text | yes |
Object1Name | text | |
Object2Nr | text | yes |
Object2Name | text | |
Object3Nr | text | yes |
Object3Name | text | |
Object4Nr | text | yes |
Object4Name | text | |
CreatedBy | text | |
CreatedDate | date (ISO 8601) | |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) | |
ExtraFields | object, string → string | yes |
GET /v1/contacts, GET /v1/contacts/<Id>, POST /v1/contacts, PATCH /v1/contacts/<Id>
Scopes: contacts:read, contacts:write
Filters: modifiedSince, modifiedBefore, customerNr, name
| Field | Type | Writable |
|---|---|---|
Id | text | |
CustomerNr | text | yes |
Status | text | |
Name | text | yes |
Position | text | yes |
Phone | text | yes |
Mobile | text | yes |
Fax | text | yes |
Email | text | yes |
MostImportant | true/false | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) |
GET /v1/suppliercontacts, GET /v1/suppliercontacts/<Id>, POST /v1/suppliercontacts, PATCH /v1/suppliercontacts/<Id>
Scopes: suppliercontacts:read, suppliercontacts:write
Filters: modifiedSince, modifiedBefore, supplierNr, name
| Field | Type | Writable |
|---|---|---|
Id | text | |
SupplierNr | text | yes |
Status | text | |
Name | text | yes |
Position | text | yes |
Phone | text | yes |
Mobile | text | yes |
Fax | text | yes |
Email | text | yes |
MostImportant | true/false | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) |
GET /v1/addresses, GET /v1/addresses/<Id>, POST /v1/addresses, PATCH /v1/addresses/<Id>
Scopes: addresses:read, addresses:write
Filters: modifiedSince, modifiedBefore, customerNr, supplierNr, objectNr, level
| Field | Type | Writable |
|---|---|---|
Id | text | |
CustomerNr | text | yes |
SupplierNr | text | yes |
ObjectNr | text | yes |
Level | number | yes |
Status | text | |
Name | text | yes |
MostImportant | true/false | yes |
AddressLine1 | text | yes |
AddressLine2 | text | yes |
PostalCode | text | yes |
City | text | yes |
State | text | yes |
Country | text | yes |
Phone | text | yes |
Fax | text | yes |
Email | text | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) |
GET /v1/users, GET /v1/users/<Sign>
Scopes: users:read, users:write
Filters: modifiedSince, modifiedBefore, name, includePassive, includeArchived
| Field | Type | Writable |
|---|---|---|
Sign | text | |
Name | text | |
Status | text | |
Phone | text | |
Mobile | text | |
Email | text | |
Custom1 | text | |
Custom2 | text | |
Custom3 | text | |
Custom4 | text | |
Note | text | |
Modified | date (ISO 8601) |
GET /v1/timetypes, GET /v1/timetypes/<Name>
Scopes: timetypes:read, timetypes:write
Filters: modifiedSince, modifiedBefore, billable, includeArchived
| Field | Type | Writable |
|---|---|---|
Name | text | |
Status | text | |
Unit | text | |
BasePrice | number | |
CostPrice | number | |
ProductNr | text | |
InternalType | true/false | |
ResourceType | true/false | |
BookingType | true/false | |
Summable | true/false | |
ShowInCalendar | true/false | |
Color | text | |
SpecOptions | text | |
DateType | text | |
Custom1 | text | |
Custom2 | text | |
Custom3 | text | |
Modified | date (ISO 8601) |
GET /v1/pricelists, GET /v1/pricelists/<Nr>
Scopes: pricelists:read, pricelists:write
Filters: modifiedSince, modifiedBefore, includeArchived
| Field | Type | Writable |
|---|---|---|
Nr | text | |
Name | text | |
Status | text | |
HasMarkupPct | true/false | |
MarkupPct | number | |
Note | text | |
Modified | date (ISO 8601) |
GET /v1/objects1, GET /v1/objects1/<Nr>, POST /v1/objects1, PATCH /v1/objects1/<Nr>
Scopes: objects1:read, objects1:write
Filters: modifiedSince, modifiedBefore, name, category, customerNr
| Field | Type | Writable |
|---|---|---|
Nr | text | yes |
Status | text | |
Name | text | yes |
Category | text | yes |
CustomerNr | text | yes |
Level | number | |
ParentNr | text | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) | |
ExtraFields | object, string → string | yes |
GET /v1/objects2, GET /v1/objects2/<Nr>, POST /v1/objects2, PATCH /v1/objects2/<Nr>
Scopes: objects2:read, objects2:write
Filters: modifiedSince, modifiedBefore, name, category, customerNr
| Field | Type | Writable |
|---|---|---|
Nr | text | yes |
Status | text | |
Name | text | yes |
Category | text | yes |
CustomerNr | text | yes |
Level | number | |
ParentNr | text | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) | |
ExtraFields | object, string → string | yes |
GET /v1/objects3, GET /v1/objects3/<Nr>, POST /v1/objects3, PATCH /v1/objects3/<Nr>
Scopes: objects3:read, objects3:write
Filters: modifiedSince, modifiedBefore, name, category, customerNr
| Field | Type | Writable |
|---|---|---|
Nr | text | yes |
Status | text | |
Name | text | yes |
Category | text | yes |
CustomerNr | text | yes |
Level | number | |
ParentNr | text | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) | |
ExtraFields | object, string → string | yes |
GET /v1/objects4, GET /v1/objects4/<Nr>, POST /v1/objects4, PATCH /v1/objects4/<Nr>
Scopes: objects4:read, objects4:write
Filters: modifiedSince, modifiedBefore, name, category, customerNr
| Field | Type | Writable |
|---|---|---|
Nr | text | yes |
Status | text | |
Name | text | yes |
Category | text | yes |
CustomerNr | text | yes |
Level | number | |
ParentNr | text | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Custom4 | text | yes |
Note | text | yes |
Modified | date (ISO 8601) | |
ExtraFields | object, string → string | yes |
GET /v1/times, GET /v1/times/<Id>, PATCH /v1/times/<Id>
Scopes: times:read, times:write
Filters: modifiedSince, modifiedBefore, ownerNr, ownerType, userSign, invoice
POST /v1/tasks/<nr>/times. A line without an owner never appears on the task, so that path does not exist here.| Field | Type | Writable |
|---|---|---|
Id | text | |
OwnerNr | text | |
TimeType | text | |
UserSign | text | yes |
Spec | text | yes |
Hours | number | yes |
InvoiceHours | number | yes |
Price | number | yes |
DiscountPct | number | yes |
Invoice | true/false | yes |
ResourceNr | text | yes |
CostPerUnit | number | yes |
TotalCost | number | yes |
Date | date (ISO 8601) | yes |
Sign1By | text | yes |
Sign1Date | date (ISO 8601) | yes |
Sign2By | text | yes |
Sign2Date | date (ISO 8601) | yes |
Modified | date (ISO 8601) |
GET /v1/materials, GET /v1/materials/<Id>, PATCH /v1/materials/<Id>
Scopes: materials:read, materials:write
Filters: modifiedSince, modifiedBefore, ownerNr, ownerType, productNr, invoice
POST /v1/tasks/<nr>/materials. A line without an owner never appears on the task, so that path does not exist here.| Field | Type | Writable |
|---|---|---|
Id | text | |
OwnerNr | text | |
ProductNr | text | |
ProductName | text | |
Unit | text | |
Note | text | yes |
UserSign | text | yes |
Quantity | number | yes |
InvoiceQuantity | number | yes |
Price | number | yes |
DiscountPct | number | yes |
Invoice | true/false | yes |
DeliveryDate | date (ISO 8601) | yes |
SupplierNr | text | yes |
PurchasePriceListNr | text | yes |
PurchasePrice | number | yes |
CostPerUnit | number | yes |
TotalCost | number | yes |
Custom1 | text | yes |
Custom2 | text | yes |
Custom3 | text | yes |
Sign1By | text | yes |
Sign1Date | date (ISO 8601) | yes |
Sign2By | text | yes |
Sign2Date | date (ISO 8601) | yes |
Modified | date (ISO 8601) |