All pages
Powered by GitBook
1 of 7

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Customer Management

The Customer Management service allows you to manage customers in your system.

Key features and benefits

  • Supports upsert operations, enabling seamless updates and inserts for customer information

  • Enables management of locations, including creation, retrieval, updates, and deletion of location data

  • Allows for the creation, retrieval, updating, and deletion of contact assignments for customer relationships

  • Facilitates legal entity management

  • Provides search functionality for legal entities based on customizable parameters

  • Streamlines the handling of customer data, ensuring efficient customer management processes

API Reference

Models

Locations

Contact Assignments

Customer Management Tutorial

Customer Management

Take a look at the relationships between objects in the Customer Management Service and other resources in the Emporix Commerce Engine. Click the diagram to enlarge it:

How to set up business customer information

Setting up a business customer's information is a process made up of two steps:

Before you start

Make sure you have marked the country in which the company operates as active. You can do it by sending a request to the endpoint in the Emporix API Country Service.

Add a location

A location is a physical address where a company operates, such as its headquarters, office, or warehouse. To add a new location, send a request to the endpoint.

The id from the response is further referred to as locationId.

Add a legal entity

A legal entity is a representation of a company. To add a new legal entity, send a request to the endpoint.

How to add a subsidiary

Subsidiaries are companies legally owned or controlled by other companies. In the Emporix Commerce Engine, subsidiaries are structured the same way as regular companies — the only difference is that a subsidiary must have its parent company specified.

Before you start

Make sure you have already finished the tutorial.

Retrieve the ID of the parent company

To find out what a company ID is, send a request to the endpoint and use the q query parameter to find the desired company.

The id from the response is further referred to as parentId.

Add a subsidiary

Subsidiaries are added similarly to their parent companies. To add a new subsidiary, send a request to the endpoint. In the request body, set the type field to SUBSIDIARY and provide the parentId.

How to add an employee to a company customer group

You can offer personalized pricing to your business customers' employees by adding them to company customer groups. A company customer group is automatically created when that company data is added to the system.

When added to a subsidiary customer group, the employee is also automatically assigned to customer groups of all the subsidiary parent companies.

Before you start

Make sure the following requirements are fulfilled:

  • You have already finished the tutorial.

  • The employee has their customer account set up.

A customer account can be created by the employee themselves or from your Emporix tenant's side. For more information, check out the following endpoints in the Emporix API Reference:

Retrieve the ID of the company

To find out what a company ID is, send a request to the endpoint and use the q query parameter to find the desired company.

The id from the response is further referred to as legalEntityId.

Retrieve the employee's customer ID

To retrieve an employee's customer ID, send a request to the endpoint and use the q query parameter. For example, you can search for a customer with a specific email address with q=contactEmail:employeeEmail.

The id from the response is further referred to as customerId.

Assign the contact to the company

A contact represents an employee of one or more business customers. To assign a contact to a legal entity (in this case, the desired company), send a request to the endpoint and provide legalEntityId and customerId in the request body.

Once desired employees are added to appropriate customer groups, you can — for example — create personalized price lists for them. For instructions, check out in the Price Service guide.

Customer assignment rules

Emporix platform enforces rules when assigning customers to predefined groups to ensure role assignments remain valid and avoid conflicts. Within a single company, a user can belong to only one predefined group. Validation applies within the scope of a single company (legal entity) only. It does not extend across different companies or any subsidiaries.

Examples:

  • If a customer is already assigned to one predefined group (for example, Emporix Admin Group), then it's not possible to assign that same customer to another predefined group within the same company.

  • If a customer is assigned to an Admin group in one company (for example, Company A), then the same customer may also be assigned to an Admin group in another company (for example, Company B).

  • If a customer is assigned to an Admin group in a parent company (for example, Company A), then that same customer may also be assigned to another role such as Buyer in the parent company’s subsidiary.

The exception is the Contact group, which can always be assigned.

Company Contact Propagation

As a part of the group assignment you can decide how the contact assignments are shared within a company hierarchy. You can choose from the following options:

  • UPWARD: Contacts assigned to a subsidiary are also visible at the parent company level. This is a default setting.

  • DOWNWARD: Contacts assigned to a parent company are also visible in all subsidiaries.

  • DISABLED: Contacts remain only in the company where they were assigned, with no propagation.

Propagation happens only at the moment of assignment - creating the contact in the selected company also creates corresponding contacts in related companies according to the chosen direction.

Adding a location
Adding a legal entity
Updating a country
Creating a new location
API Reference
Creating a legal entity
API Reference
How to set up business customer information
Retrieving all legal entities
API Reference
Creating a new legal entity
API Reference
How to set up business customer information
Creating a new customer (customer-managed)
Creating a new customer (tenant-managed)
Retrieving all legal entities
API Reference
Retrieving a list of customers
API Reference
Creating a new contact assignment
API Reference
How to configure a price list
curl -i -X POST 
  'https://api.emporix.io/customer-management/{tenant}/locations' 
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' 
  -H 'Content-Type: application/json' 
  -d '{
    "name": "Main HQ",
    "type": "HEADQUARTER",
    "contactDetails": {
      "emails": [
        "[email protected]",
        "[email protected]"
      ],
      "phones": [
        "1234567890",
        "123456789"
      ],
      "addressLine1": "W Sample St",
      "addressLine2": "3601-3799",
      "city": "South Bend",
      "state": "Indiana",
      "postcode": "46619",
      "countryCode": "US",
      "tags": [
        "shipping"
      ]
    }
  }'
curl -i -X POST 
  'https://api.emporix.io/customer-management/{tenant}/legal-entities' 
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' 
  -H 'Content-Type: application/json' 
  -d '{
    "name": "ABC Company",
    "type": "COMPANY",
    "legalInfo": {
      "legalName": "ABC Company",
      "registrationDate": "2022-03-31T13:18:02.379Z",
      "registrationAgency": "Comp reg agency",
      "registrationId": "627e06ecf0452c2d6c0b81391",
      "countryOfRegistration": "DE",
      "taxRegistrationNumber": "1234"
    },
    "accountLimit": {
      "currency": "EUR",
      "value": 1000.99
    },
    "customerGroups": [
      {
        "id": "123e06ecf0452c2d6c0b81390",
        "name": {
          "en": "En customer group name",
          "de": "De customer group name"
        }
      }
    ],
    "entitiesAddresses": [
      {
        "id": "123e123455452c2d6c0b81390"
      },
      {
        "id": "123e06ecf0acd223140b12345"
      }
    ],
    "approvalGroup": [
      {
        "id": "123e121111452c12330b81390"
      },
      {
        "id": "123e061110acd223133333345"
      }
    ]
  }'
curl -i -X GET 
  'https://api.emporix.io/customer-management/{tenant}/legal-entities?pageNumber=1&pageSize=16&sort=name%2Cmetadata.createdAt%3Adesc&q=name%3A~john&fields=name%2Ctype&id=string&name=string&type=COMPANY&parentId=string&legalInfo.legalName=string&legalInfo.registrationDate=string&legalInfo.taxRegistrationNumber=string&legalInfo.registrationAgency=string&legalInfo.countryOfRegistration=string&legalInfo.registrationId=string' 
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' 
  -H 'X-Total-Count: false'
