Site Tools

Cart Item Creation API

What is the Cart Item Creation API?

The Cart Item Creation API allows you to create cart items. Preparing a cart is a 2 step approach. First, cart items need to be created . Then these cart items need to be added to a cart . These 2 actions are done through 2 separate APIs: the Cart Item Creation API and Cart Creation API. The split up is done to allow maximum flexibility in the creation of a cart. However, one cannot be used without the other one.

Who Should Use this API?

The Cart Item Creation API is for users that have an application or website that generates 3D models. The 3D models can be uploaded or retrieved by our server. You either want to add a 3D print service to your application as an option, or you want to make models 3D printing the core of your business. The Cart Item Creation API can be used for the following business flows:

  • White label approach: Your application or website uses the Cart Item Creation API and Cart Creation API in combination with the Cart Checkout API to place the order on your behalf at our back end system. The payment of your customer will then be handled by your application or website.
  • Controlled cart approach: After the creation of a cart, your server reroutes the customer to i.materialise where the customer proceeds with the order. Our server will provide rerouting URLs to the i.materialise cart or the i.materialise shipping info page. There will also be links to embeddable pages.

Try it Out

Do you have questions about how your server should upload a 3D model and create cart item? Visiting our demo page will help you out.

We’ve developed a sandbox server, which is an isolated server (not hooked up to a payment system or production environment, allowing you to test the service without getting billed) to try out your code and integration with us. As the sandbox server is an isolated server, it requires different credentials than the production site.

The demo page of Cart Item Creation API on sandbox server:

https://imatsandbox.materialise.net/api/demo/cart-item-creation-api.htm

The sandbox and production server contain API demo pages which send well-formed API requests to our site.

The demo page of Cart Item Creation API on production server:

https://i.materialise.com/api/demo/cart-item-creation-api.htm

Try out your toolID on the demo page. Make sure you don’t mix up the toolIDs of the sandbox and the production site.

How Does it Work?

The Cart Item Creation API works by posting data to our service.

You can use either XML or JSON formats for posting. The HTTP encoding type of a particular request depends on the type of API you are going to use. This will be described in the corresponding section of this page.

To specify the exact content type which your client can accept and parse, the Accept header in your request has to be set to one of the following encoding types:

• text/json
• application/json
• text/xml
• application/xml

To create cart item through the Cart Item Creation API, POST a well-structured request via “HTTPS” to this URL:

https://i.materialise.com/web-api/cartitems/register

To use APIs of the sandbox, the POST needs to be submitted to:

https://imatsandbox.materialise.net/web-api/cartitems/register

The server will return a structured response in XML or JSON which your application can parse.

All requests to the Cart Item Creation API should be made through a secure connection (e.g. SSL). Cart and cart items will stay valid for a period of 15 days.

Documentation

Cart items can be created one by one but it’s also possible to create several items at once. A cart item section consists of following data:

Production data: This data is obligatory. Your request need to specify the desired material, finishing, model file measure units, quantity and scale factor to be applied to the model in the file.

Model dimensional information: This information is optional. Providing the dimensional information in the request will allow our service to verify them and warn you about any inconsistencies between the provided and i.materialise’s calculated model parameters. Since the information is used in the sales price calculation, it might be useful to be warned when the dimensional information sets differ too much. This info doesn’t need to be exact. Till further notice, the request needs to have at least the model information fields with dummy values like “1”.

Pricing: The pricing data foresees to specify an estimated price and the price your customer should see. The estimated price can be retrieved from one of Pricing API's. Whenever the customer should see the regular sales price, the field mySalesPrice needs to be set to zero.

Auxiliary info: Additionally, a cart item reference field is foreseen to tag your own reference to this cart item. An example of a cart item section request can be found on the demo page for the Cart Item Creation API: https://i.materialise.com/api/demo/cart-item-creation-api.htm

Structure of the Request

HTTP Headers

Content-Type : multipart/form-data 

