{"files":{"SKILL.md":"---\nname: enanomapper-federated-search\ndescription: \"eNanoMapper federated search API skill. Use when working with eNanoMapper federated search for select, enm. Covers 13 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# eNanoMapper federated search\nAPI version: 1.0\n\n## Auth\nNo authentication required.\n\n## Base URL\nhttps://api.ideaconsult.net/nanoreg1\n\n## Setup\n1. No auth setup needed\n2. GET /select -- apache solr powered search\n3. POST /select -- create first select\n\n## Endpoints\n13 endpoints across 2 groups. See references/api-spec.lap for full details.\n\n### Select\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /select | Apache Solr powered search |\n| POST | /select | Apache Solr powered search |\n\n### Enm\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /enm/{db}/investigation | Details of multiple studies |\n| GET | /enm/{db}/substance | List substances |\n| GET | /enm/{db}/substance/{uuid} | Get a substance |\n| GET | /enm/{db}/substance/{uuid}/study | get substance study |\n| GET | /enm/{db}/substance/{uuid}/composition | Substance composition |\n| GET | /enm/{db}/substance/{uuid}/structures | Get substance composition as a dataset |\n| GET | /enm/{db}/substance/{uuid}/studySummary | Get study summary for the substance |\n| GET | /enm/{db}/query/study | Search endpoint summary |\n| GET | /enm/{db}/query/compound/{term}/{representation} | Exact chemical structure search |\n| GET | /enm/{db}/query/smarts | Substructure search |\n| GET | /enm/{db}/query/similarity | Exact similarity search |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"Search select?\" -> GET /select\n- \"Create a select?\" -> POST /select\n- \"Search investigation?\" -> GET /enm/{db}/investigation\n- \"Search substance?\" -> GET /enm/{db}/substance\n- \"Get substance details?\" -> GET /enm/{db}/substance/{uuid}\n- \"List all study?\" -> GET /enm/{db}/substance/{uuid}/study\n- \"List all composition?\" -> GET /enm/{db}/substance/{uuid}/composition\n- \"List all structures?\" -> GET /enm/{db}/substance/{uuid}/structures\n- \"List all studySummary?\" -> GET /enm/{db}/substance/{uuid}/studySummary\n- \"Get compound details?\" -> GET /enm/{db}/query/compound/{term}/{representation}\n- \"Search smarts?\" -> GET /enm/{db}/query/smarts\n- \"Search similarity?\" -> GET /enm/{db}/query/similarity\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Paginated endpoints accept limit/offset or cursor parameters\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api eNanoMapper federated search\n@base https://api.ideaconsult.net/nanoreg1\n@version 1.0\n@endpoints 13\n@toc select(2), enm(11)\n\n@group select\n@endpoint GET /select\n@desc Apache Solr powered search\n@optional {q: str # The query itself, in the form `:`. The wildcard operator `*` is accepted for both `` and ``. See the schemas below for possible field names., fq: str # Filter query, fl: str # Field list, start: int # Starting page, rows: int # Page size, wt: str(json/xml/csv)=xml # Response format}\n@returns(200) {responseHeader: map{zkConnected: bool, status: int, QTime: int, params: map}, response: map{numFound: int, start: int, maxScore: num, docs: [map]}} # Query performed successfully\n@errors {400: BAD_REQUEST, 401: UNAUTHORIZED, 403: FORBIDDEN, 404: NOT_FOUND, 409: CONFLICT, 415: UNSUPPORTED_MEDIA_TYPE, 500: SERVER_ERROR, 503: SERVICE_UNAVAILABLE, 510: INVALID_STATE}\n\n@endpoint POST /select\n@desc Apache Solr powered search\n@optional {wt: str(json/xml)=xml # Response format, params: map{fl: [str], rows: int}, facet: map}\n@returns(200) {responseHeader: map{zkConnected: bool, status: int, QTime: int, params: map}, response: map{numFound: int, start: int, maxScore: num, docs: [map]}} # Query performed successfully\n@errors {400: BAD_REQUEST, 401: UNAUTHORIZED, 403: FORBIDDEN, 404: NOT_FOUND, 409: CONFLICT, 415: UNSUPPORTED_MEDIA_TYPE, 500: SERVER_ERROR, 503: SERVICE_UNAVAILABLE, 510: INVALID_STATE}\n\n@endgroup\n\n@group enm\n@endpoint GET /enm/{db}/investigation\n@desc Details of multiple studies\n@required {db: str(calibrate/enanomapper/enpra/gracious/marina/nanogenotox/nanoinformatix/nanoreg1/nanoreg2/nanotest/sanowork/sbd4nano/sabydoma)=nanoreg1 # Database ID, type: str(byinvestigation/byassay/bysubstance/byprovider/bycitation/bystudytype/bystructure_inchikey/bystructure_smiles/bystructure_name/bysubstance_name/bysubstance_type) # query type, search: str # Search parameter, UUID of the investigation or a substance}\n@optional {inchikey: str # Search parameter, InChI key(s) of the substance component(s), comma delimited, id: str # Search parameter, chemical structure or substance identifier(s), comma delimited, page: int # Starting page, pagesize: int # Page size}\n@returns(200) {substanceType: str, name: str, publicname: str, owner_name: str, topcategory: str, endpointcategory: str, guidance: str, endpoint: str, document_uuid: str, reference: str, reference_owner: str, reference_year: str, effectendpoint: str, resulttype: str, textValue: str, loQualifier: str, loValue: num, upQualifier: str, upValue: num, unit: str, errQualifier: str, err: num, s_uuid: str, assay: str, investigation: str, type_s: str, updated: str, studyResultType: str, _childDocuments_: map} # OK. Entries found\n@errors {404: Entries not found}\n\n@endpoint GET /enm/{db}/substance\n@desc List substances\n@required {db: str(calibrate/enanomapper/enpra/gracious/marina/nanogenotox/nanoinformatix/nanoreg1/nanoreg2/nanotest/sanowork/sbd4nano/sabydoma)=nanoreg1 # Database ID}\n@optional {search: str # Search parameter, type: str(substancetype/name/like/regexp/uuif/CompTox/DOI/reliability/purposeFlag/studyResultType/isRobustStudy/citation/citationowner/topcategory/endpointcategory/params/owner_name/owner_uuid/related/reference/facet), compound_uri: str # If type=related finds all substances containing this compound; if typ =reference - finds all substances with this compound as reference structure, bundleUri: str # Retrieves if selected in this bundle, addDummySubstance: bool # Adds a compound record as substance in JSON; only if type=related, studysummary: bool # If true retrieves study summary for each substance, page: int # Starting page, pagesize: int # Page size}\n@returns(200) {substance: map} # OK. Substances found\n@errors {404: Substances not found}\n\n@endpoint GET /enm/{db}/substance/{uuid}\n@desc Get a substance\n@required {db: str(calibrate/enanomapper/enpra/gracious/marina/nanogenotox/nanoinformatix/nanoreg1/nanoreg2/nanotest/sanowork/sbd4nano/sabydoma)=nanoreg1 # Database ID, uuid: str # Substance UUID}\n@optional {property_uris[]: str: any # Property URIs, page: int # Starting page, pagesize: int # Page size}\n@returns(200) {substance: map} # OK. Substances found\n@errors {404: Substances not found}\n\n@endpoint GET /enm/{db}/substance/{uuid}/study\n@desc get substance study\n@required {db: str(calibrate/enanomapper/enpra/gracious/marina/nanogenotox/nanoinformatix/nanoreg1/nanoreg2/nanotest/sanowork/sbd4nano/sabydoma)=nanoreg1 # Database ID, uuid: str # Substance UUID}\n@optional {top: str(P-CHEM/ECOTOX/ENV FATE/TOX/EXPOSURE) # Top endpoint category, category: str # Endpoint category (The value in the protocol.category.code field), property_uri: str # Property URI https://data.enanomapper.net/property/{UUID} , see Property service, property: str # Property UUID, investigation_uuid: str # Investigation UUID, a code to link different studies, page: int # Starting page, pagesize: int # Page size}\n@returns(200) {study: map} # OK. Substances found\n@errors {404: Substances not found}\n\n@endpoint GET /enm/{db}/substance/{uuid}/composition\n@desc Substance composition\n@required {db: str(calibrate/enanomapper/enpra/gracious/marina/nanogenotox/nanoinformatix/nanoreg1/nanoreg2/nanotest/sanowork/sbd4nano/sabydoma)=nanoreg1 # Database ID, uuid: str # Substance UUID}\n@optional {all: bool # true (Show all compositions) false (do not show hidden compositions), page: int # Starting page, pagesize: int # Page size}\n@returns(200) {composition: map, feature: map} # OK. compositions found\n@errors {404: compositions not found}\n\n@endpoint GET /enm/{db}/substance/{uuid}/structures\n@desc Get substance composition as a dataset\n@required {db: str(calibrate/enanomapper/enpra/gracious/marina/nanogenotox/nanoinformatix/nanoreg1/nanoreg2/nanotest/sanowork/sbd4nano/sabydoma)=nanoreg1 # Database ID, uuid: str # Substance UUID}\n@optional {page: int # Starting page, pagesize: int # Page size}\n@returns(200) {query: map, dataEntry: map, model_uri: str, feature: map} # OK. compositions found\n@errors {404: compositions not found}\n\n@endpoint GET /enm/{db}/substance/{uuid}/studySummary\n@desc Get study summary for the substance\n@required {db: str(calibrate/enanomapper/enpra/gracious/marina/nanogenotox/nanoinformatix/nanoreg1/nanoreg2/nanotest/sanowork/sbd4nano/sabydoma)=nanoreg1 # Database ID, uuid: str # Substance UUID}\n@optional {top: str(P-CHEM/ECOTOX/ENV FATE/TOX/EXPOSURE) # Top endpoint category, category: str # Endpoint category (The value in the protocol.category.code field), property_uri: str # Property URI https://data.enanomapper.net/property/{UUID} , see Property service, property: str # Property UUID, see Property service, result: bool # If true will group by topcategory,endpointcategory,interpretation result, page: int # Starting page, pagesize: int # Page size}\n@returns(200) {facet: map} # OK.\n@errors {404: Entries not found}\n\n@endpoint GET /enm/{db}/query/study\n@desc Search endpoint summary\n@required {db: str(calibrate/enanomapper/enpra/gracious/marina/nanogenotox/nanoinformatix/nanoreg1/nanoreg2/nanotest/sanowork/sbd4nano/sabydoma)=nanoreg1 # Database ID}\n@optional {top: str(P-CHEM/ECOTOX/ENV FATE/TOX/EXPOSURE) # Top endpoint category, category: str # Endpoint category (The value in the protocol.category.code field)}\n@returns(200) {facet: map} # OK.\n@errors {404: Entries not found}\n\n@endpoint GET /enm/{db}/query/compound/{term}/{representation}\n@desc Exact chemical structure search\n@required {db: str(calibrate/enanomapper/enpra/gracious/marina/nanogenotox/nanoinformatix/nanoreg1/nanoreg2/nanotest/sanowork/sbd4nano/sabydoma)=nanoreg1 # Database ID, term: str(search/url/inchikey) # search term type, representation: str(all/smiles/reach/stdinchi/stdinchikey/names/iupac_name/synonym/cas/einecs)}\n@optional {search: str # Compound identifier (SMILES, InChI, name, registry identifiers), b64search: str # Base64 encoded mol file; if included, will be used instead of the 'search' parameter, casesens: bool # Case sensitive search if yes, bundleUri: str # Bundle URI, sameas: str # Ontology URI to define groups of columns, page: int # Starting page, pagesize: int # Page size}\n@returns(200) {query: map, dataEntry: map, model_uri: str, feature: map} # OK. Entries found\n@errors {404: Entries not found}\n\n@endpoint GET /enm/{db}/query/smarts\n@desc Substructure search\n@required {db: str(calibrate/enanomapper/enpra/gracious/marina/nanogenotox/nanoinformatix/nanoreg1/nanoreg2/nanotest/sanowork/sbd4nano/sabydoma)=nanoreg1 # Database ID}\n@optional {search: str # Compound identifier (SMILES, InChI, name, registry identifiers), b64search: str # Base64 encoded mol file; if included, will be used instead of the 'search' parameter, type: str(smiles/mol/url) # Defines the expected content of the search parameter, dataset_uri: str # Restrict the search within the AMBIT dataset specified with the URI, filterBySubstance: bool # Restrict the search within the set of structures with assigned substances, bundleUri: str # If the structure is used in the specified bundle URI, the selection tag will be returned, sameas: str # Ontology URI to define groups of columns, mol: bool # Only for application/json; to include mol as JSON field, page: int # Starting page, pagesize: int # Page size}\n@returns(200) {query: map, dataEntry: map, model_uri: str, feature: map} # OK. Entries found\n@errors {404: Entries not found}\n\n@endpoint GET /enm/{db}/query/similarity\n@desc Exact similarity search\n@required {db: str(calibrate/enanomapper/enpra/gracious/marina/nanogenotox/nanoinformatix/nanoreg1/nanoreg2/nanotest/sanowork/sbd4nano/sabydoma)=nanoreg1 # Database ID}\n@optional {search: str # Compound identifier (SMILES, InChI, name, registry identifiers), b64search: str # Base64 encoded mol file; if included, will be used instead of the 'search' parameter, type: str(smiles/mol/url) # Defines the expected content of the search parameter, threshold: num # Similarity threshold, dataset_uri: str # Restrict the search within the AMBIT dataset specified with the URI, filterBySubstance: bool # Restrict the search within the set of structures with assigned substances, bundleUri: str # If the structure is used in the specified bundle URI, the selection tag will be returned, sameas: str # Ontology URI to define groups of columns, mol: bool # Only for application/json; to include mol as JSON field, page: int # Starting page, pagesize: int # Page size}\n@returns(200) {query: map, dataEntry: map, model_uri: str, feature: map} # OK. Entries found\n@errors {404: Entries not found}\n\n@endgroup\n\n@end\n"}}