curl -i -X POST 
  'https://api.emporix.io/customer-management/{tenant}/legal-entities' 
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' 
  -H 'Content-Type: application/json' 
  -d '{
    "name": "ABC Subsidiary",
    "type": "SUBSIDIARY",
    "legalInfo": {
      "legalName": "ABC Subsidiary",
      "registrationDate": "2022-03-31T13:18:02.379Z",
      "registrationAgency": "Comp reg agency",
      "registrationId": "627e06ecf0452c2d6c0b81391",
      "countryOfRegistration": "DE",
      "taxRegistrationNumber": "1234"
    },
    "accountLimit": {
      "currency": "EUR",
      "value": 1000.99
    },
    "customerGroups": [
      {
        "id": "123e06ecf0452c2d6c0b81390",
        "name": {
          "en": "En customer group name",
          "de": "De customer group name"
        }
      }
    ],
    "entitiesAddresses": [
      {
        "id": "123e123455452c2d6c0b81390"
      },
      {
        "id": "123e06ecf0acd223140b12345"
      }
    ],
    "approvalGroup": [
      {
        "id": "123e121111452c12330b81390"
      },
      {
        "id": "123e061110acd223133333345"
      }
    ]
  }'
curl -i -X GET 
  'https://api.emporix.io/customer-management/{tenant}/legal-entities?pageNumber=1&pageSize=16&sort=name%2Cmetadata.createdAt%3Adesc&q=name%3A~john&fields=name%2Ctype&id=string&name=string&type=COMPANY&parentId=string&legalInfo.legalName=string&legalInfo.registrationDate=string&legalInfo.taxRegistrationNumber=string&legalInfo.registrationAgency=string&legalInfo.countryOfRegistration=string&legalInfo.registrationId=string' 
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' 
  -H 'X-Total-Count: false'
curl -i -X GET 
  'https://api.emporix.io/customer/{tenant}/customers?q=contactEmail%3A{email}&sort=string&pageNumber=1&pageSize=60&expand=string' 
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'
curl -i -X POST 
  'https://api.emporix.io/customer-management/{tenant}/contact-assignments' 
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' 
  -H 'Content-Type: application/json' 
  -d '{
    "legalEntity": {
      "id": "612306ecf0452c2d6c0b81392"
    },
    "customer": {
      "id": "612306ecf0452c2d6c0b81123"
    },
    "type": "BILLING",
    "primary": true
  }'

To test the endpoint, open the API reference or check the example of a curl request.

To test the endpoint, open the API reference or check the example of a curl request.

To test the endpoint, open the API reference or check the example of a curl request.

To test the endpoint, open the API reference or check the example of a curl request.

To test the endpoint, open the API reference or check the example of a curl request.

To test the endpoint, open the API reference or check the example of a curl request.

To test the endpoint, open the API reference or check the example of a curl request.

Retrieving all locations

get

Retrieves all locations assigned to the tenant. You can filter, sort and paginate the results with query parameters.


Required scopes

  • customermanagement.location_read

Required scopes
This endpoint requires the following scopes:
  • : Needed to read locations
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
Query parameters
pageNumberinteger · min: 1Optional

The page number to be retrieved where the size of the pages must be specified by the pageSize parameter. The number of the first page is 1.

Default: 1
pageSizeinteger · min: 1Optional

The number of documents being retrieved on the page.

Default: 16
sortstringOptional

Fields to sort the response data by following order of the parameters from left to right. Can contain multiple fields in format: field name:sort direction separated by a comma. The colon with sort direction parameter is redundant and descending order is taken only if it is equal to desc or DESC. Ascending order is considered in any other case.

Example: name,metadata.createdAt:desc
qstringOptional

Query param for filtering entities by specified type. Examples of query params which are supported:

Q Param Description
name:"Exact match" find an entity with name field with Exact match value
name:~John find an entity with name field containing John value
locDescription.fr:"Description traduction française 02" find an entity with localized locDescription field with Description traduction française 02 value in french language
primary:true find an entity with primary field with true value
metadata.createdAt:(>"2019-01-06T10:29:30.602Z" AND <"2020-01-07T10:29:30.602Z") find an entity with metadata.createdAt field with value between 2019-01-06T10:29:30.602Z and 2020-01-07T10:29:30.602Z
name:exists find an entity with existing name field
name:null find an entity with non-existing name field
name:missing find an entity with non-existing name field
name:"John" surname:~Smith find an entity with name exactly equals to John and surname containing Smith value
name:("John","Jack","James") find an entity with name field with one of the following value: John or Jack or James
Example: name:~john
fieldsstringOptional

Comma-separated list of fields to return in the response. If not specified, all fields are returned.

Example: name,type
namestringOptional

Location name. When specified, only locations containing the specified name will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

typestring · enumOptional

The type of the location. When specified, only locations of the specified type will be returned.

Note: When filtering the results with this field, the equals operator is used.

Possible values:
contactDetails.emailstringOptional

The email of the contact details of the location. When specified, only locations with contact details containing the specified email will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

contactDetails.phonestringOptional

The phone number of the contact details of the location. When specified, only locations with contact details containing the specified phone number will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

contactDetails.addressstringOptional

The address of the contact details of the location. When specified, only locations with contact details containing the specified address will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

contactDetails.citystringOptional

The address of the contact details of the location. When specified, only locations with contact details containing the specified city will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

contactDetails.statestringOptional

The address of the contact details of the location. When specified, only locations with contact details containing the specified state will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

contactDetails.postcodestringOptional

The postcode of the contact details of the location. When specified, only locations with contact details containing the specified postcode will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

contactDetails.countryCodestringOptional

The country code of the contact details of the location. When specified, only locations with contact details having the specified country code will be returned.

Note: When filtering the results with this field, the equals operator is used.

get
/{tenant}/locations

Creating location

post

Creates a new location for the tenant. A location represents address information about a legal entity of the Company.


Required scopes

  • customermanagement.location_manage

Required scopes
This endpoint requires the following scopes:
  • : Needed to manage locations
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
Body
idstring · min: 1 · max: 66Optional

Custom location identifier. If not provided, it is automatically generated.

Pattern: ^[a-zA-Z0-9_-]$
namestringOptional

The name of the location,

typestring · enumRequired

The type of the location.

Possible values:
post
/{tenant}/locations

Retrieving a location

get

Retrieves a location by the specified unique identifier.


Required scopes

  • customermanagement.location_read

Required scopes
This endpoint requires the following scopes:
  • : Needed to read locations
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
locationIdstringRequired

The location unique identifier.

Query parameters
fieldsstringOptional

Comma-separated list of fields to return in the response. If not specified, all fields are returned.

Example: name,type
Responses
200

The request was successful. The requested location is returned.

application/json
400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
404

The requested resource does not exist.

application/json
500

Internal Service Error occurred.

application/json
get
/{tenant}/locations/{locationId}

Upserting a location

put

Updates or creates a location with given location id. You can omit the metadata.version, but then optimistic locking is not enabled.


Required scopes

  • customermanagement.location_manage

Required scopes
This endpoint requires the following scopes:
  • : Needed to manage locations
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
locationIdstringRequired

The location unique identifier.

Body
namestringOptional

The name of the location

typestring · enumRequired

The type of the location.

Possible values:
put
/{tenant}/locations/{locationId}

Delete a location

delete

Deletes a location.


Required scopes

  • customermanagement.location_manage

Required scopes
This endpoint requires the following scopes:
  • : Needed to manage locations
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
locationIdstringRequired

The location unique identifier.

Responses
204

The location has been deleted successfully.

400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
404

