This is an old revision of the document!
Table of Contents
API base url: https://mcule.com/api/v1/
Examples are demonstrated with HTTPie.
Response status codes
- 200 OK - Success response
- 400 BAD REQUEST - A validation error typically
- 401 UNAUTHORIZED - Unauthorized
- 403 FORBIDDEN - Permission denied
- 404 NOT FOUND - Not found
- 500 SERVER ERROR - Something went wrong
Public API endpoints
Public API endpoints are accessible to everyone, without authentication.
Database files
Endpoint:
/database-files/
Example API request:
http https://mcule.com/api/v1/database-files/ --print HBhb
Request:
GET /api/v1/database-files/ HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate
Response:
HTTP/1.1 200 OK Allow: GET, HEAD, OPTIONS Content-Type: application/json { "count": 2, "next": null, "previous": null, "results": [ { "description": "All purchasable, in stock & virtual compounds", "entry_count": 35772718, "files": [ { "download_url": "https://mcule.s3.amazonaws.com/database/mcule_purchasable_full_170918.sdf.gz", "file_type": "sdf.gz", "file_type_display": "2D SDF (sdf.gz)", "size_mb": 5762 }, { "download_url": "https://mcule.s3.amazonaws.com/database/mcule_purchasable_full_170918.smiles.gz", "file_type": "smiles.gz", "file_type_display": "SMILES (smi.gz)", "size_mb": 462 } ], "last_updated": "2017-09-18", "name": "Mcule Purchasable (full)" }, { "description": "All purchasable, in stock compounds", "entry_count": 5648837, "files": [ { "download_url": "https://mcule.s3.amazonaws.com/database/mcule_purchasable_in_stock_170918.sdf.gz", "file_type": "sdf.gz", "file_type_display": "2D SDF (sdf.gz)", "size_mb": 1311 }, { "download_url": "https://mcule.s3.amazonaws.com/database/mcule_purchasable_in_stock_170918.smiles.gz", "file_type": "smiles.gz", "file_type_display": "SMILES (smi.gz)", "size_mb": 84 } ], "last_updated": "2017-09-18", "name": "Mcule Purchasable (in stock)" } ] }
Compound details
Endpoint:
/compound/<mcule_id>/
Example API request:
http https://mcule.com/api/v1/compound/MCULE-9380369173/ --print HBhb
Request:
GET /api/v1/compound/MCULE-9380369173/ HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate
Response:
HTTP/1.1 200 OK Allow: GET, HEAD, OPTIONS Content-Encoding: gzip Content-Type: application/json { "components": [], "formula": "C15H11N3O2S2", "inchi_key": "WVRLGAPZMSKMGL-UHFFFAOYSA-N", "mcule_id": "MCULE-9380369173", "mol": "\n mcule 05121714262D\n\n 22 24 0 0 0 0 0 0 0 0999 V2000\n 3.8489 4.0497 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8489 3.0496 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9831 2.5496 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1169 3.0496 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9831 1.5495 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.7922 0.9621 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4832 0.0109 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 2.4829 0.0109 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8951 -0.7981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9006 -0.6935 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3127 -1.5025 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.6220 -2.4537 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.1871 -3.0416 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n -0.9960 -2.4537 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.6872 -1.5025 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n -1.9472 -2.7625 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1550 -3.7409 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.1061 -4.0497 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.8489 -3.3807 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.6412 -2.4024 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.6901 -2.0935 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1740 0.9621 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\n 2 3 1 0 0 0 0\n 3 4 2 0 0 0 0\n 3 5 1 0 0 0 0\n 5 6 2 0 0 0 0\n 6 7 1 0 0 0 0\n 7 8 2 0 0 0 0\n 8 9 1 0 0 0 0\n 9 10 2 3 0 0 0\n 10 11 1 0 0 0 0\n 11 12 2 0 0 0 0\n 12 13 1 0 0 0 0\n 13 14 2 0 0 0 0\n 14 15 1 0 0 0 0\n 11 15 1 0 0 0 0\n 14 16 1 0 0 0 0\n 16 17 1 0 0 0 0\n 17 18 2 0 0 0 0\n 18 19 1 0 0 0 0\n 19 20 2 0 0 0 0\n 20 21 1 0 0 0 0\n 16 21 2 0 0 0 0\n 8 22 1 0 0 0 0\n 5 22 1 0 0 0 0\nM END", "properties": { "atoms": 33, "components": 1, "ct_bonds": 1, "h_bond_acceptors": 5, "h_bond_donors": 0, "halogen_atoms": 0, "heavy_atoms": 22, "heteroatoms": 7, "hydrogens": 11, "known_ct_bonds": 0, "known_stereocenters": 0, "logp": 3.6186, "mol_mass": 329.401, "non_organic_atoms": 0, "o_and_n_atoms": 5, "psa": 121.45, "r3_violations": 5, "r5_violations": 0, "refractivity": 87.6665, "rings": 3, "rotatable_bonds": 5, "stereocenters": 0, "undef_ct_bonds": 0, "undef_stereocenters": 0, "unknown_ct_bonds": 1, "unknown_stereocenters": 0 }, "smiles": "COC(C1SC(C=CC2SC(C3=NC=CC=C3)=NC=2)=NC=1)=O", "std_inchi": "InChI=1S/C15H11N3O2S2/c1-20-15(19)12-9-17-13(22-12)6-5-10-8-18-14(21-10)11-4-2-3-7-16-11/h2-9H,1H3", "stereo_type": "none", "url": "https://mcule.com/MCULE-9380369173/" }
InChIKey lookup
Endpoint:
/lookup/<inchi_key>
Example API request:
http https://mcule.com/api/v1/lookup/inchikey/WVRLGAPZMSKMGL-UHFFFAOYSA-N --print HBhb
Request:
GET /api/v1/lookup/inchikey/WVRLGAPZMSKMGL-UHFFFAOYSA-N HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate
Response:
HTTP/1.1 200 OK Allow: GET, HEAD, OPTIONS Content-Encoding: gzip Content-Type: application/json { "results": [ { "mcule_id": "MCULE-9380369173", "smiles": "COC(C1SC(C=CC2SC(C3=NC=CC=C3)=NC=2)=NC=1)=O", "url": "https://mcule.com/MCULE-9380369173/" } ] }
Single query search / lookup
Endpoint:
/search/lookup/?query=<your_query>
Where the query can be an mcule ID, SMILES, InChI or InChIKey identifier.
Example API request:
http 'https://mcule.com/api/v1/search/lookup/?query=COC(C1SC(C=CC2SC(C3=NC=CC=C3)=NC=2)=NC=1)=O' --print HBhb
Request:
GET /api/v1/search/lookup/?query=COC(C1SC(C=CC2SC(C3=NC=CC=C3)=NC=2)=NC=1)=O HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate
Response:
HTTP/1.1 200 OK Allow: GET, HEAD, OPTIONS Content-Encoding: gzip Content-Type: application/json { "results": [ { "mcule_id": "MCULE-9380369173", "smiles": "COC(C1SC(C=CC2SC(C3=NC=CC=C3)=NC=2)=NC=1)=O", "url": "https://mcule.com/MCULE-9380369173/" } ] }
Authentication
Authentication is currently a token based authentication. If you would like to access our protected API endpoints, please drop us an email at support@mcule.com and we can provide you with a token.
Once you have a valid token you have to send it in the Authorization header:
Authorization: Token <your_token>
Example:
Authorization: Token 905050288b9e786a4d60gc2fe2e5007000b7f17c
If you have a valid access token you can check it on the API acccess page on mcule.com. If you need to generate a new one, you can also do it there.
Protected API endpoints
Protected API endpoints are only accessible if a valid token is provided in the Authorization header of the request.
Compound availability
Endpoint:
/compound/<mcule_id>/availability/
Example API request:
http https://mcule.com/api/v1/compound/MCULE-9380369173/availability/ "Authorization: Token <your_token>" --print HBhb
Request:
GET /api/v1/compound/MCULE-9380369173/availability/ HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Authorization: Token <your_token>
Response:
HTTP/1.1 200 OK Allow: GET, HEAD, OPTIONS Content-Encoding: gzip Content-Type: application/json { "availability_type": "in stock", "confirmed_amount": 242, "confirmed_amount_unit": "mg" }
Compound prices
Endpoint:
/compound/<mcule_id>/prices/
Example API request:
http https://mcule.com/api/v1/compound/MCULE-9380369173/prices/ "Authorization: Token <your_token>" --print HBhb
Request:
GET /api/v1/compound/MCULE-9380369173/prices/ HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Authorization: Token <your_token>
Response:
HTTP/1.1 200 OK Allow: GET, HEAD, OPTIONS Content-Encoding: gzip Content-Type: application/json { "best_prices": [ { "amount": 1, "currency": "USD", "delivery_time_working_days": 9, "price": 107, "purity": 90, "unit": "mg" }, { "amount": 5, "currency": "USD", "delivery_time_working_days": 9, "price": 116, "purity": 90, "unit": "mg" }, { "amount": 10, "currency": "USD", "delivery_time_working_days": 9, "price": 151, "purity": 90, "unit": "mg" } ] }
It returns the best prices for 1mg, 5mg and 10mg amounts by default. You can specify amounts of your choice in the amounts GET parameter:
http 'https://mcule.com/api/v1/compound/MCULE-9380369173/prices/?amounts=15,20' "Authorization: Token <your_token>" --print HBhb
Multiple queries exact search
Multiple queries exact search currently accepts the following input identifiers: mcule ID, SMILES, InChI or InChIKey identifiers.
Endpoint:
/search/exact/
Example API request:
echo '{"queries": ["COC(C1SC(C=CC2SC(C3=NC=CC=C3)=NC=2)=NC=1)=O", "CC1=C(C(N2CC3C(CCC3N)C2)=O)SC(CC2=CC=CC=C2)=N1", "C1([C@H](C(C)C)NC(CCCCC2CCSS2)=O)NC2=C(C=CC=C2)N=1", "C1C=C(COC(C(O)(CC2C=CC(O)=CC=2)C(C)OC(C(O)(CC2C=CC(O)=CC=2)C(C)OC(C)=O)=O)=O)C=CC=1OC1C(O)C(O)C(O)C(CO)O1", "CCCCC1=CC=C(CC(N(CC2CCN(C)CC2)C)=O)C=C1"]}' | http https://mcule.com/api/v1/search/exact/ "Authorization: Token <your_token>" --print HBhb
Request:
POST /api/v1/search/exact/ HTTP/1.1 Accept: application/json Accept-Encoding: gzip, deflate Authorization: Token <your_token> Content-Type: application/json { "queries": [ "COC(C1SC(C=CC2SC(C3=NC=CC=C3)=NC=2)=NC=1)=O", "CC1=C(C(N2CC3C(CCC3N)C2)=O)SC(CC2=CC=CC=C2)=N1", "C1([C@H](C(C)C)NC(CCCCC2CCSS2)=O)NC2=C(C=CC=C2)N=1", "C1C=C(COC(C(O)(CC2C=CC(O)=CC=2)C(C)OC(C(O)(CC2C=CC(O)=CC=2)C(C)OC(C)=O)=O)=O)C=CC=1OC1C(O)C(O)C(O)C(CO)O1", "CCCCC1=CC=C(CC(N(CC2CCN(C)CC2)C)=O)C=C1" ] }
Response:
HTTP/1.1 200 OK Allow: POST, OPTIONS Content-Encoding: gzip Content-Type: application/json { "results": [ { "input_index": 1, "mcule_id": "MCULE-9380369173", "smiles": "COC(C1SC(C=CC2SC(C3=NC=CC=C3)=NC=2)=NC=1)=O", "url": "https://mcule.com/MCULE-9380369173/" }, { "input_index": 2, "mcule_id": "MCULE-4016901520", "smiles": "CC1=C(C(N2CC3C(CCC3N)C2)=O)SC(CC2=CC=CC=C2)=N1", "url": "https://mcule.com/MCULE-4016901520/" }, { "input_index": 3, "mcule_id": "MCULE-7428195288", "smiles": "C1([C@H](C(C)C)NC(CCCC[C@H]2CCSS2)=O)NC2=C(C=CC=C2)N=1", "url": "https://mcule.com/MCULE-7428195288/" }, { "input_index": 5, "mcule_id": "MCULE-1259420189", "smiles": "CCCCC1=CC=C(CC(N(CC2CCN(C)CC2)C)=O)C=C1", "url": "https://mcule.com/MCULE-1259420189/" } ] }
Multiple queries exact search with availability
Endpoint:
/search/exact/availability/
Example API request:
echo {"queries": ["COC(C1SC(C=CC2SC(C3=NC=CC=C3)=NC=2)=NC=1)=O", "CC1=C(C(N2CC3C(CCC3N)C2)=O)SC(CC2=CC=CC=C2)=N1", "C1([C@H](C(C)C)NC(CCCCC2CCSS2)=O)NC2=C(C=CC=C2)N=1", "C1C=C(COC(C(O)(CC2C=CC(O)=CC=2)C(C)OC(C(O)(CC2C=CC(O)=CC=2)C(C)OC(C)=O)=O)=O)C=CC=1OC1C(O)C(O)C(O)C(CO)O1", "CCCCC1=CC=C(CC(N(CC2CCN(C)CC2)C)=O)C=C1"]} | http https://mcule.com/api/v1/search/exact/availability/ "Authorization: Token <your_token>" --print HBhb
Request:
POST /api/v1/search/exact/availability/ HTTP/1.1 Accept: application/json Accept-Encoding: gzip, deflate Authorization: Token <your_token> Content-Type: application/json { "queries": [ "COC(C1SC(C=CC2SC(C3=NC=CC=C3)=NC=2)=NC=1)=O", "CC1=C(C(N2CC3C(CCC3N)C2)=O)SC(CC2=CC=CC=C2)=N1", "C1([C@H](C(C)C)NC(CCCCC2CCSS2)=O)NC2=C(C=CC=C2)N=1", "C1C=C(COC(C(O)(CC2C=CC(O)=CC=2)C(C)OC(C(O)(CC2C=CC(O)=CC=2)C(C)OC(C)=O)=O)=O)C=CC=1OC1C(O)C(O)C(O)C(CO)O1", "CCCCC1=CC=C(CC(N(CC2CCN(C)CC2)C)=O)C=C1" ] }
Response:
HTTP/1.1 200 OK Allow: POST, OPTIONS Content-Encoding: gzip Content-Type: application/json { "results": [ { "availability": { "availability_type": "in stock", "confirmed_amount": 242, "confirmed_amount_unit": "mg" }, "input_index": 1, "mcule_id": "MCULE-9380369173", "smiles": "COC(C1SC(C=CC2SC(C3=NC=CC=C3)=NC=2)=NC=1)=O", "url": "https://mcule.com/MCULE-9380369173/" }, { "availability": { "availability_type": "in stock", "confirmed_amount": null, "confirmed_amount_unit": "mg" }, "input_index": 2, "mcule_id": "MCULE-4016901520", "smiles": "CC1=C(C(N2CC3C(CCC3N)C2)=O)SC(CC2=CC=CC=C2)=N1", "url": "https://mcule.com/MCULE-4016901520/" }, { "availability": { "availability_type": "in stock", "confirmed_amount": null, "confirmed_amount_unit": "mg" }, "input_index": 3, "mcule_id": "MCULE-7428195288", "smiles": "C1([C@H](C(C)C)NC(CCCC[C@H]2CCSS2)=O)NC2=C(C=CC=C2)N=1", "url": "https://mcule.com/MCULE-7428195288/" }, { "availability": { "availability_type": "potentially purchasable", "confirmed_amount": null, "confirmed_amount_unit": "mg" }, "input_index": 5, "mcule_id": "MCULE-1259420189", "smiles": "CCCCC1=CC=C(CC(N(CC2CCN(C)CC2)C)=O)C=C1", "url": "https://mcule.com/MCULE-1259420189/" } ] }
Compound suppliers public API
You can get some very basic (public) information about our compound suppliers with this API.
Endpoint:
/compound-suppliers-public/
Example API request:
http https://mcule.com/api/v1/compound-suppliers-public/ "Authorization: Token <your_token>" --print HBhb
Example request:
GET /api/v1/compound-suppliers-public/ HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Authorization: Token <your_token>
Example response:
HTTP/1.1 200 OK Allow: GET, HEAD, OPTIONS Connection: keep-alive Content-Encoding: gzip Content-Type: application/json { "count": 115, "next": "https://mcule.com/api/v1/compound-suppliers-public/?page=2", "previous": null, "results": [ { "api_url": "https://mcule.com/api/v1/compound-suppliers-public/58/", "catalogs": [ { "api_url": "https://mcule.com/api/v1/compound-catalogs-public/60/", "id": 60, "name": "Compound Cloud collection", "supplier": 58, "supplier_name": "BioAscent Discovery", "type": 30, "type_display": "Screening" } ], "id": 58, "name": "BioAscent Discovery", "shipping_from_country": "", "shipping_from_country_display": "", "website": "" }, ... ] }
The detail API endpoint is also available on this endpoint:
/compound-suppliers-public/<supplier_id>/
It will return a similar response as the above one but for an individual compound supplier.
Compound catalogs public API
You can get some very basic (public) information about our compound catalogs with this API.
Endpoint:
/compound-catalogs-public/
Example API request:
http https://mcule.com/api/v1/compound-catalogs-public/ "Authorization: Token <your_token>" --print HBhb
Example request:
GET /api/v1/compound-catalogs-public/ HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Authorization: Token <your_token> Connection: keep-alive
Example response:
HTTP/1.1 200 OK Allow: GET, HEAD, OPTIONS Connection: keep-alive Content-Encoding: gzip Content-Type: application/json { "count": 205, "next": "https://mcule.com/api/v1/compound-catalogs-public/?page=2", "previous": null, "results": [ { "api_url": "https://mcule.com/api/v1/compound-catalogs-public/60/", "id": 60, "name": "Compound Cloud collection", "supplier": 58, "supplier_name": "BioAscent Discovery", "type": 30, "type_display": "Screening" }, ... ] }
The detail API endpoint is also available on this endpoint:
/compound-catalogs-public/<catalog_id>/
It will return a similar response as the above one but for an individual compound catalog.
Quote Request API
Endpoint:
/iquote-queries/
Example API request:
echo '{"customer_first_name": "John", "customer_last_name": "Doe", "delivery_country": "US", "mcule_ids": ["MCULE-2221628462", "MCULE-6824753328", "MCULE-1886826647", "MCULE-4609548851", "MCULE-7223347867"], "min_amount": null, "amount": 1}' | http https://mcule.com/api/v1/iquote-queries/ "Authorization: Token <your_token>" --print HBhb
Mandatory fields:
- mcule_ids: List of mcule IDs of structures you want get a quote for.
- customer_first_name: The customer's first name. It does not need to be specified if the user's first name is specified on the Edit profile page on mcule.com.
- customer_last_name: The customer's last name. It does not need to be specified if the user's last name is specified on the Edit profile page on mcule.com.
- delivery_country: ISO 3166-1 alpha-2 code of the delivery country.
Optional fields:
- amount: Preferred amount per molecule (mg). (default: 1)
- min_amount: Acceptable minimum amount (mg). (default: null)
- target_volume: The target volume (in ml), in case of solution based amount.
- target_cc: Target concentration (mM), in case of solution based amount.
- customer_email: The customer's email address. By default it will be filled with the email address associated with the user making the API request.
- delivery_time: Delivery time limit (working days). Door-to-door delivery time. Only offer molecules that are available within the specified number of working days. You can specify null if delivery time is not critical. (default: 21)
- purity: Required minimum purity (%). (default: null)
The amount or target concentration-volume pair (target_volume and target_cc) need to be specified.
Advanced optional fields:
- keep_original_salt_form: If false (by default), allow Mcule to deliver an alternative salt form if the original is not available. (default: false)
- keep_original_tautomer_form: If false (by default), allow Mcule to deliver compounds drawn in alternative tautomer forms. Alternative tautomer forms are perceived by the system based on IUPAC InChI identifiers. (default: false)
- keep_original_stereo_form: If false (by default), allow Mcule to deliver compounds drawn in alternative stereochemical forms. (default: false)
- deliver_multiple_salt_forms: Deliver multiple salt forms or tautomers of the same compound. If false and the input contains duplicates, only a single salt form / tautomer will be kept (only effective when alternative salt or tautomer forms are allowed). (default: false)
Example request:
POST /api/v1/iquote-queries/ HTTP/1.1 Accept: application/json, */* Accept-Encoding: gzip, deflate Authorization: Token <your_token> Content-Type: application/json { "amount": 1, "customer_first_name": "John", "customer_last_name": "Doe", "delivery_country": "US", "mcule_ids": [ "MCULE-2221628462", "MCULE-6824753328", "MCULE-1886826647", "MCULE-4609548851", "MCULE-7223347867" ], "min_amount": null }
Example response:
HTTP/1.1 201 CREATED Allow: GET, POST, HEAD, OPTIONS Content-Type: application/json { "amount": 1, "api_url": "https://mcule.com/api/v1/iquote-queries/15029/", "created": "2019-08-05T19:21:55.339011", "customer_email": "", "customer_first_name": "John", "customer_last_name": "Doe", "deliver_multiple_salt_forms": false, "delivery_address": "", "delivery_city": "", "delivery_contact_person_email": "", "delivery_contact_person_name": "", "delivery_contact_person_phone": "", "delivery_country": "US", "delivery_post_code": "", "delivery_time": 21, "end_date": null, "group": null, "id": 15029, "keep_original_salt_form": false, "keep_original_stereo_form": false, "keep_original_tautomer_form": false, "min_amount": null, "notes": "", "promo_code": "", "purity": null, "site_url": "https://mcule.com/quote/query/15029/", "start_date": null, "state": 10, "state_display": "Pending", "target_cc": null, "target_volume": null, "user": 11 }
Quote Request Status API
Since processing a quote request and generating suitable quotes can take some time it is an asynchronous process. You can query the status of a quote request by calling the detail API endpoint of the quote request. It is returned in the api_url field when you create the quote request. You can also use the id field to construct the url of the API call. You can check the state field of the response whether the async quote request processing is finished.
States:
- 10 / Pending: The quote query is queued but the processing has not started yet.
- 20 / Running: The processing of the quote query is in progress.
- 30 / Done: The processing of the quote query is finished. For one quote request query we might generate multiple quotes (this is what we call a group) or it is also possible that we could not generate any quotes for a particular quote request. If there are quotes they will appear under the group field where the quotes field contains a list of the generated quotes and some basic info about them. You can get detailed data of a particular quote by calling the endpoint specified in the api_url field.
- 40 / Error: An error happened during the processing of the quote query.
Following the above example where the ID of the quote request is 15029 we query the status of the quote request:
http https://mcule.com/api/v1/iquote-queries/15029/ "Authorization: Token <your_token>" --print HBhb
Example request:
GET /api/v1/iquote-queries/15029/ HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Authorization: Token <your_token>
Example response:
HTTP/1.1 200 OK Allow: GET, HEAD, OPTIONS Connection: keep-alive Content-Encoding: gzip Content-Type: application/json { "amount": 1, "api_url": "https://mcule.com/api/v1/iquote-queries/15029/", "created": "2019-08-05T19:21:55.339011", "customer_email": "", "customer_first_name": "John", "customer_last_name": "Doe", "deliver_multiple_salt_forms": false, "delivery_address": "", "delivery_city": "", "delivery_contact_person_email": "", "delivery_contact_person_name": "", "delivery_contact_person_phone": "", "delivery_country": "US", "delivery_post_code": "", "delivery_time": 21, "end_date": "2019-08-05T19:22:13.109267", "group": { "created": "2019-08-05T19:22:13.063732", "id": 11647, "query": 15029, "quotes": [ { "analytical_services_price": "0.00", "api_url": "https://mcule.com/api/v1/iquotes/15679/", "avg_product_price": 80.75, "coverage_percent": 80, "created": "2019-08-05T19:22:13.099143", "delivery_days": 11, "delivery_price": "194.16", "description": "", "discount": 0, "duplicate_count": 0, "extra_handling_price": "0.00", "group": 11647, "id": 15679, "is_expired": false, "is_saved": false, "name": "", "order_data": null, "payment_due_days": 30, "po_number": null, "price": "551.04", "product_discount_price": "0.00", "products_price": "323.00", "reference_id_full": "I-15679", "reformatting_price": "0.00", "shipping_price": "33.88", "site_url": "https://mcule.com/quote/I-15679/", "special_formatting_price": null, "state": 10, "state_display": "Displayed", "stock_with_amount_ratio": 0, "suppliers_count": 2, "total_cost": 551.04, "total_cost_without_discount": 551.04, "total_discount_price": "0.00", "type": 30, "type_display": "Optimum", "updated": "2019-08-05T19:22:13.099155", "valid_until": "2019-09-04T19:22:13.099" }, { "analytical_services_price": "0.00", "api_url": "https://mcule.com/api/v1/iquotes/15678/", "avg_product_price": 160.298, "coverage_percent": 100, "created": "2019-08-05T19:22:13.087753", "delivery_days": 11, "delivery_price": "339.47", "description": "", "discount": 0, "duplicate_count": 0, "extra_handling_price": "0.00", "group": 11647, "id": 15678, "is_expired": false, "is_saved": false, "name": "", "order_data": null, "payment_due_days": 30, "po_number": null, "price": "1183.84", "product_discount_price": "0.00", "products_price": "801.49", "reference_id_full": "I-15678", "reformatting_price": "0.00", "shipping_price": "42.88", "site_url": "https://mcule.com/quote/I-15678/", "special_formatting_price": null, "state": 10, "state_display": "Displayed", "stock_with_amount_ratio": 0, "suppliers_count": 3, "total_cost": 1183.84, "total_cost_without_discount": 1183.84, "total_discount_price": "0.00", "type": 20, "type_display": "Fastest delivery", "updated": "2019-08-05T19:22:13.087765", "valid_until": "2019-09-04T19:22:13.087" }, { "analytical_services_price": "0.00", "api_url": "https://mcule.com/api/v1/iquotes/15677/", "avg_product_price": 123.29, "coverage_percent": 100, "created": "2019-08-05T19:22:13.069027", "delivery_days": 21, "delivery_price": "311.16", "description": "", "discount": 0, "duplicate_count": 0, "extra_handling_price": "0.00", "group": 11647, "id": 15677, "is_expired": false, "is_saved": false, "name": "", "order_data": null, "payment_due_days": 30, "po_number": null, "price": "967.41", "product_discount_price": "0.00", "products_price": "616.45", "reference_id_full": "I-15677", "reformatting_price": "0.00", "shipping_price": "39.80", "site_url": "https://mcule.com/quote/I-15677/", "special_formatting_price": null, "state": 10, "state_display": "Displayed", "stock_with_amount_ratio": 0, "suppliers_count": 3, "total_cost": 967.41, "total_cost_without_discount": 967.41, "total_discount_price": "0.00", "tracking": null, "type": 10, "type_display": "Best price", "updated": "2019-08-05T19:22:13.069039", "valid_until": "2019-09-04T19:22:13.069" } ], "site_url": "https://mcule.com/quote/group/11647/", "updated": "2019-08-05T19:22:13.063747" }, "id": 15029, "keep_original_salt_form": false, "keep_original_stereo_form": false, "keep_original_tautomer_form": false, "min_amount": null, "notes": "", "promo_code": "", "purity": null, "site_url": "https://mcule.com/quote/query/15029/", "start_date": "2019-08-05T19:21:55.430800", "state": 30, "state_display": "Done", "target_cc": null, "target_volume": null, "user": 11 }
Check for the group field. If it is not null, we could generate some quotes for your quote query. As you can see from the above result, we could generate 3 different quotes for the quote query. A “Best price” quote, a “Fastest delivery” quote and an “Optimum” quote.
Quote API
In order to get the detailed data of an individual quote, you can query the following endpoint.
http https://mcule.com/api/v1/iquotes/15677/ "Authorization: Token <your_token>" --print HBhb
Example request:
GET /api/v1/iquotes/15677/ HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Authorization: Token <your_token>
Example response:
HTTP/1.1 200 OK Allow: GET, HEAD, OPTIONS Content-Encoding: gzip Content-Type: application/json { "analytical_services_price": "0.00", "api_url": "https://mcule.com/api/v1/iquotes/15677/", "avg_product_price": 123.29, "catalog_data": [ { "avg_effective_price": -126.72333333333333, "catalog": 6, "delivery_price": "86.95", "delivery_time": 11, "effective_price": "380.17", "effective_price_display": -380.17, "id": 90198, "products_count": 3, "products_price": "287.82", "quote": 15677, "reformatting_price": "0.00" }, { "avg_effective_price": -144.45, "catalog": 156, "delivery_price": "107.21", "delivery_time": 10, "effective_price": "144.45", "effective_price_display": -144.45, "id": 90197, "products_count": 1, "products_price": "35.18", "quote": 15677, "reformatting_price": "0.00" }, { "avg_effective_price": -416.37, "catalog": 202, "delivery_price": "117.00", "delivery_time": 21, "effective_price": "416.37", "effective_price": -416.37, "id": 90196, "products_count": 1, "products_price": "293.45", "quote": 15677, "reformatting_price": "0.00" } ], "coverage_percent": 100, "created": "2019-08-05T19:22:13.069027", "delivery_days": 21, "delivery_price": "311.16", "description": "", "discount": 0, "duplicate_count": 0, "extra_handling_price": "0.00", "group": 11647, "id": 15677, "is_expired": false, "is_saved": false, "items": [ { "amount": 1, "effective_price_display": -144.45, "id": 1740173, "price": "144.45", "product": 505393003, "product_catalog_id": 156, "product_catalog_name": "Building Blocks", "product_compound_mcule_id": "MCULE-1886826647", "product_mcule_id": "P-505393003", "product_price": "35.18", "product_purity": 98, "product_supplier_id": 37, "product_supplier_name": "AK Scientific", "quote": 15677, "structure_origin": 346255984, "structure_origin_mcule_id": "MCULE-1886826647" }, { "amount": 1, "effective_price_display": -97.32, "id": 1740172, "price": "97.32", "product_catalog_id": 6, "product_catalog_name": "Advanced Collection", "product": 346316287, "product_compound_mcule_id": "MCULE-3906582667", "product_mcule_id": "P-346316287", "product_price": "95.94", "product_purity": 90, "product_supplier_id": 3, "product_supplier_name": "Enamine", "quote": 15677, "structure_origin": 346316288, "structure_origin_mcule_id": "MCULE-6824753328" }, { "amount": 1, "effective_price_display": -97.32, "id": 1740171, "price": "97.32", "product": 346567071, "product_catalog_id": 6, "product_catalog_name": "Advanced Collection", "product_compound_mcule_id": "MCULE-2221628462", "product_mcule_id": "P-346567071", "product_price": "95.94", "product_purity": 90, "product_supplier_id": 3, "product_supplier_name": "Enamine", "quote": 15677, "structure_origin": 346567072, "structure_origin_mcule_id": "MCULE-2221628462" }, { "amount": 1, "effective_price_display": -97.32, "id": 1740170, "price": "97.32", "product": 346206264, "product_catalog_id": 6, "product_catalog_name": "Advanced Collection", "product_compound_mcule_id": "MCULE-7223347867", "product_mcule_id": "P-346206264", "product_price": "95.94", "product_purity": 90, "product_supplier_id": 3, "product_supplier_name": "Enamine", "quote": 15677, "structure_origin": 346206265, "structure_origin_mcule_id": "MCULE-7223347867" }, { "amount": 1, "effective_price_display": -416.37, "id": 1740169, "price": "416.37", "product": 580505383, "product_catalog_id": 202, "product_catalog_name": "Compounds on demand", "product_compound_mcule_id": "MCULE-4609548851", "product_mcule_id": "P-580505383", "product_price": "293.45", "product_purity": null, "product_supplier_id": 33, "product_supplier_name": "Manchester Organics", "quote": 15677, "structure_origin": 346209969, "structure_origin_mcule_id": "MCULE-4609548851" } ], "missing_mcule_ids": [], "name": "", "order_data": null, "payment_due_days": 30, "po_number": null, "price": "967.41", "price_items": [ { "attr": "product_discount", "name": "Product discount (0%)", "price": 0.0 }, { "attr": "delivery_price_final", "name": "Shipping (from 3 suppliers to Mcule)", "price": 311.16 }, { "attr": "shipping_price_final", "name": "Shipping & package consolidation", "price": 39.8 }, { "attr": "reformatting_price_final", "name": "Reformatting", "price": 0 }, { "attr": "analytical_services_price_final", "name": "Analytical services", "price": 0 }, { "attr": "extra_handling_price_final", "name": "Extra handling", "price": 0 }, { "attr": "total_discount_price", "name": "Total discount (0%)", "price": 0.0 } ], "product_discount_price": "0.00", "products_price": "616.45", "query": { "amount": 1, "api_url": "https://mcule.com/api/v1/iquote-queries/15029/", "created": "2019-08-05T19:21:55.339011", "customer_email": "", "customer_first_name": "John", "customer_last_name": "Doe", "deliver_multiple_salt_forms": false, "delivery_address": "", "delivery_city": "", "delivery_contact_person_email": "", "delivery_contact_person_name": "", "delivery_contact_person_phone": "", "delivery_country": "US", "delivery_post_code": "", "delivery_time": 21, "end_date": "2019-08-05T19:22:13.109267", "group": 11647, "id": 15029, "keep_original_salt_form": false, "keep_original_stereo_form": false, "keep_original_tautomer_form": false, "min_amount": null, "notes": "", "promo_code": "", "purity": null, "site_url": "https://mcule.com/quote/query/15029/", "start_date": "2019-08-05T19:21:55.430800", "state": 30, "state_display": "Done", "target_cc": null, "target_volume": null, "user": 11 }, "reference_id_full": "I-15677", "reformatting_price": "0.00", "shipping_price": "39.80", "site_url": "https://mcule.com/quote/I-15677/", "special_formatting_price": null, "state": 10, "state_display": "Displayed", "stock_with_amount_ratio": 0, "supplier_data": [ { "delivery_price": "86.95", "delivery_time": 10, "effective_price": "380.17", "effective_price_display": -380.17, "id": 69668, "products_count": 3, "products_price": "287.82", "quote": 15677, "reformatting_price": "0.00", "supplier": 3, "supplier_po_deadline_days": 19, "supplier_po_handling_fee": "0.00", "supplier_po_products_price": "221.40" }, { "delivery_price": "107.21", "delivery_time": 9, "effective_price": "144.45", "effective_price_display": -144.45, "id": 69669, "products_count": 1, "products_price": "35.18", "quote": 15677, "reformatting_price": "0.00", "supplier": 37, "supplier_po_deadline_days": 19, "supplier_po_handling_fee": "0.00", "supplier_po_products_price": "25.00" }, { "delivery_price": "117.00", "delivery_time": 20, "effective_price": "416.37", "effective_price_display": -416.37, "id": 69667, "products_count": 1, "products_price": "293.45", "quote": 15677, "reformatting_price": "0.00", "supplier": 33, "supplier_po_deadline_days": 19, "supplier_po_handling_fee": "0.00", "supplier_po_products_price": "225.73" } ], "suppliers_count": 3, "total_cost": 967.41, "total_cost_without_discount": 967.41, "total_discount_price": "0.00", "tracking": null, "type": 10, "type_display": "Best price", "updated": "2019-08-05T19:22:13.069039", "valid_until": "2019-09-04T19:22:13.069" }
Fields:
Where currency is not specified, it is always USD.
- analytical_services_price: price of analytical services (USD)
- avg_product_price: Average product price (USD)
- catalog_data: list of catalog level data
- products_count: Number of products from this catalog
- products_price: Total product price of this catalog (USD)
- effective_price_display: Total price change if excluded this catalog. (USD) It shows how the total price will change upon removal of the catalog. In addition to the product price, this may include delivery cost, packaging fees, small / minimum order fees, etc.
- avg_effective_price: Average price change upon exclusion of one product (USD).
- delivery_time: Delivery time (work. days)
- quote: The ID of the quote this supplier quote data belongs to.
- coverage_percent: How many of the query molecules appear in the quote. E.g. if your query contains 10 molecules and you get a quote for 9, it is 90%.
- created: The creation datetime of the quote.
- delivery_days: Estimated delivery time. Number of working days after purchase order accepted.
- delivery_price: Shipping cost from suppliers to Mcule (USD)
- duplicate_count: Number of duplicates in the query.
- extra_handling_price: Extra handling cost (USD)
- group:
- id: The ID of the Instant Quote.
- is_expired: Whether the quote is expired.
- is_saved: Whether the quote is saved. Quotes created via the API are not saved.
- items: list of product level data
- amount: Quoted amount (mg)
- effective_price_display: Total price change if excluded this product. (USD) It shows how the total price will change upon removal of the product. In addition to the product price, this may include delivery cost, packaging fees, small / minimum order fees, etc
- price: effective price
- product_mcule_id: The mcule ID of the quoted product.
- product: The ID of the quoted product (should be neglected).
- product_compound_mcule_id: The compound level structures' mcule ID of the quoted product.
- product_price: Product price (USD)
- product_purity: Minimum purity (%)
- structure_origin_mcule_id: The mcule ID of the query molecule.
- quote: The ID of the quote this supplier quote data belongs to.
- missing_mcule_ids: list of missing mcule IDs from the query
- name: The name of the quote. Quotes created via the API don't have names.
- order_data: Order data. (Should be neglected).
- payment_due_days: Payment terms. Number of days net or prepayment by credit card
- price: Total price of quote (USD)
- price_items: The list of price items. They are only used for display purposes basically.
- product_discount_price: Discount of products price (USD).
- products_price: Price of products (USD)
- query: The quote query fields
- reference_id_full: The full reference ID of the instant quote.
- reformatting_price: Reformatting price (USD)
- shipping_price: Shipping & handling cost (USD)
- site_url: The quote's URL to view on mcule.com site.
- special_formatting_price: Special reformatting price (USD)
- state: State code of the quote.
- state_display: Human readable state of the quote.
- supplier_data: list of supplier level data
- delivery_price: Shipping cost (USD)
- delivery_time: Delivery time (working days)
- effective_price: Total price change if excluded this supplier. (USD) It shows how the total price will change upon removal of the supplier. In addition to the product price, this may include delivery cost, packaging fees, small / minimum order fees, etc.
- avg_effective_price: Average price change upon exclusion of one product from this supplier (USD).
- products_count: Number of products from this supplier.
- products_price: Total product price of this supplier (USD)
- quote: The ID of the quote this supplier quote data belongs to.
- reformatting_price: Reformatting price (USD)
- supplier: The ID of the supplier this supplier quote data belongs to.
- suppliers_count: Number of suppliers
- total_cost: Total cost (USD)
- total_cost_without_discount: Total cost without discount (USD)
- total_discount_price: Total discount price (USD)
- type: Type code of the quote.
- type_display: Human readable type of the quote.
- updated: The update datetime the quote.
- valid_until: The datetime until the quote is valid.