Structure of the Request

Parameter Type Required? Explanation
currency String (3) Yes Currency of cart items.

Following currencies are supported: EUR/USD/JPY/GBP.

cartItems List of parameters Yes List of cart items to be created.
toolID String (36) Yes The tool ID you got from developers@i.materialise.com
myCartItemReference String (100) Yes Your reference by means of which you can identify a particular cart item in the API response.
modelID String (36) Yes (if modelFileName was not specified) The ID of a previously uploaded model, retrieved from the response.

Use this parameter to prevent uploading the same file again. All model parameters are retrieved from the previous uploaded model, speeding up the response.

Use either modelID or upload a new file and specify modelFileName. Specifying both modelID and a modelFileName will result in an error.
modelFileName String Yes (if modelID was not specified) Model file name by means of which we can identify file in request body.
fileScaleFactor Decimal, separated by a period Yes Scale factor needs to be applied to the model geometry. (1 = 100% scale)
fileUnits String No (“mm” is used by default if parameter is not specified”) File units of the model file. The value should be “mm” or “inch”. If this parameter is not sent or its value is empty, “mm” is used.

This parameter only indicates the unit system in which the physical model is saved in. They will not set the desired unit for the response parameters.

The values in the request for the parameters xDimMm, yDimMm, zDimMm, volumeCm3, surfaceCm2 should be sent in metric unit system as the names indicate.
materialID String (36) Yes Material identifier from Materials Catalog API
finishID String (36) Yes Material identifier from Materials Catalog API
quantity Integer Yes How many physical items you want to order
xDimMm Decimal, separated by a period Yes The expected X dimension of model in mm after the fileScaleFactor is applied on the model that’s present in the uploaded file.

Set to 1 if unknown.
yDimMm Decimal, separated by a period Yes The expected Y dimension of model in mm after the fileScaleFactor is applied on the model that’s present in the uploaded file.

Set to 1 if unknown.
zDimMm Decimal, separated by a period Yes The expected Z dimension of model in mm after the fileScaleFactor is applied on the model that’s present in the uploaded file.

Set to 1 if unknown.
volumeCm3 Decimal, separated by a period Yes The expected volume of the model in cm³ after the fileScaleFactor is applied on the model that’s present in the uploaded file.

Set to 1 if unknown
surfaceCm2 Decimal, separated by a period Yes The expected model surface area in cm² after the fileScaleFactor is applied on the model that’s present in the uploaded file.

Set to 1 if unknown
iMatApiPrice Decimal, separated by a period Yes The estimated total price that was returned by Pricing by Parameters or Pricing by Model ID API. Set to 0 (zero) if unknown. The total price is the price for the number of models indicated in the field quantity, so it is not a unit price.
mySalesPrice Decimal, separated by a period Yes The total sales price the customer should see on the i.materialise pages.

Use 0 (zero) as value for mySalesPrice and iMatAPIPrice if:
* you don’t know your sales price yet
* you don’t need to show a different price than the calculated one in the response
* you will place the order using the Cart Checkout API

The total price is the price (excl. VAT/taxes/shipment) for the number of models indicated in the field quantity.

Request Examples

Example of Request Using JSON

{
   "cartItems":[
      {
         "toolID":"2054608d-b469-4cab-adeb-cf1c0569e7a1",
         "MyCartItemReference":"some reference",
         "modelID":"",
         "modelFileName":"Box.stl",
         "fileUnits":"mm",
         "fileScaleFactor":"1",
         "materialID":"035f4772-da8a-400b-8be4-2dd344b28ddb",
         "finishID":"bba2bebb-8895-4049-aeb0-ab651cee2597",
         "quantity":"1",
         "xDimMm":"1",
         "yDimMm":"1",
         "zDimMm":"1",
         "volumeCm3":"1",
         "surfaceCm2":"1",
         "iMatAPIPrice": "0",
         "mySalesPrice": "0",
      }
   ],
   "currency":"EUR"
}