The requested resource does not exist.

application/json
500

Internal Service Error occurred.

application/json
delete
/{tenant}/locations/{locationId}

Retrieving all contact assignments

get

Retrieves all contact assignments assigned to the tenant. You can filter, sort and paginate the results with query parameters.


Required scopes

  • customermanagement.contactassignment_read

Required scopes
This endpoint requires the following scopes:
  • : Needed to read contact assignments
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
Query parameters
pageNumberinteger · min: 1Optional

The page number to be retrieved where the size of the pages must be specified by the pageSize parameter. The number of the first page is 1.

Default: 1
pageSizeinteger · min: 1Optional

The number of documents being retrieved on the page.

Default: 16
sortstringOptional

Fields to sort the response data by following order of the parameters from left to right. Can contain multiple fields in format: field name:sort direction separated by a comma. The colon with sort direction parameter is redundant and descending order is taken only if it is equal to desc or DESC. Ascending order is considered in any other case.

Example: name,metadata.createdAt:desc
qstringOptional

Query param for filtering entities by specified type. Examples of query params which are supported:

Q Param Description
name:"Exact match" find an entity with name field with Exact match value
name:~John find an entity with name field containing John value
locDescription.fr:"Description traduction française 02" find an entity with localized locDescription field with Description traduction française 02 value in french language
primary:true find an entity with primary field with true value
metadata.createdAt:(>"2019-01-06T10:29:30.602Z" AND <"2020-01-07T10:29:30.602Z") find an entity with metadata.createdAt field with value between 2019-01-06T10:29:30.602Z and 2020-01-07T10:29:30.602Z
name:exists find an entity with existing name field
name:null find an entity with non-existing name field
name:missing find an entity with non-existing name field
name:"John" surname:~Smith find an entity with name exactly equals to John and surname containing Smith value
name:("John","Jack","James") find an entity with name field with one of the following value: John or Jack or James
Example: name:~john
fieldsstringOptional

Comma-separated list of fields to return in the response. If not specified, all fields are returned.

Example: name,type
legalEntity.idstringOptional

The id of the legal entity. When specified, only customer assignments attached to the specified legal entity will be returned.

Note: When filtering the results with this field, the equals operator is used.

customer.idstringOptional

The id of the customer. When specified, only customer assignments attached to the specified customer will be returned.

Note: When filtering the results with this field, the equals operator is used.

typestring · enumOptional

The type of the customer assignment. When specified, only customer assignments with the specified type will be returned.

Note: When filtering the results with this field, the equals operator is used.

Possible values:
primarybooleanOptional

The primary customer flag. When specified, only customers with the specified primary flag value will be returned.

Note: When filtering the results with this field, the equals operator is used.

get
/{tenant}/contact-assignments

Creating contact assignment

post

Creates a new contact assignment for the tenant. A contact assignment represents assignment of an employee of the Company to a legal entity.


Required scopes

  • customermanagement.contactassignment_manage

Required scopes
This endpoint requires the following scopes:
  • : Needed to manage contact assignments
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
Body
idstring · min: 1 · max: 66Optional

Custom assignment identifier. If not provided, it is automatically generated.

Pattern: ^[a-zA-Z0-9_-]$
typestring · enumOptional

The type of the customer assignment. If not provided, it is set to Contact by default.

Possible values:
primarybooleanOptional

Indicates whether the customer is primary.

Default: false
post
/{tenant}/contact-assignments

Retrieving a contact assignment

get

Retrieves a contact assignment by the specified unique identifier.


Required scopes

  • customermanagement.contactassignment_read

Required scopes
This endpoint requires the following scopes:
  • : Needed to read contact assignments
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
contactAssignmentIdstringRequired

The identifier of the customer assignment

Query parameters
fieldsstringOptional

Comma-separated list of fields to return in the response. If not specified, all fields are returned.

Example: name,type
Responses
200

The request was successful. The requested customer assignment is returned.

application/json
400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
404

The requested resource does not exist.

application/json
500

Internal Service Error occurred.

application/json
get
/{tenant}/contact-assignments/{contactAssignmentId}

Upserting a contact assignment

put

Updates or creates a contact assignment with given contact assignment id. You can omit the metadata.version, but then optimistic locking is not enabled.


Required scopes

  • customermanagement.contactassignment_manage

Required scopes
This endpoint requires the following scopes:
  • : Needed to manage contact assignments
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
contactAssignmentIdstringRequired

The identifier of the customer assignment

Body
typestring · enumRequired

The type of the customer assignment.

Possible values:
primarybooleanOptional

Indicates whether the customer is primary.

Default: false
put
/{tenant}/contact-assignments/{contactAssignmentId}

Delete a contact assignment

delete

Deletes a contact assignment.


Required scopes

  • customermanagement.contactassignment_manage

Required scopes
This endpoint requires the following scopes:
  • : Needed to manage contact assignments
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
contactAssignmentIdstringRequired

The identifier of the customer assignment

Responses
204

The customer assignment has been deleted successfully.

400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
404

The requested resource does not exist.

application/json
500

Internal Service Error occurred.

application/json
delete
/{tenant}/contact-assignments/{contactAssignmentId}
Header parameters
X-Total-CountbooleanOptional

In order to get information how many entities meet a filter requirements, X-Total-Count header has been introduced. The header is optional and its default value is false. It the header is provided and it is true then total count is returned in the X-Total-Count response header. In both cases (X-Total-Count true, false or not provided), the response body has the same format (array of entities). In other words, the information about total count is returned on demand, depending of an existence of X-Total-Count header in a request. Therefore, the X-Total-Count header is not returned if an API consumer didn't ask for it.

Default: false
Responses
200

The request was successful. A list of locations is returned.

application/json
400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
500

Internal Service Error occurred.

application/json
Responses
201

The request was successful. The location has been created.

application/json
400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
409

Given resource already exists

application/json
500

Internal Service Error occurred.

application/json
Responses
201

The request was successful. The location has been created.

application/json
204

The location has been updated successfully.

400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
404

The requested resource does not exist.

application/json
409

Given resource already exists

application/json
500

Internal Service Error occurred.

application/json

No content

Header parameters
X-Total-CountbooleanOptional

In order to get information how many entities meet a filter requirements, X-Total-Count header has been introduced. The header is optional and its default value is false. It the header is provided and it is true then total count is returned in the X-Total-Count response header. In both cases (X-Total-Count true, false or not provided), the response body has the same format (array of entities). In other words, the information about total count is returned on demand, depending of an existence of X-Total-Count header in a request. Therefore, the X-Total-Count header is not returned if an API consumer didn't ask for it.

Default: false
Responses
200

The request was successful. A list of customer assignments is returned.

application/json
400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
500

Internal Service Error occurred.

application/json
Responses
201

The request was successful. The customer assignment has been created.

application/json
400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
409

Given resource already exists

application/json
500

Internal Service Error occurred.

application/json
Responses
201

The request was successful. The contact assignment has been created.

application/json
204

The customer assignment has been updated successfully.

400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
404

The requested resource does not exist.

application/json
409

Given resource already exists

application/json
500

Internal Service Error occurred.

application/json

No content

