This reference covers public research operations supported by the current backend. Service forms supply tool-specific payloads; worker callback endpoints are not client APIs.
Request conventions
Use https://neurosnap.ai as the base URL and X-API-KEY for account authentication. URL-encode service titles and path components. Read both HTTP status and response body before interpreting a result; do not assume errors use the same shape as success responses.
POST is used for job submissions, duplication, and cancellation. Some existing sharing endpoints mutate state through GET; call those deliberately rather than treating every GET route as a harmless probe.
Discover services
| Endpoint | Method | Result |
|---|---|---|
/api/services |
GET | Catalog of service metadata and form definitions |
/api/jobs?exclude_subdata |
GET | Accessible personal history as job rows, newest first |
Job rows include Job ID, Service, Status, Runtime, Credits Used, Note, and organizational identifiers. Team visibility can affect which entries remain accessible. Use the returned names rather than assuming lowercase JSON keys.
Submit and manage jobs
| Endpoint | Method | Contract |
|---|---|---|
/api/job/submit/{service} |
POST | Multipart form with exact field titles; success is a JSON job-ID string |
/api/job/status/{id} |
GET | JSON status string |
/api/job/data/{id} |
GET | Object containing config, in, and out; file lists contain filename/size rows |
/api/job/copy/{id} |
POST | Creates a new billable run from saved inputs and configuration |
/api/job/cancel/{id} |
POST | Requests cancellation; inspect the response and subsequent job status |
The optional note query parameter on submission supplies a recognizable descriptor. File fields require the format documented by their field type; complex molecule and sequence inputs are not arbitrary JSON strings.
Use the service page’s generated API example as a starting point and see the quickstart for multipart construction and bounded polling. Preserve the returned ID before continuing to another stage.
Download files
GET /api/job/file/{id}/{in-or-out}/{filename} checks access and returns an HTTP redirect to a temporary download URL. Use in or out and a filename from the listing. The temporary URL is itself sensitive.
Avoid forwarding the account API key to the storage host. Request the redirect without following it, then download separately:
from urllib.parse import quote, urlparse
filename = result["out"][0][0] # Choose the intended listed output.
response = requests.get(
f"{base}/api/job/file/{job_id}/out/{quote(filename, safe='')}",
headers=headers, allow_redirects=False, timeout=30,
)
response.raise_for_status()
if response.status_code != 307:
raise RuntimeError("Expected a temporary file redirect")
url = response.headers["Location"]
if urlparse(url).scheme != "https":
raise RuntimeError("Expected an HTTPS download URL")
download = requests.get(url, timeout=120) # No account headers.
download.raise_for_status()
Path("downloaded-result").write_bytes(download.content)
This snippet continues the quickstart’s Python context and buffers one file. For large trajectories, stream downloads to disk. Do not store the temporary URL as a permanent research identifier; preserve the job ID and downloaded file instead.
Sharing and access
The existing owner-only share controls use GET /api/job/share/set/{id} to create/replace a token and GET /api/job/share/delete/{id} to revoke it. Shared result routes accept a share query parameter where supported.
The server may report an inaccessible job as unknown. Do not interpret that response as evidence that the job never existed. Confirm the account, team, and share context.
Pipelines and projects
Pipeline routes include POST /api/pipelines/validate, POST /api/pipelines/submit, GET /api/pipelines/status/{id}, and GET /api/pipelines/list. A status response contains pipeline, jobs, and errors. The graph and upload payload is builder-specific; do not substitute the ordinary job multipart schema. Use an exported builder configuration and inspect its request contract before custom integration.
Project routes include GET /api/job-projects and POST operations at /api/job-project/create, /api/job-project/update, /api/job-project/delete, and /api/job-project/assign. Visibility and ownership constraints still apply. Use projects and pipelines to understand the model before automating mutations.
Handle failures without duplicate execution
Check HTTP failures, then inspect known IDs. Retry read operations with a bounded policy; reconcile submissions before retrying writes. Requests can fail after a job has been created. Duplicate-job operations explicitly launch new computation.
The original API tutorial provides additional examples. For exact current fields, use catalog metadata and the service form.