api
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
api [2020/08/03 17:57] – flack | api [2024/05/10 08:12] (current) – [Quote Request API] adapt to item_level_iq_info bkovats | ||
---|---|---|---|
Line 48: | Line 48: | ||
" | " | ||
{ | { | ||
- | "description": "All purchasable, in stock & virtual compounds", | + | "id": |
- | " | + | " |
+ | " | ||
+ | " | ||
+ | " | ||
" | " | ||
{ | { | ||
- | "download_url": | + | "size_mb": |
- | " | + | " |
- | " | + | " |
- | "size_mb": | + | "download_url": |
- | }, | + | }, |
{ | { | ||
- | "download_url": | + | "size_mb": |
- | " | + | " |
- | " | + | " |
- | "size_mb": | + | "download_url": |
} | } | ||
- | ], | + | ], |
- | "last_updated": | + | "public": |
- | "name": "Mcule Purchasable (full)", | + | "group": "default" |
- | " | + | |
}, | }, | ||
{ | { | ||
- | "description": "All purchasable, in stock compounds", | + | "id": |
- | " | + | " |
+ | " | ||
+ | " | ||
+ | " | ||
" | " | ||
{ | { | ||
- | "download_url": | + | "size_mb": |
- | " | + | " |
- | " | + | " |
- | "size_mb": | + | "download_url": |
- | }, | + | }, |
{ | { | ||
- | "download_url": | + | "size_mb": |
- | " | + | " |
- | " | + | " |
- | "size_mb": | + | "download_url": |
} | } | ||
- | ], | + | ], |
- | "last_updated": | + | "public": |
- | "name": "Mcule Purchasable (in stock)", | + | "group": "default" |
- | " | + | |
} | } | ||
] | ] | ||
Line 162: | Line 166: | ||
===== InChIKey lookup ===== | ===== InChIKey lookup ===== | ||
== Endpoint: == | == Endpoint: == | ||
- | < | + | < |
== Example API request: == | == Example API request: == | ||
Line 345: | Line 349: | ||
http ' | http ' | ||
</ | </ | ||
+ | |||
+ | |||
+ | ===== Compound list details ===== | ||
+ | |||
+ | With this endpoint you can get compound details information for multiple compound mcule IDs in a single API call. | ||
+ | |||
+ | == Endpoint: == | ||
+ | < | ||
+ | |||
+ | == Basic API request: == | ||
+ | < | ||
+ | echo ' | ||
+ | </ | ||
+ | |||
+ | |||
+ | == Example API request: == | ||
+ | < | ||
+ | echo ' | ||
+ | </ | ||
+ | |||
+ | == Request: == | ||
+ | < | ||
+ | POST / | ||
+ | Authorization: | ||
+ | Content-Type: | ||
+ | |||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | 1, | ||
+ | 5, | ||
+ | 10 | ||
+ | ] | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | == Response: == | ||
+ | < | ||
+ | HTTP/1.1 200 OK | ||
+ | Content-Type: | ||
+ | |||
+ | { | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Fields: | ||
+ | * **mcule_ids**: | ||
+ | * **availability**: | ||
+ | * **components**: | ||
+ | * **price_amounts**: | ||
+ | |||
+ | Limits: | ||
+ | * **mcule_ids**: | ||
+ | * **price_amounts**: | ||
+ | |||
===== Multiple queries exact search ===== | ===== Multiple queries exact search ===== | ||
Multiple queries exact search currently accepts the following input identifiers: | Multiple queries exact search currently accepts the following input identifiers: | ||
+ | The maximum number of queries you can send to this endpoint is 1000 currently. | ||
== Endpoint: == | == Endpoint: == | ||
Line 591: | Line 845: | ||
</ | </ | ||
- | The **threshold** | + | Mandatory fields: |
- | The **limit** | + | |
+ | * **query**: string, accepted identifiers: | ||
+ | |||
+ | Optional fields: | ||
+ | |||
+ | * **threshold**: float, similarity threshold, accepted | ||
+ | | ||
+ | * **collection**: | ||
Line 616: | Line 877: | ||
{ | { | ||
" | " | ||
- | " | + | " |
+ | } | ||
</ | </ | ||
Line 657: | Line 919: | ||
</ | </ | ||
- | The **limit** | + | Mandatory fields: |
+ | |||
+ | * **query**: string, accepted identifiers: | ||
+ | |||
+ | Optional fields: | ||
+ | |||
+ | * **limit**: integer, accepted | ||
+ | * **collection**: | ||
Line 803: | Line 1072: | ||
Optional fields: | Optional fields: | ||
- | * **amount**: Preferred amount per molecule (mg). (default: 1) | + | |
- | * **min_amount**: Acceptable minimum amount (mg). (default: | + | |
- | * **target_volume**: | + | * **min_amount**: |
- | * **target_cc**: | + | * Amount (µmol) based amount fields |
- | * **extra_amount**: In case of solution based amount calculation extra amount (in mg) can be specified here. | + | |
+ | * **min_amount_umol**: Acceptable minimum amount (µmol). (default: | ||
+ | | ||
+ | | ||
+ | * **target_cc**: | ||
+ | * **extra_amount**: | ||
+ | * **min_extra_amount**: In case of solution based amount calculation | ||
* **customer_email**: | * **customer_email**: | ||
* **delivery_time**: | * **delivery_time**: | ||
* **purity**: Required minimum purity (%). (default: null) | * **purity**: Required minimum purity (%). (default: null) | ||
* **higher_amounts**: | * **higher_amounts**: | ||
- | * **item_filters**: | + | * **item_filters**: |
+ | * **scheme**: If you have access to predefined / pre-negotiated quote request schemes, you can specify here which one you want to use. You have to send the ID of the scheme which will be provided to you after negotiation. A quote query scheme is essentially a template that contains predefined quote query parameters, or even include private parameters that affect quote generation in various ways (e.g.: discounts, predefined custom prices). These parameters can be customized for your use case. The scheme might already contain mandatory fields like delivery_country. In this case you don't have to specify them again, they will be applied from the scheme. Any explicitly specified public parameter during the request will override the one that comes from the specified scheme. | ||
- | The **amount** or target concentration-volume pair (**target_volume** and **target_cc**) | + | The **amount** or **target_amount_umol** or target concentration-volume pair (**target_volume** and **target_cc**) |
**item_filters** example: | **item_filters** example: | ||
It has to be a data structure where keys are mcule IDs you specified in the **mcule_ids** field. If you specify a key that is not an item in the **mcule_ids** list you should get a validation error (400 Bad Request). | It has to be a data structure where keys are mcule IDs you specified in the **mcule_ids** field. If you specify a key that is not an item in the **mcule_ids** list you should get a validation error (400 Bad Request). | ||
- | Currently | + | Currently supplier |
< | < | ||
{ | { | ||
- | " | + | " |
- | " | + | |
+ | | ||
+ | " | ||
+ | | ||
+ | " | ||
+ | | ||
} | } | ||
</ | </ | ||
Line 876: | Line 1158: | ||
" | " | ||
" | " | ||
- | " | + | " |
+ | " | ||
" | " | ||
" | " | ||
Line 899: | Line 1182: | ||
</ | </ | ||
+ | Alternative use of the endpoint: | ||
+ | Instead of **mcule_ids** you can specify a list of items in the **items** field. Each item has to be a data structure where the **mcule_id** field is mandatory and the following fields can be specified optionally: | ||
+ | * amount fields: you can set the amount on an item-level by providing the appropriate amount fields (see above) | ||
+ | * **suppliers**: | ||
+ | * **products**: | ||
+ | * **user_ref_id**: | ||
+ | |||
+ | If the amount is provided for an item, it overwrites the globally set amount for that particular item. Note that the global amount must be provided even if it's specified individually for every item. | ||
+ | |||
+ | == Example request: === | ||
+ | < | ||
+ | POST / | ||
+ | Accept: application/ | ||
+ | Accept-Encoding: | ||
+ | Authorization: | ||
+ | Content-Type: | ||
+ | |||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | == Example response: === | ||
+ | < | ||
+ | HTTP/1.1 201 CREATED | ||
+ | Allow: GET, POST, HEAD, OPTIONS | ||
+ | Content-Type: | ||
+ | |||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | 15, | ||
+ | 64, | ||
+ | 93 | ||
+ | ], | ||
+ | " | ||
+ | 871069132, | ||
+ | 855381908 | ||
+ | ] | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | </ | ||
===== Quote Request Status API ===== | ===== Quote Request Status API ===== | ||
Line 946: | Line 1332: | ||
" | " | ||
" | " | ||
+ | " | ||
" | " | ||
" | " | ||
Line 1123: | Line 1510: | ||
{ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
" | " | ||
" | " | ||
Line 1186: | Line 1576: | ||
" | " | ||
" | " | ||
+ | " | ||
+ | " | ||
" | " | ||
" | " | ||
Line 1192: | Line 1584: | ||
" | " | ||
" | " | ||
+ | " | ||
" | " | ||
" | " | ||
Line 1203: | Line 1596: | ||
" | " | ||
" | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
" | " | ||
" | " | ||
- | " | ||
" | " | ||
" | " | ||
" | " | ||
" | " | ||
+ | " | ||
" | " | ||
" | " | ||
Line 1222: | Line 1618: | ||
" | " | ||
" | " | ||
+ | " | ||
+ | " | ||
" | " | ||
" | " | ||
Line 1228: | Line 1626: | ||
" | " | ||
" | " | ||
+ | " | ||
" | " | ||
" | " | ||
Line 1240: | Line 1639: | ||
" | " | ||
" | " | ||
+ | " | ||
+ | " | ||
" | " | ||
" | " | ||
Line 1246: | Line 1647: | ||
" | " | ||
" | " | ||
+ | " | ||
" | " | ||
" | " | ||
Line 1258: | Line 1660: | ||
" | " | ||
" | " | ||
+ | " | ||
+ | " | ||
" | " | ||
" | " | ||
Line 1264: | Line 1668: | ||
" | " | ||
" | " | ||
+ | " | ||
" | " | ||
" | " | ||
Line 1329: | Line 1734: | ||
" | " | ||
" | " | ||
+ | " | ||
" | " | ||
" | " | ||
Line 1420: | Line 1826: | ||
Where currency is not specified, it is always USD. | Where currency is not specified, it is always USD. | ||
+ | * **additional_document_notes**: | ||
+ | * **amount_range**: | ||
+ | * **amount_range_display**: | ||
* **analytical_services_price**: | * **analytical_services_price**: | ||
* **avg_product_price**: | * **avg_product_price**: | ||
Line 1443: | Line 1852: | ||
* **effective_price_display**: | * **effective_price_display**: | ||
* **price**: effective price | * **price**: effective price | ||
+ | * **product_available_amount**: | ||
+ | * **product_available_amount_display**: | ||
* **product_mcule_id**: | * **product_mcule_id**: | ||
* **product**: | * **product**: | ||
Line 1449: | Line 1860: | ||
* **product_price**: | * **product_price**: | ||
* **product_purity**: | * **product_purity**: | ||
+ | * **product_smiles**: | ||
* **structure_origin_mcule_id**: | * **structure_origin_mcule_id**: | ||
* **quote**: The ID of the quote this product level quote data belongs to. | * **quote**: The ID of the quote this product level quote data belongs to. | ||
* **name**: The name of the quote. Quotes created via the API don't have names. | * **name**: The name of the quote. Quotes created via the API don't have names. | ||
- | * **order_data**: | + | * **order_data**: |
+ | * **billing_address**: | ||
+ | * **billing_city**: | ||
+ | * **billing_company_name**: | ||
+ | * **billing_country**: | ||
+ | * **billing_post_code**: | ||
+ | * **billing_state**: | ||
+ | * **billing_email**: | ||
+ | * **billing_first_name**: | ||
+ | * **billing_last_name**: | ||
+ | * **billing_phone**: | ||
+ | * **billing_same**: | ||
+ | * **billing_vat**: | ||
+ | * **shipping_address**: | ||
+ | * **shipping_city**: | ||
+ | * **shipping_company_name**: | ||
+ | * **shipping_country**: | ||
+ | * **shipping_post_code**: | ||
+ | * **shipping_state**: | ||
+ | * **shipping_email**: | ||
+ | * **shipping_first_name**: | ||
+ | * **shipping_last_name**: | ||
+ | * **shipping_phone**: | ||
+ | * **notes**: notes | ||
+ | * **po_number**: | ||
+ | * **po_file_filename**: | ||
+ | * **po_option**: | ||
+ | * **po_option_display**: | ||
+ | * **created**: | ||
+ | * **updated**: | ||
+ | * **id**: ID of the purchase order data | ||
* **payment_due_days**: | * **payment_due_days**: | ||
* **price**: Total price of quote (USD) | * **price**: Total price of quote (USD) | ||
Line 1549: | Line 1991: | ||
</ | </ | ||
+ | |||
+ | ===== Quote order ===== | ||
+ | |||
+ | Submit purchase order for a quote via API. | ||
+ | |||
+ | < | ||
+ | http --form POST https:// | ||
+ | </ | ||
+ | |||
+ | == Example request: === | ||
+ | < | ||
+ | POST / | ||
+ | Accept: */* | ||
+ | Accept-Encoding: | ||
+ | Authorization: | ||
+ | Content-Type: | ||
+ | |||
+ | +-----------------------------------------+ | ||
+ | | NOTE: binary data not shown in terminal | | ||
+ | +-----------------------------------------+ | ||
+ | </ | ||
+ | |||
+ | Please note that in case you submit a file in the API request, you have to use // | ||
+ | |||
+ | If you don't submit a file in the API request, you can use // | ||
+ | |||
+ | < | ||
+ | echo ' | ||
+ | </ | ||
+ | |||
+ | == Example request: === | ||
+ | < | ||
+ | POST / | ||
+ | Accept: application/ | ||
+ | Authorization: | ||
+ | Content-Type: | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | == Example response: === | ||
+ | < | ||
+ | HTTP/1.0 201 CREATED | ||
+ | Allow: POST, OPTIONS | ||
+ | Content-Type: | ||
+ | |||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | Mandatory fields: | ||
+ | * **po_option**: | ||
+ | |||
+ | Optional fields: | ||
+ | * **billing_address**: | ||
+ | * **billing_city**: | ||
+ | * **billing_company_name**: | ||
+ | * **billing_country**: | ||
+ | * **billing_post_code**: | ||
+ | * **billing_state**: | ||
+ | * **billing_email**: | ||
+ | * **billing_first_name**: | ||
+ | * **billing_last_name**: | ||
+ | * **billing_phone**: | ||
+ | * **billing_same**: | ||
+ | * **billing_vat**: | ||
+ | * **shipping_address**: | ||
+ | * **shipping_city**: | ||
+ | * **shipping_company_name**: | ||
+ | * **shipping_country**: | ||
+ | * **shipping_post_code**: | ||
+ | * **shipping_state**: | ||
+ | * **shipping_email**: | ||
+ | * **shipping_first_name**: | ||
+ | * **shipping_last_name**: | ||
+ | * **shipping_phone**: | ||
+ | * **notes**: notes | ||
+ | * **po_number**: | ||
+ | * **po_file**: | ||
+ | |||
+ | The address and contact fields are optional if this information is included in the Purchase Order document or will be provided later to our support team. Although providing the shipping and billing address / contact information here can speed up the ordering process, if you decide to leave them empty, our support team will contact you to reconcile this information. | ||
+ | |||
+ | Subsequent calls to this same endpoint make it possible to update the purchase order information. You can also report incorrect data at order@mcule.com. Please make sure you reference the quote' | ||
api.txt · Last modified: 2024/05/10 08:12 by bkovats