[
  {
    "id": "627e06ecf0452c2d6c0b81391",
    "name": "Main HQ",
    "type": "HEADQUARTER",
    "contactDetails": {
      "emails": [
        "[email protected]",
        "[email protected]"
      ],
      "phones": [
        "1234567890",
        "123456789"
      ],
      "addressLine1": "W Sample St",
      "addressLine2": "3601-3799",
      "city": "South Bend",
      "state": "Indiana",
      "postcode": "46619",
      "countryCode": "US",
      "tags": [
        "shipping"
      ]
    },
    "metadata": {
      "createdAt": "2022-03-31T13:18:02.379Z",
      "modifiedAt": "2022-03-31T13:18:02.379Z",
      "version": 1
    }
  },
  {
    "id": "627e06ecf0452c2d6c0b81311",
    "name": "Main Warehouse",
    "type": "WAREHOUSE",
    "contactDetails": {
      "emails": [
        "[email protected]",
        "[email protected]"
      ],
      "phones": [
        "6475837467",
        "987654321"
      ],
      "addressLine1": "Dircksenstraße",
      "addressLine2": "136",
      "city": "Berlin",
      "state": "Berlin",
      "postcode": "10178",
      "countryCode": "DE",
      "tags": [
        "billing"
      ]
    },
    "metadata": {
      "createdAt": "2022-04-31T13:18:02.379Z",
      "modifiedAt": "2022-05-31T13:18:02.379Z",
      "version": 2
    }
  }
]
{
  "id": "53ac81fd0cce8b26b36f1234"
}
{
  "id": "627e06ecf0452c2d6c0b81391",
  "name": "Main HQ",
  "type": "HEADQUARTER",
  "contactDetails": {
    "emails": [
      "[email protected]",
      "[email protected]"
    ],
    "phones": [
      "1234567890",
      "123456789"
    ],
    "addressLine1": "W Sample St",
    "addressLine2": "3601-3799",
    "city": "South Bend",
    "state": "Indiana",
    "postcode": "46619",
    "countryCode": "US",
    "tags": [
      "shipping"
    ]
  },
  "metadata": {
    "createdAt": "2022-03-31T13:18:02.379Z",
    "modifiedAt": "2022-03-31T13:18:02.379Z",
    "version": 1
  }
}
PUT /customer-management/{tenant}/locations/{locationId} HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 333

{
  "name": "Main Warehouse",
  "type": "WAREHOUSE",
  "contactDetails": {
    "emails": [
      "[email protected]",
      "[email protected]"
    ],
    "phones": [
      "1234567890",
      "123456789"
    ],
    "addressLine1": "W Sample St",
    "addressLine2": "3601-3799",
    "city": "South Bend",
    "state": "Indiana",
    "postcode": "46619",
    "countryCode": "US",
    "tags": [
      "shipping"
    ]
  },
  "metadata": {
    "version": 1
  }
}
{
  "id": "53ac81fd0cce8b26b36f3492"
}
GET /customer-management/{tenant}/locations/{locationId} HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
DELETE /customer-management/{tenant}/locations/{locationId} HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
GET /customer-management/{tenant}/locations HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
POST /customer-management/{tenant}/locations HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 303

{
  "name": "Main HQ",
  "type": "HEADQUARTER",
  "contactDetails": {
    "emails": [
      "[email protected]",
      "[email protected]"
    ],
    "phones": [
      "1234567890",
      "123456789"
    ],
    "addressLine1": "W Sample St",
    "addressLine2": "3601-3799",
    "city": "South Bend",
    "state": "Indiana",
    "postcode": "46619",
    "countryCode": "US",
    "tags": [
      "shipping"
    ]
  }
}
[
  {
    "id": "627e06ecf0452c2d6c0b81391",
    "legalEntity": {
      "id": "123e06ecf0452c2d6c0b12391",
      "name": "ABC Subsidiary",
      "type": "SUBSIDIARY",
      "parentId": "627e06ecf0452c2d6c0b81391",
      "accountLimit": {
        "currency": "EUR",
        "value": 1000.99
      },
      "legalInfo": {
        "legalName": "ABC Subsidiary",
        "registrationDate": "2022-03-31T13:18:02.379Z",
        "taxRegistrationNumber": "4311",
        "registrationAgency": "Sub reg agency",
        "countryOfRegistration": "DE",
        "registrationId": "627e06ecf0452c2d6c0b81399"
      },
      "customerGroups": [
        {
          "id": "123e06ecf0452c2d6c0b81390",
          "name": {
            "en": "Customer group 1",
            "fr": "Groupe de clients 1"
          }
        }
      ]
    },
    "customer": {
      "id": "627e06ecf0452c2d6c0b81391",
      "name": "John",
      "surname": "Doe"
    },
    "type": "BILLING",
    "primary": true,
    "metadata": {
      "createdAt": "2022-03-31T13:18:02.379Z",
      "modifiedAt": "2022-03-31T13:18:02.379Z",
      "version": 1
    }
  },
  {
    "id": "627e06ecf0452c2d6c0b81311",
    "legalEntity": {
      "id": "123e06ecf0452c2d6c0b81390",
      "name": "ABC Company",
      "type": "COMPANY",
      "legalInfo": {
        "legalName": "ABC Company",
        "registrationDate": "2022-03-31T13:18:02.379Z",
        "registrationAgency": "Comp reg agency",
        "registrationId": "627e06ecf0452c2d6c0b81391",
        "countryOfRegistration": "DE",
        "taxRegistrationNumber": "1234",
        "accountLimit": {
          "currency": "EUR",
          "value": 1000.99
        }
      },
      "customerGroups": [
        {
          "id": "123e06ecf0452c2d6c0b81390",
          "name": {
            "en": "Customer group 1",
            "fr": "Groupe de clients 1"
          }
        },
        {
          "id": "123e06ecf0452c2d6c0b12345",
          "name": {
            "en": "Customer group 2",
            "fr": "Groupe de clients 2"
          }
        }
      ],
      "entitiesAddresses": [
        {
          "id": "627e06ecf0452c2d6c0b81391",
          "name": "Main HQ",
          "type": "HEADQUARTER",
          "contactDetails": {
            "emails": [
              "[email protected]",
              "[email protected]"
            ],
            "phones": [
              "1234567890",
              "123456789"
            ],
            "addressLine1": "W Sample St",
            "addressLine2": "3601-3799",
            "city": "South Bend",
            "state": "Indiana",
            "postcode": "46619",
            "countryCode": "US",
            "tags": [
              "shipping"
            ]
          },
          "metadata": {
            "createdAt": "2022-03-31T13:18:02.379Z",
            "modifiedAt": "2022-03-31T13:18:02.379Z",
            "version": 1
          }
        },
        {
          "id": "123e06ecf0acd223140b12345",
          "name": "Main Warehouse",
          "type": "WAREHOUSE",
          "metadata": {
            "createdAt": "2022-03-31T13:22:31.112Z",
            "modifiedAt": "2022-03-31T13:22:31.112Z",
            "version": 1
          }
        }
      ],
      "approvalGroup": [
        {
          "id": "627e06ecf0452c2d6c0b81391",
          "name": "John",
          "surname": "Doe"
        },
        {
          "id": "123e06ecf0452c2d6c0b81390",
          "name": "Adam",
          "surname": "Smith"
        }
      ],
      "metadata": {
        "createdAt": "2022-03-31T13:18:02.379Z",
        "modifiedAt": "2022-03-31T13:18:02.379Z",
        "version": 1
      }
    },
    "contact": {
      "id": "627e06ecf0452c2d6c0b81391",
      "name": "John",
      "surname": "Doe"
    },
    "type": "PRIMARY",
    "primary": false,
    "metadata": {
      "createdAt": "2022-04-31T13:18:02.379Z",
      "modifiedAt": "2022-05-31T13:18:02.379Z",
      "version": 2
    }
  }
]
{
  "id": "53ac81fd0cce8b26b36f1234"
}
{
  "id": "627e06ecf0452c2d6c0b81391",
  "legalEntity": {
    "id": "123e06ecf0452c2d6c0b81390",
    "name": "ABC Company",
    "type": "COMPANY",
    "legalInfo": {
      "legalName": "ABC Company",
      "registrationDate": "2022-03-31T13:18:02.379Z",
      "registrationAgency": "Comp reg agency",
      "registrationId": "627e06ecf0452c2d6c0b81391",
      "countryOfRegistration": "DE",
      "taxRegistrationNumber": "1234",
      "accountLimit": {
        "currency": "EUR",
        "value": 1000.99
      }
    },
    "customerGroups": [
      {
        "id": "123e06ecf0452c2d6c0b81390",
        "name": {
          "en": "Customer group 1",
          "fr": "Groupe de clients 1"
        }
      },
      {
        "id": "123e06ecf0452c2d6c0b12345",
        "name": {
          "en": "Customer group 2",
          "fr": "Groupe de clients 2"
        }
      }
    ],
    "entitiesAddresses": [
      {
        "id": "627e06ecf0452c2d6c0b81391",
        "name": "Main HQ",
        "type": "HEADQUARTER",
        "contactDetails": {
          "emails": [
            "[email protected]",
            "[email protected]"
          ],
          "phones": [
            "1234567890",
            "123456789"
          ],
          "addressLine1": "W Sample St",
          "addressLine2": "3601-3799",
          "city": "South Bend",
          "state": "Indiana",
          "postcode": "46619",
          "countryCode": "US",
          "tags": [
            "shipping"
          ]
        },
        "metadata": {
          "createdAt": "2022-03-31T13:18:02.379Z",
          "modifiedAt": "2022-03-31T13:18:02.379Z",
          "version": 1
        }
      },
      {
        "id": "123e06ecf0acd223140b12345",
        "name": "Main Warehouse",
        "type": "WAREHOUSE",
        "metadata": {
          "createdAt": "2022-03-31T13:22:31.112Z",
          "modifiedAt": "2022-03-31T13:22:31.112Z",
          "version": 1
        }
      }
    ],
    "approvalGroup": [
      {
        "id": "627e06ecf0452c2d6c0b81391",
        "name": "John",
        "surname": "Doe"
      },
      {
        "id": "123e06ecf0452c2d6c0b81390",
        "name": "Adam",
        "surname": "Smith"
      }
    ],
    "metadata": {
      "createdAt": "2022-03-31T13:18:02.379Z",
      "modifiedAt": "2022-03-31T13:18:02.379Z",
      "version": 1
    }
  },
  "customer": {
    "id": "627e06ecf0452c2d6c0b81391",
    "name": "John",
    "surname": "Doe"
  },
  "type": "BILLING",
  "primary": true,
  "metadata": {
    "createdAt": "2022-03-31T13:18:02.379Z",
    "modifiedAt": "2022-03-31T13:18:02.379Z",
    "version": 1
  }
}
PUT /customer-management/{tenant}/contact-assignments/{contactAssignmentId} HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 156

