SelfNeuron Documentation and API Reference
SelfNeuron by iPowersoft, Inc. is your AI-powered second brain, designed to organize your thoughts, files, and knowledge intuitively—just like your mind does. No clutter, no chaos—just smart, connected insights. It’s your brain, your data, your AI, your way.
- Works as your digital brain – It mimics human thinking using AI.
- Smart organization – Automatically sorts and finds files.
- Easy search – Uses AI to understand your queries and find the best answers.
🛠️ Getting Started with SelfNeuron
Step 1 : Log in to your account https://www.selfneuron.ai
Step 2 : Upload your first file — this unlocks access to your dashboard
Step 3 : Connect all relevant data sources — documents, notes, chats, and more
Step 4 : Tag and organize your uploaded content for efficient retrieval
Step 5 : Interact with SelfNeuron’s AI through the integrated chat interface
Step 6 : Explore advanced features and tools https://www.selfneuron.ai/
Start building your intelligent digital workspace. Simply ask questions in natural language, and SelfNeuron will retrieve exactly what you need — like your own private assistant.
Need help? We’re here for you! https://www.selfneuron.ai/contact
Let’s walk you through how to get started and explore the platform’s intelligent features.
Login & Onboarding
Your journey starts at the login screen.
- Sign in using your email or instantly with Google
- Upload your first file or paste in text — the AI starts learning from your input immediately
File Upload & Processing
Easily upload content using drag-and-drop.
- Supported files: documents (PDF, TXT, CSV, HTML, JSON, DOCX, PPTX, XLSX), images (JPEG, JPG, PNG), audio (MP3, MPEG) and ZIP archives
- Maximum 50 MB total per upload
- Content search covers documents and images. Audio files and ZIP archives are stored, but their contents are not indexed for search.
- Files are processed and indexed for smart, semantic search
- File status indicators:
Yes — Ready to search
No — Processing in progress
Keywords & Tagging
Organize your data intuitively:
- Use the Keywords button to add custom tags
- Filter and manage files with ease
Smart Search Panel
The heart of SelfNeuron
- Type or speak your question — the AI pulls relevant answers across all your files
- Receive instant confirmation when your files are ready
- Browse auto-generated smart questions from your content
- Click, type, or filter with keywords for tailored results
History
Revisit all past interactions
- Copy, reuse, or continue old conversations
- Always accessible, always organized
My Profile & Account Controls
Manage everything about your SelfNeuron experience from one place.Stay in control of your data, preferences, and activity.Perfect for personalizing or resetting your digital brain.
Update Details
Edit your name, profile picture,email, or phone number anytime. Keep your account info current and secure.Ideal for managing your profile.
View Sessions
View a detailed log of where and when your account was accessed.Track your current device, location, and last active time for security.
Danger Zone Options
Delete Search History
Clear all your previous queries from the SelfNeuron’s memory. This removes only the history, not the uploaded content. Great for privacy or a fresh start.
Delete Files
Permanently remove all uploaded documents and data.Once deleted, this content cannot be recovered. Use with caution when resetting your workspace.
Cancel Subscription
Stop your current paid plan and revert to the Free tier. You’ll lose premium features at the end of your billing cycle.
Delete Account (permanent action)
Completely erase your SelfNeuron account and data. This action is irreversible — everything will be wiped. Only proceed if you're sure to leave the platform.
API Key Generation
Integrate SelfNeuron with your external systems
- Generate secure API keys
- Extend functionality into your existing workflows
SelfNeuron Python SDK
Integrate SelfNeuron directly into your apps, scripts, and workflows. The official Python SDK gives you full control over uploading, searching, and managing your AI-powered digital brain — all from the command line.
Features
- Upload Files & Folders – Push content from any Python script
- Semantic Search – Query your data with natural language
- AI-Powered Answers – Get smart responses directly from your own content
- API Key Authentication – Secure, fast, and ready for integration
- Cross-Platform Compatible – Works on Linux, macOS, Windows
Full Documentation
Check out the full SelfNeuron Python SDK docs and usage tips :
Read the full SDK Docs
Connectors
A powerful cross-platform desktop app for Windows & macOS
Sync your local files directly with your SelfNeuron account — effortlessly.
Sync your local files directly with your SelfNeuron account — effortlessly.
Digital Brain
Powered by AI that learns how you think and organizes your content accordingly.
Smart Syncing
Select any folder on your device — files are automatically uploaded and structured.
Custom Timing
Syncs every 5 minutes by default. Adjust the frequency in app settings.
Web Access
All synced files are accessible anytime via your SelfNeuron web dashboard.
Pricing
| Plan | Details & Features |
|---|---|
| Starter (Free) | 🌱 Free for 30 days. Up to 3 files, 50 AI questions during the trial, basic AI search, and 1 GB storage. |
| Pro (Standard) | 🧠 Unlimited files, 500 AI queries / month, full AI synthesis & auto-linking, Google Drive, GCS and Gmail connectors, 10 GB storage, priority support, and data export. |
| Founder's Deal | 🌟 One-time payment, lifetime access. Full Pro access forever, founding member badge, direct input to the roadmap, and all future Pro features included. (Limited availability). |
Get Started
The SelfNeuron Python SDK gives developers the power to interact with their AI-powered second brain from any Python script. Upload documents, run semantic searches, and receive intelligent answers — all with simple, secure API calls. Whether you're building custom tools or integrating into workflows, the SDK makes SelfNeuron’s intelligence fully programmable.
Generate Otp
POST https://api.selfneuron.ai/auth/otp/generate
Generates and sends a one-time password (OTP) to the provided email address.
Request body
email (string, required): The email address to send OTP.Sample
Request
Copy Code Block
curl --location 'https://api.selfneuron.ai/auth/otp/generate' --header 'Content-Type: application/json' --data-raw '{
"email": "YOUR_EMAIL"
}'Response
Copy Code Block
{"message":"Code generated and sent to YOUR_EMAIL"}Validate Otp
POST https://api.selfneuron.ai/auth/otp/validate
Validates the OTP code sent to a user's email.
Request body
email (string, required): The email address the OTP was sent to.code (string, required): The OTP code to validate.
Request
Copy Code Block
curl --location 'https://api.selfneuron.ai/auth/otp/validate' --header 'Content-Type: application/json' --data-raw '{
"email": "YOUR_EMAIL",
"code": "320572"
}'Response
Copy Code Block
{
"message": "Login successful.",
"data": {
"token": "<JWT_ACCESS_TOKEN>"
}
}Generate Api Key
POST https://api.selfneuron.ai/api/keys/generate/:name
This API is used to generate a new API key for the user.It returns the generated key along with its value.The generated key can be used to authenticate future requests by passing it in the SELFNEURON-API-KEY header.
Alternatively you can login to SelfNeuron Website https://www.selfneuron.ai/ and left panel click on API, Click on Generate Api Key provide a name for the key and copy the key generated to used further.
Alternatively you can login to SelfNeuron Website https://www.selfneuron.ai/ and left panel click on API, Click on Generate Api Key provide a name for the key and copy the key generated to used further.
Authentication
Requires Authorization header with a valid bearer token.Request
Copy Code Block
curl --location --request POST 'https://api.selfneuron.ai/api/keys/generate/MyKey' --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'
Response
Copy Code Block
{
"message": "Generated Key successfully",
"data": {
"id": "<uuid>",
"apiKey": "sn_live_xxxxxxxx",
"name": "MyKey",
"createdDate": "2025-05-14T10:17:15.536166166"
}
}Get Api Keys
GET https://api.selfneuron.ai/api/keys
This API retrieves a list of all API keys created by the user.Useful for managing or rotating your keys used with the SELFNEURON platform.
Authentication
Requires Authorization header with a valid bearer token.Request
Copy Code Block
curl --location 'https://api.selfneuron.ai/api/keys' --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'
Response
Copy Code Block
{
"message": "Fetched Keys successfully",
"data": [
{
"id": "<uuid>",
"apiKey": "sn_live_xxxxxxxx",
"name": "test",
"createdDate": "2025-05-06T11:04:24.539"
},
{
"id": "<uuid>",
"apiKey": "sn_live_xxxxxxxx",
"name": "MyKey",
"createdDate": "2025-05-14T10:17:15.53"
}
]
}Delete Api Keys
DELETE https://api.selfneuron.ai/api/keys/:keyId
This API deletes a specific API key identified by the keyId provided in the path. Once deleted, the key can no longer be used for authentication. Useful for revoking access or rotating old/unused keys.
Authentication
Requires Authorization header with a valid bearer token.Path Parameter
keyId (required): Requires unique KeyId to delete specific keyRequest
Copy Code Block
curl --location --request DELETE 'https://api.selfneuron.ai/api/keys/<uuid>' --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'
Response
Copy Code Block
{"message":"Revoked Api Key successfully"}Get Artifacts
GET https://api.selfneuron.ai/artifacts
Fetches all artifacts uploaded by the authenticated user.
Authentication
Requires SELFNEURON-API-KEY in the request header. Returns a list of artifacts associated with the user's account.Request
Copy Code Block
curl --location 'https://api.selfneuron.ai/artifacts' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"message": "Artifacts fetched successfully",
"data": [
{
"artifactId": "<uuid>",
"artifactGroupId": "<uuid>",
"artifactFileType": "application/pdf",
"artifactFileName": "Ticket.pdf",
"artifactFileSize": 255862,
"artifactFilePathS3": "<uuid>/<uuid>/Ticket.pdf",
"artifactArchived": false,
"artifactCreatedDate": "2025-05-06T04:03:50.055",
"artifactUpdatedDate": "2025-05-06T11:06:43.13",
"artifactCreatedBy": "<uuid>",
"artifactUpdatedBy": "<uuid>",
"deviceUsed": "NA",
"uploadStatus": "SUCCESS",
"keywords": [],
"userId": "<uuid>",
"isVectorReady": true
}
]
}Upload Artifacts
POST https://api.selfneuron.ai/artifacts/upload
This API is used to upload one or more artifact files or provide plain text content via the artifactText field. Each uploaded file can be tagged with user-defined keywords using the filesKeywords field.
Authentication
Requires SELFNEURON-API-KEY in the request header. Returns a list of artifacts associated with the user's account.Content is sent as multipart/form-data.
Request Body (multipart/form-data)
files: One or more files to upload as artifacts. Each file is associated with keywords using the filesKeywords field.filesKeywords: A JSON string mapping each uploaded filename to a list of keywords.
artifactText: Plain text content to upload instead of a file. This can be used when uploading raw text as an artifact.
Request
Copy Code Block
curl --location 'https://api.selfneuron.ai/artifacts/upload' --header 'Content-Type: multipart/form-data' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY' --form 'files=@"Quarterly-Report.pdf"' --form 'filesKeywords="{"Quarterly-Report.pdf":["Finance"]}'''"' --form 'artifactText="Write the text to be uploaded"'Response
Copy Code Block
{
"message": "Upload successful."
}Upload Artifact Keywords
PUT https://api.selfneuron.ai/artifacts/keywords
This API is used to update or replace the keywords associated with an already uploaded artifact. You must provide the unique artifactId of the artifact and the list of new keywords you want to associate with it.
Authentication
Requires SELFNEURON-API-KEY in the request header. Returns a list of artifacts associated with the user's account.Content is sent as application/json.
Request Body
artifactId: The unique ID of the artifact to update.keywords: A list of keywords to associate with the artifact. This will overwrite any existing keywords.
Request
Copy Code Block
curl --location --request PUT 'https://api.selfneuron.ai/artifacts/keywords' --header 'Content-Type: application/json' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY' --data '{
"artifactId": "<uuid>",
"keywords": [
"Finance"
]
}'Response
Copy Code Block
{
"message": "Keywords updated successfully"
}Search Ready
GET https://api.selfneuron.ai/artifacts/search_ready
This API checks whether all artifacts uploaded by the user are search-ready, i.e., fully processed and available for semantic search. It returns a status indicating if any artifacts are still pending processing.
Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location 'https://api.selfneuron.ai/artifacts/search_ready' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
true
Delete Artifact
DELETE https://api.selfneuron.ai/artifacts/:artifactId
This API deletes a specific artifact uploaded by the user.
Authentication
Requires SELFNEURON-API-KEY in headers.Path Parameters
artifactId (required): Provide unique Artifacts Id to delete ArtifactRequest
Copy Code Block
'curl --location --request DELETE 'https://api.selfneuron.ai/artifacts/<uuid>' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
Artifact Deleted successfully
Delete Bulk Artifact
DELETE https://api.selfneuron.ai/artifacts/bulk
This API is used to delete multiple artifacts in bulk. The user must provide a JSON array of unique artifactIds to be deleted.
Authentication
Requires SELFNEURON-API-KEY in headers.Request Body (JSON):
list of artifact Ids to pass in array e.g. ["<uuid>", "<uuid>"]Request
Copy Code Block
curl --location --request DELETE 'https://api.selfneuron.ai/artifacts/bulk' --header 'Content-Type: application/json' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY' --data-raw '[ "<uuid>", "<uuid>" ]'
Response
Copy Code Block
{"message":"Artifacts deleted successfully"}Delete All Artifacts
DELETE https://api.selfneuron.ai/artifacts/all
This API is used to delete all artifacts uploaded by user.
Authentication
Requires SELFNEURON-API-KEY in headers.]
Request
Copy Code Block
curl --location --request DELETE 'https://api.selfneuron.ai/artifacts/all' --header 'Content-Type: application/json' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
Artifacts deleted successfully
GET Keywords
GET https://api.selfneuron.ai/keywords
This API retrieves all keywords available to the caller: the thirteen built-in keywords shared by every account, plus any the user has created themselves. Use them to tag artifacts during upload or with the update endpoints below.
Built-in keywords
Finance, Health, Work, Legal, Travel, Education, Personal, Technology, Home, Insurance, Vehicle, Shopping and Others. They are returned withisDefault: true and are the same for everyone, so they cannot be renamed, archived or deleted. Keywords created by the user come back with isDefault: false.Automatic classification
When a file is indexed its text is classified against the built-in set and matching keywords are attached automatically, alongside anything supplied at upload. A file that matches none of them is taggedOthers. Keywords the user supplied are never displaced or reordered.Limits
A file carries at most 25 keywords in total, user-supplied and automatic together — a file that arrives with 25 receives none automatically. An account may hold up to 200 keywords of its own; the built-in thirteen do not count towards that.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location 'https://api.selfneuron.ai/keywords' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"message": "Keywords fetched successfully",
"data": [
{
"id": "<uuid>",
"keyword": "Finance",
"isActive": true,
"isDefault": true
},
{
"id": "<uuid>",
"keyword": "Technology",
"isActive": true,
"isDefault": true
},
{
"id": "<uuid>",
"keyword": "Quarterly Reports",
"isActive": true,
"isDefault": false
}
]
}Add a new Keyword
POST https://api.selfneuron.ai/keywords/:name
This API creates a new keyword in the system using the value provided as a path parameter. It allows users to define custom tags that can later be associated with uploaded artifacts.
Authentication
Requires SELFNEURON-API-KEY in headers.Path Parameter
name: The keyword to be created. Letters, numbers, spaces, hyphens and underscores only, between 2 and 50 characters. URL-encode it if it contains spaces.Matching is case- and spacing-insensitive, so “Home Loan” and “home loan” are the same keyword. Creating one that already exists returns 400; if it exists but is archived it is reactivated instead.
Request
Copy Code Block
curl --location --request POST 'https://api.selfneuron.ai/keywords/Documents' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"message": "Keyword added successfully",
"data": "Documents"
}Archive/Unarchive Keyword
PUT https://api.selfneuron.ai/keywords/:id/:isActive
This API is used to update the status of a keyword the caller created. Setting isActive to false archives it, hiding it from the pickers while leaving it on files already tagged with it; true brings it back.
Responses
200 when the status changed. 403 for one of the built-in thirteen, which are shared by every account and cannot be archived. 404 when the keyword does not exist or belongs to someone else.Deleting instead
Archiving is reversible and leaves files untouched. To remove a keyword permanently useDELETE /keywords/:id, which also strips it from every file that carries it. Only keywords the caller created can be deleted; the built-in thirteen return 403.Authentication
Requires SELFNEURON-API-KEY in headers.Path Parameter
id: The unique identifier of the keyword to update.isActive: A boolean value (true or false) indicating whether the keyword should be active or archived.
Request
Copy Code Block
curl --location --request PUT 'https://api.selfneuron.ai/keywords/<uuid>/false' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"message": "Keyword updated successfully",
"data": "<uuid>"
}Search Artifacts
POST https://api.selfneuron.ai/search
This API performs a semantic search using the provided text input. It searches across all artifacts uploaded by the user and returns the most relevant matching content. Optionally, searches can be filtered using specific keywords.
Authentication
Requires SELFNEURON-API-KEY in headers.Request Body
text (string, required): The user’s query or natural language question. The system uses this to perform a search across the user’s uploaded artifacts.keywords (array of strings, optional): A list of keywords to narrow down the search scope. If provided, only artifacts tagged with these keywords will be searched. If left empty ([]), the search includes all artifacts.
Request
Copy Code Block
curl --location 'https://api.selfneuron.ai/search' --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY' --data '{
"text": "What is the airline code for Air Arabia?",
"keywords": []
}'Response
Copy Code Block
{
"message": "Search successful.",
"data": {
"answers": [
"The airline code for Air Arabia is G9."
],
"recommendations": [
"Where will Flight G9472 arrive in Sharjah?",
"What is the airline code for Air Arabia?"
],
"text": "What is the airline code for Air Arabia?",
"date": "2025-05-13T04:14:24.046",
"similar_vectors": [
{
"artifactArchived": false,
"artifactGroupId": "<uuid>",
"artifactId": "<uuid>",
"createdBy": "<uuid>",
"createdDate": "2025-05-13T04:07:08.704000",
"fileName": "Ticket.pdf",
"filePathS3": "<uuid>/<uuid>/Ticket.pdf",
"fileType": "application/pdf",
"presignedUrl": null,
"score": 0.7397229671478271,
"size": 255862,
"status": "SUCCESS",
"userId": "<uuid>",
"artifact_text": null
}
],
"audio_file": "base64StringAudio",
"history_id": "<uuid>"
}
}Get All History
GET https://api.selfneuron.ai/search/history/all
This API return all search history results for user.
Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location 'https://api.selfneuron.ai/search/history/all' --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
[
{
"id": "<uuid>",
"searchText": "Where will Flight G9472 arrive in Sharjah?",
"date": "2025-05-13T04:13:51.814",
"latitude": 0.0,
"longitude": 0.0,
"ip": "0.0.0.0",
"device": "Unknown Device",
"userId": "<uuid>",
"similarVectors": [
{
"artifactArchived": false,
"artifactGroupId": "<uuid>",
"artifactId": "<uuid>",
"createdBy": "<uuid>",
"createdDate": "2025-05-13T04:07:08.704000",
"fileName": "Ticket.pdf",
"filePathS3": "<uuid>/<uuid>/Ticket.pdf",
"fileType": "application/pdf",
"presignedUrl": null,
"score": 0.6879743933677673,
"size": 255862,
"status": "SUCCESS",
"userId": "<uuid>",
"artifact_text": null
}
],
"answers": "The text does not specify where Flight G9472 will arrive in Sharjah. It only provides general information about the flight, including its departure and possible layovers, but it does not provide specific arrival details for a particular flight number. If you want to know the arrival details for Flight G9472, I recommend checking with Air Arabia's website or contacting their customer service directly.",
"audioFile": "base64AudioFile",
"isBookmark": false,
"isArchived": false
}
]Update Search History
POST https://api.selfneuron.ai/search/history/update
This API updates the bookmark and archive status for a specific search history entry.
Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request POST 'https://api.selfneuron.ai/search/history/update' --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY' --data '{
"historyId": "<uuid>",
"isBookmark": true,
"isArchived": false
}'Response
Copy Code Block
[
{
"id": "<uuid>",
"searchText": "Where will Flight G9472 arrive in Sharjah?",
"date": "2025-05-13T04:13:51.814",
"latitude": 0.0,
"longitude": 0.0,
"ip": "0.0.0.0",
"device": "Unknown Device",
"userId": "<uuid>",
"similarVectors": [
{
"artifactArchived": false,
"artifactGroupId": "<uuid>",
"artifactId": "<uuid>",
"createdBy": "<uuid>",
"createdDate": "2025-05-13T04:07:08.704000",
"fileName": "Ticket.pdf",
"filePathS3": "<uuid>/<uuid>/Ticket.pdf",
"fileType": "application/pdf",
"presignedUrl": null,
"score": 0.6879743933677673,
"size": 255862,
"status": "SUCCESS",
"userId": "<uuid>",
"artifact_text": null
}
],
"answers": "The text does not specify where Flight G9472 will arrive in Sharjah. It only provides general information about the flight, including its departure and possible layovers, but it does not provide specific arrival details for a particular flight number. If you want to know the arrival details for Flight G9472, I recommend checking with Air Arabia's website or contacting their customer service directly.",
"audioFile": "base64AudioFile",
"isBookmark": false,
"isArchived": false
}
]Delete Search History
DELETE https://api.selfneuron.ai/search/history/delete
This API deletes all the search history for the user.
Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request DELETE 'https://api.selfneuron.ai/search/history/delete' --header 'Content-Type: application/json' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
Search history deleted successfully.
Get User Profile
GET https://api.selfneuron.ai/user/profile
This API fetches the authenticated user's profile details using their API key. Use this endpoint to retrieve the user's profile information such as email, name, and other account-related metadata. The request must include a valid SELFNEURON-API-KEY in the header to identify and authorize the user
Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location 'https://api.selfneuron.ai/user/profile' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"email": "YOUR_EMAIL",
"altEmail": "you@example.com",
"phone": "(555) 010-0000",
"name": "Alex Doe",
"profileImage": null,
"ip": "203.0.113.10",
"device": "MacOS",
"location": "Springfield Illinois US",
"isAgreedTerms": false
}Update User Profile
PUT https://api.selfneuron.ai/user/profile
This API is used to update the authenticated user's profile details. Use this endpoint to retrieve the user's profile information such as email, name, and other account-related metadata. The request must include a valid SELFNEURON-API-KEY in the header to identify and authorize the user
Authentication
Requires SELFNEURON-API-KEY in headers.Request body
email (string) – The user's registered email address (required for identification; cannot be updated).altEmail (string, optional) – An alternate email address for backup communication.
phone (string, optional) – User's phone number in standard format.
name (string, optional) – User’s full name.
profileImage (string or null, optional) – URL or identifier for the profile picture.
ip, device, location, isAgreedTerms – These are either tracked internally or not editable through this API.
Request
Copy Code Block
curl --location --request PUT 'https://api.selfneuron.ai/user/profile' --header 'Content-Type: application/json' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY' --data '{
"email": "YOUR_EMAIL",
"altEmail": "you@example.com",
"phone": "(555) 010-0000",
"name": "Alex",
"profileImage": null,
"ip": "203.0.113.10",
"device": "MacOS",
"location": "Springfield Illinois US",
"isAgreedTerms": false
}'Response
Copy Code Block
{
"id": "<uuid>",
"email": "YOUR_EMAIL",
"altEmail": "you@example.com",
"phone": "(555) 010-0000",
"name": "Alex",
"profileImage": null,
"ip": "203.0.113.10",
"device": "MacOS",
"location": "Springfield Illinois US",
"isAgreedTerms": false
}Update Profile Image
POST https://api.selfneuron.ai/user/profile/image
This API is typically used when a user wants to change or set their profile picture via the SelfNeuron platform.
Authentication
Requires SELFNEURON-API-KEY in headers.Form Data
file (required): The image file to be uploaded as the new profile picture.Type: Image (e.g., .png, .jpg)
Max Size Allowed: 2Mb
Request
Copy Code Block
curl --location 'https://api.selfneuron.ai/user/profile/image' --header 'Content-Type: multipart/form-data' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY' --form 'file=@"symbol white.png"'
Response
Copy Code Block
<base64 image data>
Delete User
PUT https://api.selfneuron.ai/user/profile/delete-account
This API is used to delete the user account from SelfNeuron and all related data.
Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request PUT 'https://api.selfneuron.ai/user/profile/delete-account' --header 'Content-Type: application/json' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
User account and all related data deleted successfully
Get Recommendations
GET https://api.selfneuron.ai/questions/recommendations
This API is used to fetch recommended questions generated based on the artifacts uploaded by the user. It helps users discover relevant questions that can be asked on their uploaded content.
Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/questions/recommendations' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"message": "Recommendations fetched successfully",
"data": [
"Where will Flight G9472 arrive in Sharjah?",
"What is the airline code for Air Arabia?",
"What is the transit time for Flight G9472?"
]
}Search (streaming)
POST https://api.selfneuron.ai/search/stream
This API answers a question the same way as POST /search, but streams the answer back over Server-Sent Events so the client can render it as it arrives instead of waiting for the whole reply. The request body is identical to the blocking endpoint.
Events
Frames arrive in order: meta, similar_vectors, conversation_files, answer_delta (repeated, one per chunk of the answer), recommendations and done. Each frame is a JSON object carrying a type field. A failure part-way through is delivered as an error frame on an already-open stream, so the HTTP status stays 200.Responses
200 opens the stream. 429 with code QUERY_LIMIT_EXCEEDED when the monthly search allowance is spent; this is returned before the stream opens, so it arrives as a normal JSON error rather than a frame.Request Body
Same as POST /search: text is required; keywords, source, session_id, is_followup and new_conversation are optional.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location 'https://api.selfneuron.ai/search/stream' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY' --header 'Content-Type: application/json' --header 'Accept: text/event-stream' --data '{
"text": "What is the notice period in my offer letter?",
"session_id": "<uuid>"
}'
Response
Copy Code Block
event: meta
data: {"type":"meta","routing":"artifacts","text":"What is the notice period in my offer letter?"}
event: similar_vectors
data: {"type":"similar_vectors","similar_vectors":[{"artifactId":"7c9e...","fileName":"Offer-Letter.pdf","filePathS3":"user/offer-letter.pdf","similarity":1.0,"text":"..."}]}
event: answer_delta
data: {"type":"answer_delta","delta":"The notice period is "}
event: answer_delta
data: {"type":"answer_delta","delta":"30 days."}
event: recommendations
data: {"type":"recommendations","recommendations":["What is the joining date?"]}
event: done
data: {"type":"done","history_id":"0f1c2d3e-...","answered":true,"retryable":false,"response_time_ms":2841}
Get Storage Usage
GET https://api.selfneuron.ai/artifacts/storage
This API returns how much storage the account is using: the total size of every file the user has uploaded or synced, and how many files that is. Use it to render a usage bar or to check headroom before an upload.
Responses
200 on success. 500 if the usage could not be read.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/artifacts/storage' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"message": "Storage usage fetched successfully",
"data": {
"usedBytes": 5368709120,
"usedGb": 5.0,
"fileCount": 128
}
}
Get Active Sources
GET https://api.selfneuron.ai/artifacts/active-sources
This API lists the connectors the account currently has files from. It is what drives the source filter on the search screen, so a connector with no files does not appear.
Responses
200 with the list, which is empty when nothing has been connected yet.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/artifacts/active-sources' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"message": "Active sources fetched successfully",
"data": [
"google_drive",
"gmail",
"upload"
]
}
Get Artifact History
GET https://api.selfneuron.ai/artifacts/history
This API returns the audit trail for the files in the account: what was uploaded, synced, renamed, trashed or restored, newest first. Pass artifactId to narrow it to a single file.
Query Parameters
page: the page to return, default 1. size: rows per page, default 10. artifactId: optional file id to filter by.Pagination
The total row count, total pages, current page and page size are returned in the X-Total-Count, X-Total-Pages, X-Current-Page and X-Page-Size response headers.Responses
200 on success. 500 if the history could not be read.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/artifacts/history?page=1&size=10' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"message": "History fetched successfully",
"data": [
{
"userId": "3f2a...",
"artifactId": "7c9e...",
"action": "UPLOADED",
"artifactFileName": "Quarterly-Report.pdf",
"artifactFileType": "application/pdf",
"artifactFileSize": 248311,
"actionDate": "2025-07-19T09:14:22Z",
"details": "Uploaded from web"
}
]
}
Delete Keyword
DELETE https://api.selfneuron.ai/keywords/:id
This API permanently deletes a keyword the caller created and strips it from every file that carries it, including files sitting in the trash. The response returns how many files it was detached from. Archiving with PUT /keywords/:id/:isActive is the reversible alternative.
Path Parameter
id: the unique identifier of the keyword to delete.Responses
200 with the number of files the keyword was removed from. 403 for one of the built-in thirteen, which are shared by every account and cannot be deleted. 400 when the id is not a valid identifier, or the keyword does not exist or belongs to someone else. 500 if the delete could not be completed.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request DELETE 'https://api.selfneuron.ai/keywords/<uuid>' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"message": "Keyword deleted successfully",
"data": 7
}
List Conversations
GET https://api.selfneuron.ai/conversations
This API returns the conversation history for the account, newest first, with each conversation already grouped under a time heading so the client can render the sidebar without doing its own date arithmetic.
Query Parameters
limit: how many conversations to return, default 50.Responses
200 with the list. 204 with no body when the account has no conversations yet. 400 for an invalid request, 500 on failure.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/conversations?limit=50' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
[
{
"id": "<uuid>",
"title": "Notice period in offer letter",
"titleSource": "auto",
"lastUpdated": "2025-07-19T09:14:22Z",
"timeGroup": "Today",
"turns": 3,
"files": [
{ "id": "7c9e...", "name": "Offer-Letter.pdf", "path": "user/offer-letter.pdf" }
]
}
]
Get Recent Conversations
GET https://api.selfneuron.ai/conversations/recent
This API returns only the few most recent conversations. It backs the recent list on the dashboard, where a full history would be more than the panel can show.
Query Parameters
limit: how many conversations to return, default 3.Responses
200 with the list. 204 with no body when there are none.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/conversations/recent?limit=3' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
[
{
"id": "<uuid>",
"title": "Notice period in offer letter",
"titleSource": "auto",
"lastUpdated": "2025-07-19T09:14:22Z",
"timeGroup": "Today",
"turns": 3,
"files": []
}
]
Get File References
GET https://api.selfneuron.ai/conversations/file-references
This API returns the files that have been referenced across conversations, with a count of how many conversations each one appears in. It answers the question of which documents the account actually relies on.
Query Parameters
limit: how many files to return, default 4.Responses
200 with the list. 204 with no body when nothing has been referenced yet.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/conversations/file-references?limit=4' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
[
{
"id": "7c9e...",
"name": "Offer-Letter.pdf",
"path": "user/offer-letter.pdf",
"conversations": 5
}
]
Get Conversation
GET https://api.selfneuron.ai/conversations/:id
This API returns one whole conversation: every question and answer in order, the follow-up recommendations offered at each turn, any feedback left on an answer, and the files the conversation drew on. Conversations belonging to another account are reported as not found.
Path Parameter
id: the unique identifier of the conversation.Responses
200 with the conversation. 404 when it does not exist or belongs to someone else. 400 for an invalid request, 500 on failure.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/conversations/<uuid>' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"id": "<uuid>",
"title": "Notice period in offer letter",
"titleSource": "auto",
"lastUpdated": "2025-07-19T09:14:22Z",
"timeGroup": "Today",
"files": [
{ "id": "7c9e...", "name": "Offer-Letter.pdf", "path": "user/offer-letter.pdf" }
],
"turns": [
{
"query": "What is the notice period in my offer letter?",
"answer": "The notice period is 30 days.",
"recommendations": ["What is the joining date?"],
"askedAt": "2025-07-19T09:14:22Z",
"feedback": "up",
"feedbackComment": null
}
]
}
Get Notifications
GET https://api.selfneuron.ai/notifications
This API returns the notification feed for the account, covering quota warnings, file processing results and connector sync activity. Paging is by cursor: pass the nextPageState from the previous response to fetch the following page, and omit it for the first.
Query Parameters
pageSize: how many notifications to return. pageState: the cursor returned as nextPageState by the previous call. unreadOnly: set true to return only unread notifications.Responses
200 with the feed. 500 if it could not be read.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/notifications?pageSize=20&unreadOnly=true' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"items": [
{
"id": "b83f...",
"category": "sync",
"type": "SYNC_COMPLETED",
"severity": "success",
"title": "Google Drive sync finished",
"message": "12 files were added.",
"source": "google_drive",
"itemsCount": 12,
"actionKey": null,
"read": false,
"createdEpoch": 1752916462000,
"createdFormatted": "2025-07-19T09:14:22Z"
}
],
"unreadCount": 4,
"nextPageState": "eyJwYWdlIjoyfQ"
}
Get Unread Count
GET https://api.selfneuron.ai/notifications/unread-count
This API returns just the number of unread notifications. It is the cheap call to poll for the badge on the bell icon, rather than fetching the whole feed.
Responses
200 with the count. 500 if it could not be read.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/notifications/unread-count' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"message": "Unread count",
"data": 4
}
Mark Notification Read
PUT https://api.selfneuron.ai/notifications/read
This API marks one notification as read. Both the id and the createdEpoch from that notification are required, because the two together identify the row.
Request Body
id: the notification identifier. createdEpoch: the createdEpoch value from the same notification, in milliseconds.Responses
200 when it was marked read. 400 when id or createdEpoch is missing. 404 when no such notification exists. 500 on failure.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request PUT 'https://api.selfneuron.ai/notifications/read' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY' --header 'Content-Type: application/json' --data '{
"id": "<uuid>",
"createdEpoch": 1752916462000
}'
Response
Copy Code Block
{
"message": "Notification marked as read"
}
Mark All Notifications Read
PUT https://api.selfneuron.ai/notifications/read-all
This API marks every unread notification on the account as read in one call. It takes no body.
Responses
200 when they were marked read. 500 if the update could not be completed.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request PUT 'https://api.selfneuron.ai/notifications/read-all' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"message": "All notifications marked as read"
}
Get Notification Preferences
GET https://api.selfneuron.ai/notifications/preferences
This API returns the notification settings for the account: whether everything is muted, which delivery channels are enabled, and per event type which channels it goes to along with any threshold or frequency it supports. It is the shape the settings screen renders directly.
Responses
200 with the preferences. 500 if they could not be read.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/notifications/preferences' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"muteAll": false,
"mutedUntilEpoch": null,
"mutedUntilFormatted": null,
"channels": [
{ "key": "email", "label": "Email", "enabled": true, "available": true,
"requiresAddress": true, "address": "you@example.com", "verified": true }
],
"sections": [
{
"key": "quota",
"label": "Usage and limits",
"description": "Warnings before you run out of searches or storage.",
"items": [
{ "type": "QUOTA_NEARLY_SPENT", "label": "Almost out of searches",
"severity": "warning", "channels": ["email"], "locked": false,
"recommended": true, "supportsThreshold": true, "threshold": 80,
"thresholdOptions": [50, 80, 90], "supportsFrequency": false }
]
}
]
}
Update Notification Preferences
PUT https://api.selfneuron.ai/notifications/preferences
This API updates the notification settings. Every field is optional and anything left out is unchanged, so a call can flip a single switch without sending the whole object back. The refreshed preferences are returned.
Request Body
muteAll: mute or unmute everything. channelsEnabled: a map of channel key to enabled. preferences: a map of event type to the list of channels it should go to, where an empty list turns that event off. thresholds: a map of event type to its threshold. frequencies: a map of event type to its frequency. channelAddresses: a map of channel key to the address to deliver to.Related
POST /notifications/preferences/reset restores the defaults, and POST /notifications/pause with a hours value mutes everything for that long. Both return the same preferences object.Responses
200 with the refreshed preferences. 400 when the body is missing or a value is rejected. 500 on failure.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request PUT 'https://api.selfneuron.ai/notifications/preferences' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY' --header 'Content-Type: application/json' --data '{
"muteAll": false,
"channelsEnabled": { "email": true },
"preferences": { "QUOTA_NEARLY_SPENT": ["email"] },
"thresholds": { "QUOTA_NEARLY_SPENT": 90 }
}'
Response
Copy Code Block
{
"muteAll": false,
"mutedUntilEpoch": null,
"channels": [
{ "key": "email", "label": "Email", "enabled": true, "available": true,
"requiresAddress": true, "address": "you@example.com", "verified": true }
],
"sections": []
}
Get Sync History
GET https://api.selfneuron.ai/sync-history
This API returns the twenty most recent connector syncs for the account, showing which source ran, whether it was automatic or manual, when it ran and how many items came across. GET /sync-history/notifications returns the same shape filtered to unread entries only.
Responses
200 with the list. 500 if it could not be read.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/sync-history' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
[
{
"id": "b83f...",
"userId": "3f2a...",
"source": "google_drive",
"syncType": "auto",
"syncTimeEpoch": 1752916462000,
"syncTimeFormatted": "2025-07-19T09:14:22Z",
"itemsSynced": 12,
"message": "Google Drive sync finished"
}
]
Mark Sync Entry Read
PUT https://api.selfneuron.ai/sync-history/read
This API marks one sync history entry as read. The id and the syncTimeEpoch from that entry are both required.
Request Body
id: the entry identifier. syncTimeEpoch: the syncTimeEpoch value from the same entry, in milliseconds.Responses
200 when it was marked read. 400 when id or syncTimeEpoch is missing. 500 on failure.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request PUT 'https://api.selfneuron.ai/sync-history/read' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY' --header 'Content-Type: application/json' --data '{
"id": "<uuid>",
"syncTimeEpoch": 1752916462000
}'
Response
Copy Code Block
{
"message": "Notification marked as read"
}
Mark All Sync Entries Read
PUT https://api.selfneuron.ai/sync-history/read-all
This API marks every unread sync history entry as read. It takes no body.
Responses
200 when they were marked read. 500 if the update could not be completed.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request PUT 'https://api.selfneuron.ai/sync-history/read-all' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"message": "All notifications marked as read"
}
Get Trash
GET https://api.selfneuron.ai/trash
This API returns what is currently in the trash: files that were removed but not yet purged, and conversations that were deleted. Both lists come back every time, empty when there is nothing in them.
Responses
200 with the contents. 400 for an invalid request, 500 on failure.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request GET 'https://api.selfneuron.ai/trash' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"files": [
{
"artifactId": "7c9e...",
"fileName": "Quarterly-Report.pdf",
"fileType": "application/pdf",
"fileSize": 248311,
"filePathS3": "user/quarterly-report.pdf",
"source": "upload",
"deletedAt": "2025-07-19T09:14:22Z"
}
],
"conversations": [
{ "id": "0f1c2d3e-...", "title": "Notice period in offer letter",
"deletedAt": "2025-07-18T16:02:10Z" }
]
}
Move File to Trash
POST https://api.selfneuron.ai/trash/files/:artifactId
This API moves a file to the trash. The file stops appearing in listings and stops being searched, but it is not removed and can be restored. Deleting it for good is a separate call.
Path Parameter
artifactId: the unique identifier of the file.Responses
200 on success. 404 when no such file exists. 400 for an invalid identifier, 500 on failure.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request POST 'https://api.selfneuron.ai/trash/files/<uuid>' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"success": true
}
Restore File
POST https://api.selfneuron.ai/trash/files/:artifactId/restore
This API takes a file back out of the trash and returns it to the account, where it is listed and searched again.
Path Parameter
artifactId: the unique identifier of the file.Responses
200 on success. 404 when the file is not in the trash. 400 for an invalid identifier, 500 on failure.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request POST 'https://api.selfneuron.ai/trash/files/<uuid>/restore' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"success": true
}
Delete File Permanently
DELETE https://api.selfneuron.ai/trash/files/:artifactId
This API purges a file from the trash for good, along with its stored content and its search index entries. It cannot be undone, and the storage it was using is freed.
Path Parameter
artifactId: the unique identifier of the file.Responses
200 on success. 404 when the file is not in the trash. 400 for an invalid identifier, 500 on failure.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request DELETE 'https://api.selfneuron.ai/trash/files/<uuid>' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"success": true
}
Conversation Trash
POST https://api.selfneuron.ai/trash/conversations/:sessionId
Conversations follow the same three steps as files. POST /trash/conversations/:sessionId moves one to the trash, POST /trash/conversations/:sessionId/restore brings it back, and DELETE /trash/conversations/:sessionId removes it for good. Each returns the same body.
Path Parameter
sessionId: the identifier of the conversation, the same id returned by the conversations endpoints.Responses
200 on success. 400 for an invalid request, 500 on failure.Authentication
Requires SELFNEURON-API-KEY in headers.Request
Copy Code Block
curl --location --request POST 'https://api.selfneuron.ai/trash/conversations/<uuid>' --header 'SELFNEURON-API-KEY: $SELFNEURON_API_KEY'
Response
Copy Code Block
{
"success": true
}