Example of Request Using XML

 
<CartItemsRegistrationRequest>
  <CartItems>
      <CartItem>
          <ToolID>2054608d-b469-4cab-adeb-cf1c0569e7a1</ToolID>
          <MyCartItemReference>some reference</MyCartItemReference>
          <ModelID>06515f8e-5d08-4fcb-912a-b87380d69927</ModelID>
          <ModelFileName></ModelFileName>
          <FileUnits>mm</FileUnits>
          <FileScaleFactor>1</FileScaleFactor>
          <MaterialID>035f4772-da8a-400b-8be4-2dd344b28ddb</MaterialID>
          <FinishID>bba2bebb-8895-4049-aeb0-ab651cee2597</FinishID>
          <Quantity>1</Quantity>
          <XDimMm>10</XDimMm>
          <YDimMm>10</YDimMm>
          <ZDimMm>10</ZDimMm>
          <VolumeCm3>1</VolumeCm3>
          <SurfaceCm2>6</SurfaceCm2>
          <IMatAPIPrice>0</IMatAPIPrice>
          <MySalesPrice>0</MySalesPrice>
      </CartItem>
  </CartItems>
  <Currency>EUR</Currency>
</CartItemsRegistrationRequest>

The <CartItem> block can be repeated more than once in the request. At this moment, 5 models per request are allowed.

Structure of the Response

General Parameters of the Response

Parameter Type Always shown?Explanation
currency String (3) Yes Currency provided in the request
error List of parameters No Appears only in case of request error
cartItems List of parameters No See detailed explanation of each parameter later in documentation

Cart Items Section of the Response

The rule of thumb is when you get a cartItemID in response you are free to use it when you’re registering the cart.

Parameter Type Always shown? Explanation
myCartItemReference String (100) Yes The cart item reference as provided in the request
cartItemError List of parameters No This parameter shown only in case cart item error appears
cartItemError>MessageString (100) No Error message. Explained in detailed later on in the documentation.
cartItemError>CodeInteger No Error code. Explained in detailed later on in the documentation.
cartItemID String (36) No The ID of the cart item. This ID is required for adding the item to the cart.
toolID String (36) Yes Product type as provided in the request
modelID String (36) No Model file ID. This ID can be used in future requests to eliminate upload and processing of the same file.
modelFileName String No File name of the model
fileUnits String Yes Mm or inch as provided in the request
fileScaleFactor Decimal, separated by a period Yes Model scale factor as provided in the request
uploadStatus String Yes Status of uploaded model. Possibilities are:
* Succeeded
* NeededFixing: Successful. There were some issues with model but the file was successfully fixed.
* StillNeedsFixing: Failed. The model has holes, inverted normals or other errors.
* BackEndException: Failed. There was a failure during the processing of the file.
materialID String (36) Yes Material ID as provided in the request
materialName String Yes Name of the material
finishID String (36) Yes Finishing ID as provided in the request
finishName String Yes Finish name
quantity Integer Yes Parts quantity as provided in the request
xDimMm Decimal, separated by a period No Calculated X dimension size in mm
yDimMm Decimal, separated by a period No Calculated Y dimension size in mm
zDimMm Decimal, separated by a period No Calculated Z dimension size in mm
volumeCm3 Decimal, separated by a period No Calculated model volume in cm³
surfaceCm2 Decimal, separated by a period No Calculated model surface area in cm²
iMatApiPrice Decimal, separated by a period Yes iMatApiPrice as provided in the request
mySalesPrice Decimal, separated by a period Yes mySalesPrice as provided in the request. If mySalesPrice and iMatAPIPrice were set to 0 in the request, then mySalesPrice and iMatAPIPrice would be set to iMatPrice.
mySalesUnitPrice Decimal, separated by a period Yes Unit sales price, calculated as mySalesPrice/quantity
imatPrice Decimal, separated by a period No Calculated total price for the requested cart item after processing the request. The totalPrice is for the requested quantity.