{
  "legalEntity": {
    "id": "612306ecf0452c2d6c0b82222"
  },
  "customer": {
    "id": "111106ecf0452c2d6c0b81123"
  },
  "type": "LOGISTICS",
  "primary": false,
  "metadata": {
    "version": 1
  }
}
{
  "id": "53ac81fd0cce8b26b36f3492"
}
GET /customer-management/{tenant}/contact-assignments/{contactAssignmentId} HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
DELETE /customer-management/{tenant}/contact-assignments/{contactAssignmentId} HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
GET /customer-management/{tenant}/contact-assignments HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
POST /customer-management/{tenant}/contact-assignments HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 128

{
  "legalEntity": {
    "id": "612306ecf0452c2d6c0b81392"
  },
  "customer": {
    "id": "612306ecf0452c2d6c0b81123"
  },
  "type": "BILLING",
  "primary": true
}

Legal Entities

Retrieving all legal entities

get

Retrieves all legal entities. You can filter, sort and paginate the results with query parameters.

  • If the customermanagement.legalentity_read scope is used, then all legal entities assigned to the tenant are returned.

  • If the customermanagement.legalentity_read_own scope is used, then all legal entities assigned to the customer are returned.


Required scopes

  • customermanagement.legalentity_read

  • customermanagement.legalentity_read_own

Required scopes
This endpoint requires the following scopes:
  • : Needed to read legal entities
  • : Needed to read legal entities by customer
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
Query parameters
pageNumberinteger · min: 1Optional

The page number to be retrieved where the size of the pages must be specified by the pageSize parameter. The number of the first page is 1.

Default: 1
pageSizeinteger · min: 1Optional

The number of documents being retrieved on the page.

Default: 16
sortstringOptional

Fields to sort the response data by following order of the parameters from left to right. Can contain multiple fields in format: field name:sort direction separated by a comma. The colon with sort direction parameter is redundant and descending order is taken only if it is equal to desc or DESC. Ascending order is considered in any other case.

Example: name,metadata.createdAt:desc
qstringOptional

Query param for filtering entities by specified type. Examples of query params which are supported:

Q Param Description
name:"Exact match" find an entity with name field with Exact match value
name:~John find an entity with name field containing John value
locDescription.fr:"Description traduction française 02" find an entity with localized locDescription field with Description traduction française 02 value in french language
primary:true find an entity with primary field with true value
metadata.createdAt:(>"2019-01-06T10:29:30.602Z" AND <"2020-01-07T10:29:30.602Z") find an entity with metadata.createdAt field with value between 2019-01-06T10:29:30.602Z and 2020-01-07T10:29:30.602Z
name:exists find an entity with existing name field
name:null find an entity with non-existing name field
name:missing find an entity with non-existing name field
name:"John" surname:~Smith find an entity with name exactly equals to John and surname containing Smith value
name:("John","Jack","James") find an entity with name field with one of the following value: John or Jack or James
Example: name:~john
fieldsstringOptional

Comma-separated list of fields to return in the response. If not specified, all fields are returned.

Example: name,type
idstringOptional

Legal entity id. When specified, only legal entity with the specified id will be returned.

Note: When filtering the results with this field, the equals operator is used. The operator is case-insensitive.

namestringOptional

Legal entity name. When specified, only legal entities containing the specified name will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

typestring · enumOptional

Legal entity type. When specified, only legal entities with the specified type will be returned.

Note: When filtering the results with this field, the equals operator is used.

Possible values:
parentIdstringOptional

The id of the parent legal entity. When specified, only legal entities with the specified parent will be returned.

Note: When filtering the results with this field, the equals operator is used.

legalInfo.legalNamestringOptional

The legal name of the entity. When specified, only legal entities containing the specified name will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

legalInfo.registrationDatestringOptional

Legal entity registration date. When specified, only legal entities registered in the specified date will be returned.

Note: When filtering the results with this field, the equals operator is used.

legalInfo.taxRegistrationNumberstringOptional

Legal entity tax registration number. When specified, only legal entities with the specified tax registration number will be returned.

Note: When filtering the results with this field, the equals operator is used.

legalInfo.registrationAgencystringOptional

