Skip to content

Customers

API reference

Your debtors. Keyed on your customer number, which AIOTIC returns as customer.customer_id on orders. Accepts the sync key. Guide: Reference data · Event-driven sync.

List customers

GET/customer/listintegration or sync key

List all customers with pagination.

Parameters

NameInTypeRequiredDescription
pagequeryintegerPage number Default 1. Min 1.
sizequeryintegerItems per page Default 100. Min 1. Max 1000.

Responses

StatusDescriptionBody
200Successful ResponseCustomerListResponse
404Resource not foundErrorResponse
422Validation ErrorHTTPValidationError
bash
curl -X GET "https://acme.aiotic.ai/customer/list?page=1&size=100" -H "X-API-Key: $AIOTIC_API_KEY"
python
for c in client.customers.iter_all(): ...

Search customers (semantic)

GET/customer/search/{query}integration or sync key

Fuzzy search over name, address and contact fields, comparable to how AIOTIC matches the sender of an order to your customer records. Handy to check how well your master data resolves.

Parameters

NameInTypeRequiredDescription
querypathstringyesSearch query text
top_kqueryintegerTop items by similarity score Default 10. Min 1. Max 1000.

Responses

StatusDescriptionBody
200Successful ResponseCustomerSearchResponse
404Resource not foundErrorResponse
422Validation ErrorHTTPValidationError
bash
curl -X GET "https://acme.aiotic.ai/customer/search/<query>?top_k=10" -H "X-API-Key: $AIOTIC_API_KEY"
python
client.customers.search("lumitech apeldoorn", top_k=3).items

Get a customer

GET/customer/{customer_number}integration or sync key

Get a specific customer by ID.

Parameters

NameInTypeRequiredDescription
customer_numberpathstringyesUnique customer number

Responses

StatusDescriptionBody
200Successful ResponseCustomer
404Resource not foundErrorResponse
422Validation ErrorHTTPValidationError
bash
curl -X GET "https://acme.aiotic.ai/customer/<customer_number>" -H "X-API-Key: $AIOTIC_API_KEY"
python
client.customers.get("58931")

Create or update a customer (upsert)

PUT/customer/{customer_number}integration or sync key

Idempotent upsert keyed on your customer (debtor) number. The number is what AIOTIC returns as customer.customer_id on every order it identifies for this customer. Populate as many fields as you have — name, address, VAT, e-mail and phone all improve identification. Response status is 202 Accepted.

Parameters

NameInTypeRequiredDescription
customer_numberpathstringyesUnique customer number

Request bodyapplication/json

Fields accepted when creating or updating a customer. All optional; the more you fill, the better identification works.

FieldTypeRequiredDescription
idstring | nullUnique customer identifier (UUID, auto-generated if not provided)
namestring | nullCompany name
postal_codestring | nullPostal code
citystring | nullCity
addressstring | nullAddress
contact_personstring | nullContact person
phone_numberstring | nullPhone number
vat_numberstring | nullBTW (VAT) number
emailstring | nullCustomer email
coc_numberstring | nullChamber of Commerce number
home_pagestring | nullCompany website URL
similaritynumber | nullSimilarity score

Responses

StatusDescriptionBody
202Successful ResponseCustomer
404Resource not foundErrorResponse
422Validation ErrorHTTPValidationError
bash
curl -X PUT "https://acme.aiotic.ai/customer/<customer_number>" -H "X-API-Key: $AIOTIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"id":"550e8400-e29b-41d4-a716-446655440000","name":"string","postal_code":"string","city":"string","address":"string","contact_person":"string","phone_number":"string","vat_number":"string","email":"string","coc_number":"string","home_page":"string","similarity":1}'
python
client.customers.upsert("58931", {"name": "LUMITECH INSTALLATIES", "city": "Apeldoorn", "vat_number": "NL001234567B01"})
# or, only-when-changed via the sync engine:
engine.apply(ChangeEvent.customer_upsert("58931", name="LUMITECH INSTALLATIES", city="Apeldoorn"))

Delete a customer

DELETE/customer/{customer_number}integration or sync key

Remove a customer. Prefer deleting over leaving inactive records — stale records can be matched by mistake. (Renaming a record with a "formerly / do not use" marker archives it instead.)

Parameters

NameInTypeRequiredDescription
customer_numberpathstringyesUnique customer number

Responses

StatusDescriptionBody
204Successful Response
404Resource not foundErrorResponse
422Validation ErrorHTTPValidationError
bash
curl -X DELETE "https://acme.aiotic.ai/customer/<customer_number>" -H "X-API-Key: $AIOTIC_API_KEY"
python
client.customers.delete("58931")

Documentation revision 3 · Published 8 September 2026 · commit 6862d5e. Verified against AIOTIC API v1.0.0. AIOTIC is a product of DevOps Company.