If xDimMm, yDimMm, zDimMm, volumeCm3, surfaceCm2 parameters in request differ from real parameters of uploaded model, Cart Item Creation API calculates iMatPrice according to real parameters of model which you can find in response (taking into account fileScaleFactor).
validUntil Date (CET) Yes Cart item validity end date. Currently 15 days.

Response Examples

Example of Response in XML

<CartItemRegistrationResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Currency>EUR</Currency>
  <CartItems>
    <CartItemResponseDto>
      <MyCartItemReference>some reference</MyCartItemReference>
      <CartItemID>333095fc-6ab2-4c30-b0d1-baecfd708f69</CartItemID>
      <ToolID>2054608d-b469-4cab-adeb-cf1c0569e7a1</ToolID>
      <ModelID>06515f8e-5d08-4fcb-912a-b87380d69927</ModelID>
      <ModelFileName>Box.stl</ModelFileName>
      <FileUnits>Mm</FileUnits>
      <FileScaleFactor>1</FileScaleFactor>
      <MaterialID>035f4772-da8a-400b-8be4-2dd344b28ddb</MaterialID>
      <FinishID>bba2bebb-8895-4049-aeb0-ab651cee2597</FinishID>
      <Quantity>1</Quantity>
      <XDimMm>10.0000000000</XDimMm>
      <YDimMm>10.0000000000</YDimMm>
      <ZDimMm>10.0000000000</ZDimMm>
      <VolumeCm3>1.0000000000</VolumeCm3>
      <SurfaceCm2>6.0000000000</SurfaceCm2>
      <IMatAPIPrice>15.00</IMatAPIPrice>
      <MySalesPrice>15.00</MySalesPrice>
      <MySalesUnitPrice>15.00</MySalesUnitPrice>
      <IMatPrice>15.00</IMatPrice>
      <ValidUntil>2014-11-26T00:00:00+02:00</ValidUntil>
    </CartItemResponseDto>
  </CartItems>
  <UploadTimeMs xsi:nil="true" />
  <ProcessingTimeMs xsi:nil="true" />
  <ResponseSentUnixTimestampUtcMs xsi:nil="true" />
</CartItemRegistrationResponse>

Example of Response in JSON

{
    "currency":"EUR",
    "cartItems":[
        {
            "myCartItemReference":"some reference",
            "cartItemID":"ef7ee059-55cf-43b2-9413-3dd8e6dff49e",
            "toolID":"2054608d-b469-4cab-adeb-cf1c0569e7a1",
            "modelID":"eaba63a6-f9a0-4103-9d84-3c6e07ba282a",
            "modelFileName":"Box.stl",
            "fileUnits":"mm",
            "fileScaleFactor":1.0,
            "materialID":"035f4772-da8a-400b-8be4-2dd344b28ddb",
            "finishID":"bba2bebb-8895-4049-aeb0-ab651cee2597",
            "quantity":10,
            "xDimMm":10.0000000000,
            "yDimMm":10.0000000000,
            "zDimMm":10.0000000000,
            "volumeCm3":1.0000000000,
            "surfaceCm2":6.0000000000,
            "iMatAPIPrice":69.00,
            "mySalesPrice":69.00,
            "mySalesUnitPrice":6.90,
            "iMatPrice":69.00,
            "validUntil":"2014-11-26T00:00:00+02:00"
        }
    ]
}

Errors Section of the Response