Legal entity registration agency. When specified, only legal entities containing the specified registration agency will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

legalInfo.countryOfRegistrationstringOptional

Legal entity registration country. When specified, only legal entities containing the specified registration country will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

legalInfo.registrationIdstringOptional

The id of the legal entity registration. When specified, only legal entities with the specified registration ID will be returned.

Note: When filtering the results with this field, the equals operator is used.

get
/{tenant}/legal-entities

Creating legal entity

post

Creates a new legal entity for the tenant. A legal entity represents a company or it's subsidiary in the system.


Required scopes

  • customermanagement.legalentity_manage

Required scopes
This endpoint requires the following scopes:
  • : Needed to manage legal entities
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
Body
idstring · min: 1 · max: 66Optional

Custom legal entity identifier. If not provided, it is automatically generated.

Pattern: ^[a-zA-Z0-9_-]$
namestringRequired

The name of the legal entity.

typestring · enumOptional

The type of the legal entity. Default value if not provided is: COMPANY

Possible values:
parentIdstringOptional

The id of the parent legal entity.

post
/{tenant}/legal-entities

Searching with parameters for legal entities

post

Retrieves all legal entities that match provided criteria.

If the customermanagement.legalentity_read scope is used, then all legal entities assigned to the tenant are returned. If the customermanagement.legalentity_read_own scope is used, then all legal entities assigned to the customer are returned.


Required scopes

  • customermanagement.legalentity_read

  • customermanagement.legalentity_read_own

Required scopes
This endpoint requires the following scopes:
  • : Needed to read legal entities
  • : Needed to read legal entities by customer
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
Query parameters
pageNumberinteger · min: 1Optional

The page number to be retrieved where the size of the pages must be specified by the pageSize parameter. The number of the first page is 1.

Default: 1
pageSizeinteger · min: 1Optional

The number of documents being retrieved on the page.

Default: 16
sortstringOptional

Fields to sort the response data by following order of the parameters from left to right. Can contain multiple fields in format: field name:sort direction separated by a comma. The colon with sort direction parameter is redundant and descending order is taken only if it is equal to desc or DESC. Ascending order is considered in any other case.

Example: name,metadata.createdAt:desc
fieldsstringOptional

Comma-separated list of fields to return in the response. If not specified, all fields are returned.

Example: name,type
idstringOptional

Legal entity id. When specified, only legal entity with the specified id will be returned.

Note: When filtering the results with this field, the equals operator is used. The operator is case-insensitive.

namestringOptional

Legal entity name. When specified, only legal entities containing the specified name will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

typestring · enumOptional

Legal entity type. When specified, only legal entities with the specified type will be returned.

Note: When filtering the results with this field, the equals operator is used.

Possible values:
parentIdstringOptional

The id of the parent legal entity. When specified, only legal entities with the specified parent will be returned.

Note: When filtering the results with this field, the equals operator is used.

legalInfo.legalNamestringOptional

The legal name of the entity. When specified, only legal entities containing the specified name will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

legalInfo.registrationDatestringOptional

Legal entity registration date. When specified, only legal entities registered in the specified date will be returned.

Note: When filtering the results with this field, the equals operator is used.

legalInfo.taxRegistrationNumberstringOptional

Legal entity tax registration number. When specified, only legal entities with the specified tax registration number will be returned.

Note: When filtering the results with this field, the equals operator is used.

legalInfo.registrationAgencystringOptional

Legal entity registration agency. When specified, only legal entities containing the specified registration agency will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

legalInfo.countryOfRegistrationstringOptional

Legal entity registration country. When specified, only legal entities containing the specified registration country will be returned.

Note: When filtering the results with this field, the contains operator is used. The operator is case-insensitive.

legalInfo.registrationIdstringOptional

The id of the legal entity registration. When specified, only legal entities with the specified registration ID will be returned.

Note: When filtering the results with this field, the equals operator is used.

post
/{tenant}/legal-entities/search

Retrieving a legal entity

get

Retrieves a legal entity by the specified unique identifier.


Required scopes

  • customermanagement.legalentity_read

Required scopes
This endpoint requires the following scopes:
  • : Needed to read legal entities
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
legalEntityIdstringRequired

The legal entity unique identifier.

Query parameters
fieldsstringOptional

Comma-separated list of fields to return in the response. If not specified, all fields are returned.

Example: name,type
Responses
200

The request was successful. The requested legal entity is returned.

application/json
400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
404

The requested resource does not exist.

application/json
500

Internal Service Error occurred.

application/json
get
/{tenant}/legal-entities/{legalEntityId}

Upserting a legal entity

put

Updates or creates a legal entity with given legal entity id. You can omit the metadata.version, but then optimistic locking is not enabled.

Important: If automatically generated customer group is not present in customerGroups list, this group will be removed from iam.


Required scopes

  • customermanagement.legalentity_manage

Required scopes
This endpoint requires the following scopes:
  • : Needed to manage legal entities
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
legalEntityIdstringRequired

The legal entity unique identifier.

Body
namestringRequired

The name of the legal entity.

typestring · enumRequired

The type of the legal entity.

Possible values:
parentIdstringOptional

The id of the parent legal entity.

put
/{tenant}/legal-entities/{legalEntityId}

Delete a legal entity

delete

Deletes a legal entity.

Important: This operation causes removal of all other entities exclusively subordinated to the requested legal entity in an async way


Required scopes

  • customermanagement.legalentity_manage

Required scopes
This endpoint requires the following scopes:
  • : Needed to manage legal entities
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
legalEntityIdstringRequired

The legal entity unique identifier.

Responses
204

The legal entity has been deleted successfully.

400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
404

The requested resource does not exist.

application/json
500

Internal Service Error occurred.

application/json
delete
/{tenant}/legal-entities/{legalEntityId}

Retrieving a legal entity with parent hierarchy

get

Retrieves the provided legal entity and all its parent legal entities.


Required scopes

  • customermanagement.legalentity_read

  • customermanagement.legalentity_manage

Required scopes
This endpoint requires the following scopes:
  • : Needed to read legal entities
  • : Needed to manage legal entities
Authorizations
OAuth2clientCredentialsRequired
Token URL:
Path parameters
tenantstring · min: 3 · max: 16Required

The tenant that the caller is acting upon.

Please note that this value is always lowercase.

Pattern: ^[a-z][a-z0-9]+$
legalEntityIdstringRequired

The legal entity unique identifier.

Responses
200

The request was successful. A list of legal entities is returned.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
500

Internal Service Error occurred.

application/json
get
/{tenant}/legal-entities/{legalEntityId}/parent-hierarchy
Header parameters
X-Total-CountbooleanOptional

In order to get information how many entities meet a filter requirements, X-Total-Count header has been introduced. The header is optional and its default value is false. It the header is provided and it is true then total count is returned in the X-Total-Count response header. In both cases (X-Total-Count true, false or not provided), the response body has the same format (array of entities). In other words, the information about total count is returned on demand, depending of an existence of X-Total-Count header in a request. Therefore, the X-Total-Count header is not returned if an API consumer didn't ask for it.

Default: false
Responses
200

The request was successful. A list of legal entities is returned.

application/json
400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
500

Internal Service Error occurred.

application/json
Responses
201

The request was successful. The legal entity has been created.

application/json
400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
409

Given resource already exists

application/json
500

Internal Service Error occurred.

application/json
Header parameters
X-Total-CountbooleanOptional

In order to get information how many entities meet a filter requirements, X-Total-Count header has been introduced. The header is optional and its default value is false. It the header is provided and it is true then total count is returned in the X-Total-Count response header. In both cases (X-Total-Count true, false or not provided), the response body has the same format (array of entities). In other words, the information about total count is returned on demand, depending of an existence of X-Total-Count header in a request. Therefore, the X-Total-Count header is not returned if an API consumer didn't ask for it.

Default: false
Body
qstringOptional

Query param for filtering entities by specified type.

Responses
200

The request was successful. A list of legal entities is returned.

application/json
400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
500

Internal Service Error occurred.

application/json
Responses
201

The request was successful. The legal entity has been created.

application/json
204

The legal entity has been updated successfully.

400

Request was syntactically incorrect. Details will be provided in the response payload.

application/json
401

Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.

application/json
403

Given authorization scopes are not sufficient and do not match scopes required by the endpoint.

application/json
404

The requested resource does not exist.

application/json
409

Given resource already exists

application/json
500

Internal Service Error occurred.

application/json

No content

[
  {
    "id": "123e06ecf0452c2d6c0b81390",
    "name": "ABC Company",
    "type": "COMPANY",
    "legalInfo": {
      "legalName": "ABC Company",
      "registrationDate": "2022-03-31T13:18:02.379Z",
      "registrationAgency": "Comp reg agency",
      "registrationId": "627e06ecf0452c2d6c0b81391",
      "countryOfRegistration": "DE",
      "taxRegistrationNumber": "1234"
    },
    "metadata": {
      "createdAt": "2022-03-31T13:18:02.379Z",
      "modifiedAt": "2022-03-31T13:18:02.379Z",
      "version": 1
    }
  },
  {
    "id": "123e06ecf0452c2d6c0b12391",
    "name": "ABC Subsidiary",
    "type": "SUBSIDIARY",
    "parentId": "627e06ecf0452c2d6c0b81391",
    "accountLimit": {
      "currency": "EUR",
      "value": 1000.99
    },
    "legalInfo": {
      "legalName": "ABC Subsidiary",
      "registrationDate": "2022-03-31T13:18:02.379Z",
      "taxRegistrationNumber": "4311",
      "registrationAgency": "Sub reg agency",
      "countryOfRegistration": "DE",
      "registrationId": "627e06ecf0452c2d6c0b81399"
    },
    "customerGroups": [
      {
        "id": "123e06ecf0452c2d6c0b81390",
        "name": {
          "en": "Customer group 1",
          "fr": "Groupe de clients 1"
        }
      }
    ],
    "approvalGroup": [
      {
        "id": "321e06ecf0452c2d6c0b81390",
        "type": "BILLING",
        "primary": true,
        "legalEntity": {
          "id": "627e06ecf0452c2d6c0b81391"
        },
        "customer": {
          "id": "123e06ecf0452c2d6c0b81390",
          "name": "Adam",
          "surname": "Smith"
        },
        "metadata": {
          "createdAt": "2022-02-31T13:18:01.379Z",
          "modifiedAt": "2022-02-31T13:18:01.379Z",
          "version": 1
        }
      }
    ],
    "entitiesAddresses": [
      {
        "id": "627e06ecf0452c2d6c0b81391",
        "name": "Main HQ",
        "type": "HEADQUARTER",
        "contactDetails": {
          "emails": [
            "[email protected]",
            "[email protected]"
          ],
          "phones": [
            "1234567890",
            "123456789"
          ],
          "addressLine1": "W Sample St",
          "addressLine2": "3601-3799",
          "city": "South Bend",
          "state": "Indiana",
          "postcode": "46619",
          "countryCode": "US",
          "tags": [
            "shipping"
          ]
        },
        "metadata": {
          "createdAt": "2022-03-31T13:18:02.379Z",
          "modifiedAt": "2022-03-31T13:18:02.379Z",
          "version": 1
        }
      },
      {
        "id": "123e06ecf0acd223140b12345",
        "name": "Main Warehouse",
        "type": "WAREHOUSE",
        "metadata": {
          "createdAt": "2022-03-31T13:22:31.112Z",
          "modifiedAt": "2022-03-31T13:22:31.112Z",
          "version": 1
        }
      }
    ],
    "metadata": {
      "createdAt": "2022-03-31T13:18:02.379Z",
      "modifiedAt": "2022-04-31T13:18:02.379Z",
      "version": 2
    }
  }
]
{
  "id": "53ac81fd0cce8b26b36f3492"
}
POST /customer-management/{tenant}/legal-entities/search HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 20