Code Message Error
1 Unknown error
101 Wrong ToolID has been applied. To verify your ToolID, you should contact us at developers@i.materialise.com. Tool ID has wrong format, doesn’t exist or doesn’t belong to you.
102 ModelReference cannot be empty or more than 100 symbols.
103 This FileUnits value is not supported, please specify mm or inch.
104 FileScaleFactor is wrong.
105 An unknown ID for the Material has been requested; please check the ID’s in the materials Catalog API. MaterialID is of wrong format or the material with the provided ID doesn’t exist
106 An unknown ID for the color/finish has been requested; please check the ID’s in the materials catalog API. FinishID is of wrong format or the finishing with the provided ID doesn’t exist
107 Quantity is wrong, please use only positive integers. Invalid value for quantity or quantity is not a positive value
108 XDimMm is wrong, please use only positive decimal. XDimMm is of a wrong format or is not a positive value
109 YDimMm is wrong, please use only positive decimal. YDimMm is of a wrong format or is not a positive value
110 ZDimMm is wrong, please use only positive decimal. ZDimMm is of a wrong format or is not a positive value
111 VolumeCm3 is wrong, please use only positive decimal. VolumeCm3 is of a wrong format or is not a positive value
112 SurfaceCm2 is wrong, please use only positive decimal. SurfaceCm2 is of a wrong format or is not a positive value
113 IMatPrice is wrong, please use only positive decimals. IMatAPIPrice is of a wrong format or is not a positive value
114 SalesPrice is wrong, please use only positive decimal. MySalesPrice is of a wrong format or is a negative value
115 Please, send ModelId of previously uploaded model or new ModelFileName. Both ModelID and ModelFileName are empty.
116 Please, send or ModelId of previously uploaded model or new ModelFile, but not both. Both ModelID and ModelFileName are set.
117 Model with ID «ModelID» is not found. ModelID is not a valid GUID or model with the provided ID was not found
118 File «fileName» is not provided. ModelFileName was set but the corresponding model file was not posted
120 Wrong combination of MaterialID and FinishingID The finish specified in the request belongs to different material.
121Specified toolID is no more active. toolId was deactivated
122 Specified ModelID was created with another ToolID. Specified ModelID was created with another ToolID.
123Model file name is too long. It should not exceed 120 characters.
124The requested Material/Finish is no longer offered in the material catalog
200 We don’t offer an online price for this material/finish through the API.
201 The dimensions of the model are outside the allowed range to offer it as a priority model. The allowed range is «X»x«Y»x«Z» – «X»x«Y»x«Z» mm.
202 The dimensions of the model are outside the allowed range for «Material» «Finishing» model. The allowed range is «X»x«Y»x«Z» – «X»x«Y»x«Z» mm.
203 The dimensions of the model are outside the allowed range for «Material». The allowed range is «X»x«Y»x«Z» – «X»x«Y»x«Z»mm.
204 The price for this model is too high, so we are unable to offer an online price. Please request an offline price at our site.
205 The dimensions of the model are outside the allowed range for ceramics. The allowed sum of the X,Y and Z dimensions should be not greater than «size» mm.
206 The dimensions of the model are outside the allowed range for ceramics. The allowed sum of the X,Y and Z dimensions should be not below «size» mm.
207 The dimensions of the model are outside the allowed range for ceramics. The model should fit the range «X»x«Y»x«Z» mm.
208 The dimensions of the model are outside the allowed range for ceramics. Please make sure the wall thickness of your model is at least «thickness» mm.
209 SalesPrice cannot be less than IMatPrice. MySalesPrice is less than the provided IMatAPIPrice
210 Calculated IMatPrice for the current CartItem is «amount» «currency». It’s very different from the value you sent. Please verify your price with our pricing API. The provided IMatAPIPrice is not equal to the recalculated price with allowed tolerance
211 Calculated IMatPrice for the current CartItem is «amount» «currency». SalesPrice cannot be less than recalculated IMatPrice. Please verify your price with our pricing API. MySalesPrice is less than the recalculated price
212 Dimensions of the model are too small for Mammoth Resin. The allowed range is <X1xY1xZ1> – <X2xY2xZ2> mm. You can try another resin.
302 We don’t support «fileExtension» files.
303 We cannot process this model. Check if model is correct.
304 We do not process models over «size» Kb.
3061 Calculated XDimMm for the current CartItem is «size» mm. It’s very different from the value you sent. Please verify your model parameters.
3062 Calculated YDimMm for the current CartItem is «size» mm. It’s very different from the value you sent. Please verify your model parameters.
3063 Calculated ZDimMm for the current CartItem is «size» mm. It’s very different from the value you sent. Please verify your model parameters.
307 Calculated VolumeCm3 for the current CartItem is «volume» cm³. It’s very different from the value you sent. Please verify your model parameters.
308 Calculated SurfaceCm2 for the current CartItem is «area» cm². It’s very different from the value you sent. Please verify your model parameters.
401 Wrong request body. Check if all parameters set correctly
402 Currency is not supported, please specify EUR/USD/JPY/GBP.
403 You can’t create more than «N» CartItems in a single request. Currently N=5
404 At least one item in the request contains an error This error is shown for all cart. Occurs when at least one item in the cart contains errors.

Example of Response with error in JSON

{
    "currency":"EUR",
    "error":{
        "message":"At least one of item in the request contains an error.",
        "code":404
    },
    "cartItems":[
        {
            "myCartItemReference":"some reference",
            "cartItemError":{
                "message":"We cannot process this model. Check if model is correct.",
                "code":303
            },
            "toolID":"2054608d-b469-4cab-adeb-cf1c0569e7a1",
            "modelID":"3e64b3ed-e591-49d1-bac4-266571c7b2a7",
            "modelFileName":"2print_bad.stl",
            "fileUnits":"mm",
            "fileScaleFactor":1.0,
            "uploadStatus":"StillNeedsFixing",
            "materialID":"035f4772-da8a-400b-8be4-2dd344b28ddb",
            "finishID":"bba2bebb-8895-4049-aeb0-ab651cee2597",
            "quantity":1,
            "xDimMm":73.7159000000,
            "yDimMm":118.8810000000,
            "zDimMm":27.3087000000,
            "volumeCm3":85.2411000000,
            "surfaceCm2":354.9360000000,
            "iMatAPIPrice":0.0,
            "mySalesPrice":0.0,
            "mySalesUnitPrice":0.0
        }
    ]
}

Example of Response with error in XML

<CartItemRegistrationResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Currency>EUR</Currency>
  <Error>
    <Message>At least one of item in the request contains an error.</Message>
    <Code>404</Code>
  </Error>
  <CartItems>
    <CartItemResponseDto>
      <MyCartItemReference>some reference</MyCartItemReference>
      <CartItemError>
        <Message>SalesPrice cannot be less than IMatPrice.</Message>
        <Code>209</Code>
      </CartItemError>
      <CartItemID xsi:nil="true" />
      <ToolID>2054608d-b469-4cab-adeb-cf1c0569e7a1</ToolID>
      <ModelID xsi:nil="true" />
      <FileUnits>Mm</FileUnits>
      <FileScaleFactor>1</FileScaleFactor>
      <MaterialID>035f4772-da8a-400b-8be4-2dd344b28ddb</MaterialID>
      <FinishID>bba2bebb-8895-4049-aeb0-ab651cee2597</FinishID>
      <Quantity>1</Quantity>
      <XDimMm xsi:nil="true" />
      <YDimMm xsi:nil="true" />
      <ZDimMm xsi:nil="true" />
      <VolumeCm3 xsi:nil="true" />
      <SurfaceCm2 xsi:nil="true" />
      <IMatAPIPrice>15</IMatAPIPrice>
      <MySalesPrice>14</MySalesPrice>
      <MySalesUnitPrice>14</MySalesUnitPrice>
      <IMatPrice xsi:nil="true" />
      <ValidUntil xsi:nil="true" />
    </CartItemResponseDto>
  </CartItems>
  <UploadTimeMs xsi:nil="true" />
  <ProcessingTimeMs xsi:nil="true" />
  <ResponseSentUnixTimestampUtcMs xsi:nil="true" />
</CartItemRegistrationResponse>