{
  "q": "type:COMPANY"
}
[
  {
    "id": "123e06ecf0452c2d6c0b81390",
    "name": "ABC Company",
    "type": "COMPANY",
    "legalInfo": {
      "legalName": "ABC Company",
      "registrationDate": "2022-03-31T13:18:02.379Z",
      "registrationAgency": "Comp reg agency",
      "registrationId": "627e06ecf0452c2d6c0b81391",
      "countryOfRegistration": "DE",
      "taxRegistrationNumber": "1234"
    },
    "metadata": {
      "createdAt": "2022-03-31T13:18:02.379Z",
      "modifiedAt": "2022-03-31T13:18:02.379Z",
      "version": 1
    }
  },
  {
    "id": "123e06ecf0452c2d6c0b12391",
    "name": "ABC Subsidiary",
    "type": "SUBSIDIARY",
    "parentId": "627e06ecf0452c2d6c0b81391",
    "accountLimit": {
      "currency": "EUR",
      "value": 1000.99
    },
    "legalInfo": {
      "legalName": "ABC Subsidiary",
      "registrationDate": "2022-03-31T13:18:02.379Z",
      "taxRegistrationNumber": "4311",
      "registrationAgency": "Sub reg agency",
      "countryOfRegistration": "DE",
      "registrationId": "627e06ecf0452c2d6c0b81399"
    },
    "customerGroups": [
      {
        "id": "123e06ecf0452c2d6c0b81390",
        "name": {
          "en": "Customer group 1",
          "fr": "Groupe de clients 1"
        }
      }
    ],
    "approvalGroup": [
      {
        "id": "321e06ecf0452c2d6c0b81390",
        "type": "BILLING",
        "primary": true,
        "legalEntity": {
          "id": "627e06ecf0452c2d6c0b81391"
        },
        "customer": {
          "id": "123e06ecf0452c2d6c0b81390",
          "name": "Adam",
          "surname": "Smith"
        },
        "metadata": {
          "createdAt": "2022-02-31T13:18:01.379Z",
          "modifiedAt": "2022-02-31T13:18:01.379Z",
          "version": 1
        }
      }
    ],
    "entitiesAddresses": [
      {
        "id": "627e06ecf0452c2d6c0b81391",
        "name": "Main HQ",
        "type": "HEADQUARTER",
        "contactDetails": {
          "emails": [
            "[email protected]",
            "[email protected]"
          ],
          "phones": [
            "1234567890",
            "123456789"
          ],
          "addressLine1": "W Sample St",
          "addressLine2": "3601-3799",
          "city": "South Bend",
          "state": "Indiana",
          "postcode": "46619",
          "countryCode": "US",
          "tags": [
            "shipping"
          ]
        },
        "metadata": {
          "createdAt": "2022-03-31T13:18:02.379Z",
          "modifiedAt": "2022-03-31T13:18:02.379Z",
          "version": 1
        }
      },
      {
        "id": "123e06ecf0acd223140b12345",
        "name": "Main Warehouse",
        "type": "WAREHOUSE",
        "metadata": {
          "createdAt": "2022-03-31T13:22:31.112Z",
          "modifiedAt": "2022-03-31T13:22:31.112Z",
          "version": 1
        }
      }
    ],
    "metadata": {
      "createdAt": "2022-03-31T13:18:02.379Z",
      "modifiedAt": "2022-04-31T13:18:02.379Z",
      "version": 2
    }
  }
]
{
  "id": "123e06ecf0452c2d6c0b81390",
  "name": "ABC Company",
  "type": "COMPANY",
  "legalInfo": {
    "legalName": "ABC Company",
    "registrationDate": "2022-03-31T13:18:02.379Z",
    "registrationAgency": "Comp reg agency",
    "registrationId": "627e06ecf0452c2d6c0b81391",
    "countryOfRegistration": "DE",
    "taxRegistrationNumber": "1234"
  },
  "accountLimit": {
    "currency": "EUR",
    "value": 1000.99
  },
  "customerGroups": [
    {
      "id": "123e06ecf0452c2d6c0b81390",
      "name": {
        "en": "Customer group 1",
        "fr": "Groupe de clients 1"
      }
    },
    {
      "id": "123e06ecf0452c2d6c0b12345",
      "name": {
        "en": "Customer group 2",
        "fr": "Groupe de clients 2"
      }
    }
  ],
  "entitiesAddresses": [
    {
      "id": "627e06ecf0452c2d6c0b81391",
      "name": "Main HQ",
      "type": "HEADQUARTER",
      "contactDetails": {
        "emails": [
          "[email protected]",
          "[email protected]"
        ],
        "phones": [
          "1234567890",
          "123456789"
        ],
        "addressLine1": "W Sample St",
        "addressLine2": "3601-3799",
        "city": "South Bend",
        "state": "Indiana",
        "postcode": "46619",
        "countryCode": "US",
        "tags": [
          "shipping"
        ]
      },
      "metadata": {
        "createdAt": "2022-03-31T13:18:02.379Z",
        "modifiedAt": "2022-03-31T13:18:02.379Z",
        "version": 1
      }
    },
    {
      "id": "123e06ecf0acd223140b12345",
      "name": "Main Warehouse",
      "type": "WAREHOUSE",
      "metadata": {
        "createdAt": "2022-03-31T13:22:31.112Z",
        "modifiedAt": "2022-03-31T13:22:31.112Z",
        "version": 1
      }
    }
  ],
  "approvalGroup": [
    {
      "id": "627e06ecf0452c2d6c0b81391",
      "type": "BILLING",
      "primary": true,
      "legalEntity": {
        "id": "123e06ecf0452c2d6c0b81390"
      },
      "customer": {
        "id": "627e06ecf0452c2d6c0b80000",
        "name": "John",
        "surname": "Doe"
      },
      "metadata": {
        "createdAt": "2022-03-11T13:18:03.379Z",
        "modifiedAt": "2022-03-11T13:18:04.379Z",
        "version": 2
      }
    },
    {
      "id": "123e06ecf0452c2d6c0b81390",
      "type": "LOGISTICS",
      "primary": false,
      "legalEntity": {
        "id": "123e06ecf0452c2d6c0b81390"
      },
      "customer": {
        "id": "123e06ecf0452c2d6c0b80000",
        "name": "Adam",
        "surname": "Smith"
      },
      "metadata": {
        "createdAt": "2022-04-11T13:18:52.379Z",
        "modifiedAt": "2022-05-12T15:13:12.379Z",
        "version": 3
      }
    }
  ],
  "metadata": {
    "createdAt": "2022-03-31T13:18:02.379Z",
    "modifiedAt": "2022-03-31T13:18:02.379Z",
    "version": 1
  }
}
PUT /customer-management/{tenant}/legal-entities/{legalEntityId} HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 660

{
  "name": "ABC Subsidiary",
  "type": "SUBSIDIARY",
  "parentId": "627e06ecf0452c2d6c0b81391",
  "accountLimit": {
    "currency": "EUR",
    "value": 1000.99
  },
  "legalInfo": {
    "legalName": "ABC Subsidiary",
    "registrationDate": "2022-03-31T13:18:02.379Z",
    "registrationAgency": "Sub reg agency",
    "registrationId": "627e06ecf0452c2d6c0b81391",
    "countryOfRegistration": "DE",
    "taxRegistrationNumber": "4311"
  },
  "customerGroups": [
    {
      "id": "123e06ecf0452c2d6c0b81390"
    },
    {
      "id": "123e06ecf0452c2d6c0b12345"
    }
  ],
  "entitiesAddresses": [
    {
      "id": "123e123455452c2d6c0b81390"
    },
    {
      "id": "123e06ecf0acd223140b12345"
    }
  ],
  "approvalGroup": [
    {
      "id": "123e121111452c12330b81390"
    },
    {
      "id": "123e061110acd223133333345"
    }
  ],
  "metadata": {
    "version": 1
  }
}
{
  "id": "53ac81fd0cce8b26b36f3492"
}
[
  {
    "id": "company_c",
    "name": "Company C",
    "type": "SUBSIDIARY",
    "parentId": "company_b",
    "metadata": {
      "createdAt": "2022-03-31T13:18:02.379Z",
      "modifiedAt": "2022-03-31T13:18:02.379Z",
      "version": 1
    }
  },
  {
    "id": "company_b",
    "name": "Company B",
    "type": "SUBSIDIARY",
    "parentId": "company_a",
    "metadata": {
      "createdAt": "2022-03-18T14:22:07.321Z",
      "modifiedAt": "2022-03-18T14:22:07.321Z",
      "version": 1
    }
  },
  {
    "id": "company_a",
    "name": "Company A",
    "type": "COMPANY",
    "metadata": {
      "createdAt": "2022-03-31T13:18:02.379Z",
      "modifiedAt": "2022-03-31T13:18:02.379Z",
      "version": 1
    }
  }
]
POST /customer-management/{tenant}/legal-entities HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 622

{
  "name": "ABC Company",
  "type": "COMPANY",
  "legalInfo": {
    "legalName": "ABC Company",
    "registrationDate": "2022-03-31T13:18:02.379Z",
    "registrationAgency": "Comp reg agency",
    "registrationId": "627e06ecf0452c2d6c0b81391",
    "countryOfRegistration": "DE",
    "taxRegistrationNumber": "1234"
  },
  "accountLimit": {
    "currency": "EUR",
    "value": 1000.99
  },
  "customerGroups": [
    {
      "id": "123e06ecf0452c2d6c0b81390",
      "name": {
        "en": "En customer group name",
        "de": "De customer group name"
      }
    }
  ],
  "entitiesAddresses": [
    {
      "id": "123e123455452c2d6c0b81390"
    },
    {
      "id": "123e06ecf0acd223140b12345"
    }
  ],
  "approvalGroup": [
    {
      "id": "123e121111452c12330b81390"
    },
    {
      "id": "123e061110acd223133333345"
    }
  ]
}
GET /customer-management/{tenant}/legal-entities/{legalEntityId} HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
DELETE /customer-management/{tenant}/legal-entities/{legalEntityId} HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
GET /customer-management/{tenant}/legal-entities/{legalEntityId}/parent-hierarchy HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
GET /customer-management/{tenant}/legal-entities HTTP/1.1
Host: api.emporix.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*