Skip to main content

Hana API

For a quick index of endpoints, see the Hana API Overview.

Sample data notice

IDs in this document are illustrative placeholders. Real API responses return stable IDs for your organization data.

Authorization

info

Use this header to authorize requests to the Hana API.

Auth Type

You need to pass this API key in the header of your requests.

  • API Key
    • Key: X-API-KEY
    • Value: HANA-<YOUR_API_KEY>
Runtime auth and billing checks
  • 401 Unauthorized: invalid API key, missing OAuth consent, or expired/incomplete OAuth scopes for the key owner.
  • 402 Payment Required: seat/billing mismatch or monthly interaction limit reached for the plan.

How to Get Your API Key

  1. Go to the Connectors Page

  2. Find & Connect to the Hana API

    • Look for the "Hana API" connector.
    • Click on "Connect" to generate your API key.
  3. Copy & Save Your API Key

    • The API key will be displayed only once.
    • Make sure to copy and save it securely for future use.
note
  • If you disconnect the Hana API connector, the current API key becomes invalid.
  • To continue using the API, reconnect and generate a new key.

API Key Validation

info

Test the connection and validity of the API key.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/test

cURL Example

curl -X GET https://hana-api.hanabitech.com/v1/expose-api/test -H "X-API-KEY: HANA-<YOUR_API_KEY>"

Success Response

{
"success": true,
"content": {
"email": "john.doe@example.com",
"role": "ADMIN",
"displayName": "John Doe",
"timestamp": "2025-03-09T11:48:40.713Z"
}
}

Chat Completion

info

Generate a completion request from a message history. Hana may use available web context and organization memory depending on request scope and permissions.

Request Type

POST

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/chat/completion

Payload

messages: Array of message - required

  • In the payload, the messages array must contain at least one message. Each message object in the array should have the following properties:

Properties of a message

  • role: 'user' | 'assistant' - required

    • Specifies the sender's role.
      • user - represents a person interacting with the assistant.
      • assistant - represents a non-human entity such as an AI model or a platform such as Notion etc.
  • content: string - required

    • Message content can be:
      • plain text string, or
      • multimodal array entries like text/image items:
        • { "type": "text", "text": "..." }
        • { "type": "image_url", "image_url": { "url": "https://..." } }
  • name: string - required

    • A unique identifier for the sender. Allowed characters are letters, numbers, and hyphens (^[a-zA-Z0-9-]+$).
  • includeWebSources: boolean - optional

    • Set true to allow web-source inclusion in completion flow.
  • includeMetadata: boolean - optional

    • Set true to include metadata in completion flow.
{
"includeWebSources": true,
"includeMetadata": false,
"messages": [
{
"role": "user",
"content": "I’m planning to refresh my wardrobe for spring. Any recommendations for must-have items?",
"name": "alex-jones"
},
{
"role": "user",
"content": "Same here! I’d love some inspiration for colors and styles that feel trendy this season.",
"name": "clark"
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Use this image as style inspiration."
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/reference.jpg"
}
}
],
"name": "assistant-bot"
}
]
}

cURL Example

curl -X POST "https://hana-api.hanabitech.com/v1/expose-api/chat/completion" \
-H "Content-Type: application/json" \
-H "X-API-KEY: HANA-<YOUR_API_KEY>" \
-d '{
"includeWebSources": true,
"includeMetadata": false,
"messages": [
{"role":"user","content":"Summarize today team updates","name":"alex-jones"}
]
}'

Response

warning

This endpoint only creates the completion request. Retrieve the final output from the Chat Completion Status endpoint.

{
"success": true,
"content": {
"userId": "USER_ID",
"organizationId": "ORG_ID",
"messageId": "client-hana-<UUID>",
"completionStartTime": "2025-03-09T12:12:03.388Z",
"completionFinishTime": null,
"completionResponse": null,
"completionStatus": "IN_PROGRESS",
"_id": "COMPLETION_ID",
"__v": 0,
"createdAt": "2025-03-09T12:12:03.389Z",
"updatedAt": "2025-03-09T12:12:03.389Z"
}
}

Chat Completion Status

info

Use this endpoint to check completion request status. completionStatus can be IN_PROGRESS, COMPLETED, or ERROR. When status is COMPLETED, the output is available in completionResponse; otherwise completionResponse is null.

Status retention

Completion status records are automatically deleted after 3 hours.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/chat/statuses?messageId={{CHAT_COMPLETION_MESSAGE_ID}}&page={{PAGE_NUMBER}}&per_page={{PAGE_NUMBER_LIMIT}}

Request Params

  • messageId: string - optional

    • Provide the messageId from Chat Completion to filter for one request; omit it to list recent status records for the API key owner.
  • per_page: number - optional

    • The number of records to fetch per page
    • Defaults to 10
  • page: number - optional

    • The page number starting from 1
    • Defaults to 1

cURL Example

curl -G "https://hana-api.hanabitech.com/v1/expose-api/chat/statuses" -H "Content-Type: application/json" -H "X-API-KEY: HANA-<YOUR_API_KEY>" --data-urlencode "page=1" --data-urlencode "per_page=1" --data-urlencode "messageId=client-hana-03b495e3-4ba1-457e-9065-749545b6f33e"

Response

tip

In automations, treat a request as successful only when completionStatus is COMPLETED and completionResponse is non-null.

Completion in Progress

{
"success": true,
"content": {
"data": [
{
"_id": "STATUS_ID_IN_PROGRESS",
"userId": "USER_ID",
"organizationId": "ORG_ID",
"messageId": "client-hana-03b495e3-4ba1-457e-9065-749545b6f33e",
"completionStartTime": "2025-03-09T17:22:06.638Z",
"completionFinishTime": null,
"completionResponse": null,
"completionStatus": "IN_PROGRESS",
"__v": 0,
"createdAt": "2025-03-09T17:22:06.639Z",
"updatedAt": "2025-03-09T17:22:06.639Z"
}
],
"totalCount": 1
}
}

Completion Completed

{
"success": true,
"content": {
"data": [
{
"_id": "STATUS_ID_COMPLETED",
"userId": "USER_ID",
"organizationId": "ORG_ID",
"messageId": "client-hana-03b495e3-4ba1-457e-9065-749545b6f33e",
"completionStartTime": "2025-03-09T17:22:06.638Z",
"completionFinishTime": "2025-03-09T17:22:36.867Z",
"completionResponse": "To align your wardrobe with Hanabi’s theme and the colors typically associated with spring, consider the following suggestions:\n\n1. *Hanabi Theme*: Hanabi, meaning \"fireworks\" in Japanese, inspires vibrant and dynamic imagery. Opt for bold, colorful outfits with patterns reminiscent of fireworks, such as bright floral prints or geometric designs.\n\n2. *Spring Colors*: Spring is often associated with pastel shades, bright whites, and soft greens. Incorporate these colors through accessories like scarves, hats, or shoes in pastel hues, or choose clothing items like light green dresses or white tops with floral patterns.\n\n3. *Combining Themes*: For a look that combines both themes, consider a pastel-colored dress with fireworks-inspired accessories, such as a bold, colorful scarf or statement jewelry that reflects the dynamic colors of fireworks. Alternatively, a white or light-colored outfit with vibrant floral patterns can capture the essence of spring while nodding to the celebratory aspect of Hanabi.\n\nThese suggestions blend the vibrant and celebratory nature of Hanabi with the freshness of spring, creating a unique and stylish wardrobe update.",
"completionStatus": "COMPLETED",
"__v": 0,
"createdAt": "2025-03-09T17:22:06.639Z",
"updatedAt": "2025-03-09T17:22:36.867Z"
}
],
"totalCount": 1
}
}

Completion Error

{
"success": true,
"content": {
"data": [
{
"_id": "STATUS_ID_ERROR",
"userId": "USER_ID",
"organizationId": "ORG_ID",
"messageId": "client-hana-03b495e3-4ba1-457e-9065-749545b6f33e",
"completionStartTime": "2025-03-09T17:22:06.638Z",
"completionFinishTime": "2025-03-09T17:22:36.867Z",
"completionResponse": null,
"completionStatus": "ERROR",
"__v": 0,
"createdAt": "2025-03-09T17:22:06.639Z",
"updatedAt": "2025-03-09T17:22:06.639Z"
}
],
"totalCount": 1
}
}

Report Message Creation

info

Create a message in a report group. This endpoint is commonly used in automation pipelines where external systems publish structured updates to Hana for downstream Q&A and summaries.

Example follow-up prompts in Google Chat: @Hana what is the sprint status today in notion_tech_updates? @Hana what was completed this week in notion_tech_updates?

Request Type

POST

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/report-groups/report-messages
note

Payload

In the payload, the object must contain all required properties. Each property should be structured as follows:

  • reportGroupName: string - required
    • The name of the report group where this message should be added.
    • Always small letters with hyphens and no spaces.
  • sourcePlatform: string - required
    • The platform where the reported message originated from (e.g., "Website" , "Slack", "Google Chat", "Microsoft Teams").
  • messageTitle: string - required
    • A short summary or title for the report message.
  • messageString: string - required
    • The actual message content that is being reported.
{
"reportGroupName": "web-development-project",
"messageString": "The new dashboard UI is much better, but the loading time is still slow when switching between reports.",
"messageTitle": "UI Improvement Feedback",
"sourcePlatform": "Slack"
}

cURL Example

curl -X POST "https://hana-api.hanabitech.com/v1/expose-api/report-groups/report-messages" -H "Content-Type: application/json" -H "X-API-KEY: HANA-<YOUR_API_KEY>" -d "{\"reportGroupName\":\"web-development-project\",\"messageString\":\"The new dashboard UI is much better, but the loading time is still slow when switching between reports.\",\"messageTitle\":\"UI Improvement Feedback\",\"sourcePlatform\":\"Slack\"}"

Response

{
"success": true,
"content": {
"reportGroupName": "web-development-project",
"messageString": "The new dashboard UI is much better, but the loading time is still slow when switching between reports.",
"messageTitle": "UI Improvement Feedback",
"sourcePlatform": "SLACK"
}
}

Create Google Chat Message

info

Create a Google Chat message through Hana. This is commonly used in automation flows to publish updates into team spaces. Google Chat formatting rules apply: Formatting Rules.

Request Type

POST

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/chat/create-google-chat-message
Ensure Hana is in the target space

Before sending a message, verify Hana is added to the target Google Chat space.

Payload

In the payload, the object must contain all required properties. Each property should be structured as follows:

  • message: string - required
    • The actual text content of the message being sent.
  • spaceName: string - required
    • The unique identifier of the chat space or conversation where the message should be delivered.
    • Always of the format - spaces/AAAAR9-3Sxs
{
"message": "📢 **Sales Update:** Great news! We closed 5 major deals this week, bringing in a total revenue of $250,000. 🚀 Kudos to the sales team for their hard work! Let’s keep up the momentum and push for an even stronger quarter. 💪",
"spaceName": "spaces/AAAA1234xyz"
}

How to Get the spaceName

From Google Chat URL

  • Open the desired chat space in your browser.

  • Look at the URL bar, example:

    • https://mail.google.com/chat/#chat/space/AAAA1234xyz
    • The part after /space/ (example: AAAA1234xyz) is the spaceId.
    • Format the spaceName:
      • Prefix thespaceId with spaces/ to create the spaceName.
      • Example: If thespaceId is AAAA1234xyz, then the spaceName will be {"spaceName": "spaces/AAAA1234xyz"}

cURL Example

curl -X POST "https://hana-api.hanabitech.com/v1/expose-api/chat/create-google-chat-message" -H "Content-Type: application/json" -H "X-API-KEY: HANA-<YOUR_API_KEY>" -d "{\"message\":\"📢 **Sales Update:** Great news! We closed 5 major deals this week, bringing in a total revenue of $250,000. 🚀 Kudos to the sales team for their hard work! Let’s keep up the momentum and push for an even stronger quarter. 💪\",\"spaceName\":\"spaces/AAAA1234xyz\"}"

Response

{
"success": true,
"content": "📢 **Sales Update:** Great news! We closed 5 major deals this week, bringing in a total revenue of $250,000. 🚀 Kudos to the sales team for their hard work! Let’s keep up the momentum and push for an even stronger quarter. 💪"
}

Get Report Groups

info

List report groups available to the authenticated organization.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/report-groups?page={{PAGE_NUMBER}}&per_page={{PAGE_NUMBER_LIMIT}}&search={{SEARCH_QUERY}}

Request Params

  • search: string - optional

    • Filters the result for a particular search string
  • per_page: number - optional

    • The number of records to fetch per page
    • Defaults to 10
  • page: number - optional

    • The page number starting from 1
    • Defaults to 1

cURL Example

curl -G "https://hana-api.hanabitech.com/v1/expose-api/report-groups" -H "Content-Type: application/json" -H "X-API-KEY: HANA-<YOUR_API_KEY>" --data-urlencode "per_page=10" --data-urlencode "page=1" --data-urlencode "search=daily"

Response

{
"success": true,
"content": {
"data": [
{
"_id": "REPORT_GROUP_ID",
"title": "daily_standup",
"createdBy": {
"_id": "USER_ID",
"userID": "users/USER_ID",
"email": "user@example.com",
"displayName": "Nav Aggarwal",
"organizationId": "ORG_ID",
"createdAt": "2024-02-14T07:40:12.108Z",
"updatedAt": "2025-03-09T17:28:44.306Z",
"__v": 0,
"profilePicture": "https://example.com/user.jpg",
"updatedBy": "UPDATER_ID",
"designation": "Chief Executive Officer"
},
"organizationId": "ORG_ID",
"createdAt": "2024-01-25T13:10:16.277Z",
"updatedAt": "2024-07-18T02:40:05.679Z",
"reportMessagesCount": 42,
"score": 0.9611515998840332
}
],
"totalCount": 1,
"llmDigestableOutput": "REPORT GROUP TITLE: daily_standup\nREPORT GROUP CREATED BY NAME: Nav Aggarwal\nREPORT GROUP CREATED BY EMAIL: nav.archer@hanabitech.com\nREPORT GROUP CREATED BY GOOGLE USER ID: users/USER_ID"
}
}

Get Report Group Messages

info

List messages from a specific report group.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/report-groups/{{REPORT_GROUP_ID}}/report-messages?page={{PAGE_NUMBER}}&per_page={{PAGE_NUMBER_LIMIT}}&search={{SEARCH_QUERY}}&startTimestamp={{START_TIME_STAMP}}&endTimestamp={{END_TIME_STAMP}}
  • Here REPORT_GROUP_ID is the _id of the report groups for which the messages must be fetched

Request Params

  • search: string - optional

    • Filters the result for a particular search string
  • per_page: number - optional

    • The number of records to fetch per page
    • Defaults to 10
  • page: number - optional

    • The page number starting from 1
    • Defaults to 1
  • startTimestamp: string - optional

    • The start timestamp from which the messages must be fetched (inclusive)
    • Example - 2025-02-16T01:42:07.213Z
  • endTimestamp: string - optional

    • The end timestamp till which the messages must be fetched (inclusive)
    • Example - 2025-02-17T01:00:07.213Z

cURL Example


curl -G "https://hana-api.hanabitech.com/v1/expose-api/report-groups/{{REPORT_GROUP_ID}}/report-messages" -H "Content-Type: application/json" -H "X-API-KEY: HANA-<YOUR_API_KEY>" --data-urlencode "per_page=10" --data-urlencode "page=1" --data-urlencode "search=Notion" --data-urlencode "startTimestamp=2024-01-14T07:40:12.108Z" --data-urlencode "endTimestamp=2024-03-14T07:40:12.108Z"

Response

{
"success": true,
"content": {
"data": [
{
"_id": "REPORT_MESSAGE_ID_1",
"reportGroupId": "REPORT_GROUP_ID",
"title": "Sprint Ops Update",
"description": "Completed onboarding docs refresh, fixed ingestion retry handling, and validated Zapier report delivery for production workflows.",
"createdBy": {
"_id": "USER_ID",
"userID": "users/USER_ID",
"email": "user@example.com",
"displayName": "Nav Aggarwal",
"organizationId": "ORG_ID",
"createdAt": "2024-02-14T07:40:12.108Z",
"updatedAt": "2025-03-09T18:28:32.988Z",
"__v": 0,
"profilePicture": "https://example.com/user.jpg",
"updatedBy": "UPDATER_ID",
"designation": "Chief Executive Officer"
},
"createdPlatformSource": "NOTION",
"organizationId": "ORG_ID",
"reportMessagesCount": 185,
"createdAt": "2025-03-05T12:43:19.377Z",
"updatedAt": "2025-03-05T12:43:19.377Z",
"score": 1.3040423393249512
},
{
"_id": "REPORT_MESSAGE_ID_2",
"reportGroupId": "REPORT_GROUP_ID",
"title": "Platform Reliability Follow-up",
"description": "Investigated dashboard date-range filtering behavior, opened follow-up tasks for query optimization, and documented mitigation steps for support triage.",
"createdBy": {
"_id": "USER_ID",
"userID": "users/USER_ID",
"email": "user@example.com",
"displayName": "Santhosh Kumar",
"organizationId": "ORG_ID",
"createdAt": "2024-02-01T10:56:51.966Z",
"updatedAt": "2025-03-09T18:35:19.535Z",
"__v": 0,
"profilePicture": "https://example.com/user.jpg",
"updatedBy": "UPDATER_ID",
"designation": "Full Stack Developer"
},
"createdPlatformSource": "SLACK",
"organizationId": "ORG_ID",
"reportMessagesCount": 185,
"createdAt": "2025-03-04T14:03:55.977Z",
"updatedAt": "2025-03-04T14:03:55.977Z",
"score": 1.6430115699768066
}
],
"totalCount": 2,
"llmDigestableOutput": "REPORT GROUP MESSAGE TITLE: Sprint Ops Update\nREPORT GROUP MESSAGE DESCRIPTION: Completed onboarding docs refresh, fixed ingestion retry handling, and validated Zapier report delivery for production workflows.\nREPORT GROUP MESSAGE PLATFORM SOURCE: NA\nREPORT GROUP MESSAGE CREATED DATE: Wed Mar 05 2025 12:43:19 GMT+0000 (Coordinated Universal Time)\nREPORT GROUP MESSAGE CREATED BY NAME: Nav Aggarwal\nREPORT GROUP MESSAGE CREATED BY EMAIL: nav.archer@hanabitech.com\nREPORT GROUP MESSAGE CREATED BY GOOGLE USER ID: users/USER_ID\n\nREPORT GROUP MESSAGE TITLE: Platform Reliability Follow-up\nREPORT GROUP MESSAGE DESCRIPTION: Investigated dashboard date-range filtering behavior, opened follow-up tasks for query optimization, and documented mitigation steps for support triage."
}
}

Get Spaces Hana is Integrated In

info

List Google Chat spaces where Hana is currently integrated.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/spaces?page={{PAGE_NUMBER}}&per_page={{PAGE_NUMBER_LIMIT}}&search={{SEARCH_QUERY}}

Request Params

  • search: string - optional

    • Filters the result for a particular search string
  • per_page: number - optional

    • The number of records to fetch per page
    • Defaults to 10
  • page: number - optional

    • The page number starting from 1
    • Defaults to 1

cURL Example

curl -G "https://hana-api.hanabitech.com/v1/expose-api/spaces" -H "Content-Type: application/json" -H "X-API-KEY: HANA-<YOUR_API_KEY>" --data-urlencode "per_page=10" --data-urlencode "page=1" --data-urlencode "search=test"

Response

{
"success": true,
"content": {
"data": [
{
"_id": "SPACE_RECORD_ID_1",
"spaceId": "spaces/SPACE_ID",
"orgId": "ORG_ID",
"displayName": "test",
"spaceType": "GROUP_CHAT",
"description": null,
"spaceCreatedAt": "2024-11-27T06:00:37.312Z",
"isActive": true,
"hanaStatus": "ADDED",
"isAutoInitiationEnabled": false,
"isAutoMemoryIngestionEnabled": false,
"createdAt": "2024-11-27T06:02:45.124Z",
"updatedAt": "2024-11-27T06:02:45.124Z",
"score": 1.8675340414047241
},
{
"_id": "SPACE_RECORD_ID_2",
"spaceId": "spaces/SPACE_ID",
"orgId": "ORG_ID",
"displayName": "test",
"spaceType": "GROUP_CHAT",
"description": null,
"spaceCreatedAt": "2024-04-17T17:17:56.113Z",
"isActive": true,
"hanaStatus": "ADDED",
"isAutoInitiationEnabled": false,
"isAutoMemoryIngestionEnabled": false,
"createdAt": "2024-04-17T17:18:46.442Z",
"updatedAt": "2024-04-17T17:18:46.442Z",
"score": 1.8675340414047241
},
{
"_id": "SPACE_RECORD_ID_3",
"spaceId": "spaces/SPACE_ID",
"orgId": "ORG_ID",
"displayName": "Temp Test",
"spaceType": "GROUP_CHAT",
"description": null,
"spaceCreatedAt": "2025-02-23T21:32:28.036Z",
"isActive": true,
"isAutoInitiationEnabled": false,
"isAutoMemoryIngestionEnabled": false,
"createdAt": "2025-02-23T21:34:15.266Z",
"updatedAt": "2025-03-06T10:36:19.023Z",
"score": 1.5343365669250488
},
{
"_id": "SPACE_RECORD_ID_4",
"spaceId": "spaces/SPACE_ID",
"orgId": "ORG_ID",
"displayName": "[TEMP]: Test Space",
"spaceType": "GROUP_CHAT",
"description": null,
"spaceCreatedAt": "2024-09-08T06:33:26.300Z",
"isActive": true,
"hanaStatus": "ADDED",
"isAutoInitiationEnabled": false,
"isAutoMemoryIngestionEnabled": false,
"createdAt": "2024-11-13T17:18:26.793Z",
"updatedAt": "2025-02-22T18:43:58.778Z",
"score": 1.3020334243774414
},
{
"_id": "SPACE_RECORD_ID_5",
"spaceId": "spaces/SPACE_ID",
"orgId": "ORG_ID",
"displayName": "[TEST] Hana testing",
"spaceType": "GROUP_CHAT",
"description": "Everything about the testing of Hana bot",
"spaceCreatedAt": "2024-03-26T09:20:30.047Z",
"isActive": true,
"hanaStatus": "ADDED",
"createdAt": "2024-07-30T11:56:19.852Z",
"updatedAt": "2025-01-23T08:22:19.423Z",
"isAutoInitiationEnabled": false,
"isAutoMemoryIngestionEnabled": false,
"score": 1.3020334243774414
},
{
"_id": "SPACE_RECORD_ID_6",
"spaceId": "spaces/SPACE_ID",
"orgId": "ORG_ID",
"displayName": "Hana Test Group",
"spaceType": "GROUP_CHAT",
"description": null,
"spaceCreatedAt": "2024-01-16T19:46:41.882Z",
"isActive": true,
"hanaStatus": "ADDED",
"isAutoInitiationEnabled": false,
"isAutoMemoryIngestionEnabled": false,
"createdAt": "2024-02-14T11:02:46.045Z",
"updatedAt": "2024-02-14T11:02:46.045Z",
"score": 1.3020334243774414
}
],
"totalCount": 6,
"llmDigestableOutput": "SPACE NAME: test\nSPACE DESCRIPTION: NA\nSPACE GOOGLE CHAT ID: spaces/AAAAA6QArts\nSPACE GOOGLE CHAT TYPE: GROUP_CHAT\nSPACE CREATED DATE IN GOOGLE CHAT: Wed Nov 27 2024 06:00:37 GMT+0000 (Coordinated Universal Time)\nSPACE ACTIVE STATUS: true\nCAN Hana AUTO INITIATE MESSAGES in SPACE: false\nCAN Hana AUTO DIGEST MEMORIES in SPACE: false\n\nSPACE NAME: test\nSPACE DESCRIPTION: NA\nSPACE GOOGLE CHAT ID: spaces/AAAAUk0RiiU\nSPACE GOOGLE CHAT TYPE: GROUP_CHAT\nSPACE CREATED DATE IN GOOGLE CHAT: Wed Apr 17 2024 17:17:56 GMT+0000 (Coordinated Universal Time)\nSPACE ACTIVE STATUS: true\nCAN Hana AUTO INITIATE MESSAGES in SPACE: false\nCAN Hana AUTO DIGEST MEMORIES in SPACE: false\n\nSPACE NAME: Temp Test\nSPACE DESCRIPTION: NA\nSPACE GOOGLE CHAT ID: spaces/AAAAsQJOWhA\nSPACE GOOGLE CHAT TYPE: GROUP_CHAT\nSPACE CREATED DATE IN GOOGLE CHAT: Sun Feb 23 2025 21:32:28 GMT+0000 (Coordinated Universal Time)\nSPACE ACTIVE STATUS: true\nCAN Hana AUTO INITIATE MESSAGES in SPACE: false\nCAN Hana AUTO DIGEST MEMORIES in SPACE: false\n\nSPACE NAME: [TEMP]: Test Space\nSPACE DESCRIPTION: NA\nSPACE GOOGLE CHAT ID: spaces/AAAAomn9p20\nSPACE GOOGLE CHAT TYPE: GROUP_CHAT\nSPACE CREATED DATE IN GOOGLE CHAT: Sun Sep 08 2024 06:33:26 GMT+0000 (Coordinated Universal Time)\nSPACE ACTIVE STATUS: true\nCAN Hana AUTO INITIATE MESSAGES in SPACE: false\nCAN Hana AUTO DIGEST MEMORIES in SPACE: false\n\nSPACE NAME: [TEST] Hana testing\nSPACE DESCRIPTION: Everything about the testing of Hana bot\nSPACE GOOGLE CHAT ID: spaces/AAAAyvKje9s\nSPACE GOOGLE CHAT TYPE: GROUP_CHAT\nSPACE CREATED DATE IN GOOGLE CHAT: Tue Mar 26 2024 09:20:30 GMT+0000 (Coordinated Universal Time)\nSPACE ACTIVE STATUS: true\nCAN Hana AUTO INITIATE MESSAGES in SPACE: false\nCAN Hana AUTO DIGEST MEMORIES in SPACE: false\n\nSPACE NAME: Hana Test Group\nSPACE DESCRIPTION: NA\nSPACE GOOGLE CHAT ID: spaces/AAAAzu2E6Rg\nSPACE GOOGLE CHAT TYPE: GROUP_CHAT\nSPACE CREATED DATE IN GOOGLE CHAT: Tue Jan 16 2024 19:46:41 GMT+0000 (Coordinated Universal Time)\nSPACE ACTIVE STATUS: true\nCAN Hana AUTO INITIATE MESSAGES in SPACE: false\nCAN Hana AUTO DIGEST MEMORIES in SPACE: false"
}
}

Get Users

info

Retrieve a paginated list of users, optionally filtered by a search query on email or display name.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/users?page={{PAGE_NUMBER}}&per_page={{PAGE_NUMBER_LIMIT}}&search={{SEARCH_QUERY}}

Request Params

  • search: string - optional

    • Filters the result for a particular search string against email and displayName.
  • per_page: number - optional

    • The number of records to fetch per page
    • Defaults to 10
  • page: number - optional

    • The page number starting from 1
    • Defaults to 1

cURL Example

curl -G "https://hana-api.hanabitech.com/v1/expose-api/users" -H "Content-Type: application/json" -H "X-API-KEY: HANA-<YOUR_API_KEY>" --data-urlencode "page=1" --data-urlencode "per_page=10"

Response

A successful response returns HTTP 200 OK with this JSON structure:

{
"success": true,
"content": {
"data": [
{
"_id": "USER_DOC_ID",
"userID": "users/USER_ID",
"email": "user@example.com",
"displayName": "Sagar Kapoor",
"role": "USER",
"designation": null,
"isActive": true,
"organizationId": "67f4d7483fd123456789",
"profilePicture": "https://example.com/user.jpg",
"createdAt": "2025-04-10T13:32:56.847Z",
"updatedAt": "2025-04-10T13:32:56.847Z",
"updatedBy": "UPDATER_ID",
"__v": 0
},
{
"_id": "USER_DOC_ID_2",
"userID": "users/USER_ID",
"email": "user@example.com",
"displayName": "Santhosh Kumar",
"role": "ADMIN",
"designation": "Full Stack Developer",
"isActive": true,
"organizationId": "67f4d7483fd012356",
"profilePicture": "https://example.com/user.jpg",
"createdAt": "2025-04-08T07:59:05.601Z",
"updatedAt": "2025-05-13T16:25:01.365Z",
"updatedBy": "UPDATER_ID",
"__v": 0
}
],
"totalCount": 2
}
}

Create Memory

info

Create a new text memory batch.

  • memoryType must be TEXT_MEMORY.
  • isGlobal: true is restricted (global memory CUD is role-gated).
  • For non-global memory creation, organization roles such as ADMIN and DOMAIN_OWNER are permitted.

Request Type

POST

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/memory

Payload

  • memoryType – must be "TEXT_MEMORY" (required)
  • text – memory text (required)
  • isGlobal – whether the memory should be global (optional, default false)
  • memoryLevelORG or JUST_MYSELF (optional, defaults to ORG if omitted/invalid)
  • useCaseInstructions – optional instruction string to improve retrieval targeting

cURL Example

curl -X POST "https://hana-api.hanabitech.com/v1/expose-api/memory" \
-H "Content-Type: application/json" \
-H "X-API-KEY: HANA-<YOUR_API_KEY>" \
-d '{"memoryType":"TEXT_MEMORY","text":"Initial planning","isGlobal":false,"memoryLevel":"ORG"}'

Response

{
"success": true,
"content": {
"batch": {
"_id": "MEMORY_BATCH_ID",
"title": "Initial planning",
"organizationId": "ORG_ID",
"type": "TEXT_MEMORY",
"memoryLevel": "ORG",
"isGlobal": false,
"ingestionStatus": "IN_PROGRESS",
"ingestionProgress": 0,
"createdBy": "USER_ID",
"updatedBy": "USER_ID",
"createdAt": "2025-03-10T00:00:00.000Z",
"updatedAt": "2025-03-10T00:00:00.000Z",
"__v": 0
},
"warning": "Similar memory may already exist.",
"similarBatchLinks": [
"https://hana-dashboard.hanabitech.com/memories?batchId=EXISTING_MEMORY_BATCH_ID"
]
}
}

Get Memory Batch

info

Retrieve a previously created memory batch using its batch ID.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/memory/{batchId}

cURL Example

curl -X GET "https://hana-api.hanabitech.com/v1/expose-api/memory/BATCH_ID" \
-H "X-API-KEY: HANA-<YOUR_API_KEY>"

Response

{
"success": true,
"content": {
"_id": "BATCH_ID",
"title": "Initial planning",
"organizationId": "ORG_ID",
"type": "TEXT_MEMORY",
"memoryLevel": "ORG",
"isGlobal": false,
"ingestionStatus": "INGESTED",
"ingestionProgress": 100,
"createdBy": "USER_ID",
"updatedBy": "USER_ID",
"createdAt": "2025-03-10T00:00:00.000Z",
"updatedAt": "2025-03-10T00:05:00.000Z",
"status": "ACTIVE",
"effectiveSheetTotalRowLimit": 5000,
"__v": 0
}
}

Delete Memory Batch

info

Delete a memory batch owned by the authenticated user.

Request Type

DELETE

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/memory/{batchId}

cURL Example

curl -X DELETE "https://hana-api.hanabitech.com/v1/expose-api/memory/BATCH_ID" \
-H "X-API-KEY: HANA-<YOUR_API_KEY>"

Response

{
"success": true,
"content": true
}

Get URL Content

info

Fetch readable text from a web page. Available only to organizations on the PRO plan.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/get-url-content?url={URL}

cURL Example

curl -G "https://hana-api.hanabitech.com/v1/expose-api/get-url-content" \
-H "X-API-KEY: HANA-<YOUR_API_KEY>" \
--data-urlencode "url=https://example.com/article"

Response

{
"success": true,
"content": "# Article Title\n\nArticle body in Markdown format"
}

Get Memory Batches

info

List memory batches for the authenticated organization with optional filters.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/memory/batches?page={{PAGE_NUMBER}}&per_page={{PAGE_NUMBER_LIMIT}}&batchType={{MEMORY_BATCH_TYPE}}&status={{MEMORY_STATUS}}&memoryLevel={{MEMORY_LEVEL}}&search={{SEARCH_QUERY}}

Request Params

  • page (optional): page number, defaults to 1
  • per_page (optional): page size, defaults to 10, max 100
  • batchType (optional): memory batch type (for example TEXT_MEMORY)
  • status (optional): STALE | ACTIVE | FRESH
  • memoryLevel (optional): ORG | JUST_MYSELF
  • search (optional): text search query

cURL Example

curl -G "https://hana-api.hanabitech.com/v1/expose-api/memory/batches" \
-H "X-API-KEY: HANA-<YOUR_API_KEY>" \
--data-urlencode "page=1" \
--data-urlencode "per_page=10" \
--data-urlencode "batchType=TEXT_MEMORY" \
--data-urlencode "status=ACTIVE" \
--data-urlencode "memoryLevel=ORG" \
--data-urlencode "search=planning"

Response

{
"success": true,
"content": {
"data": [
{
"_id": "MEMORY_BATCH_ID",
"type": "TEXT_MEMORY",
"title": "Initial planning",
"status": "ACTIVE",
"ingestionStatus": "INGESTED",
"ingestionProgress": 100,
"memoryLevel": "ORG",
"isGlobal": false,
"memoryChunksCount": 3,
"createdBy": {
"_id": "USER_ID",
"userID": "users/USER_ID",
"email": "user@example.com",
"displayName": "Alex Jones",
"organizationId": "ORG_ID",
"profilePicture": "https://example.com/user.jpg",
"createdAt": "2025-02-10T11:22:33.000Z",
"updatedAt": "2025-02-12T08:15:11.000Z",
"__v": 0
},
"updatedBy": {
"_id": "USER_ID",
"userID": "users/USER_ID",
"email": "user@example.com",
"displayName": "Alex Jones",
"organizationId": "ORG_ID",
"profilePicture": "https://example.com/user.jpg",
"createdAt": "2025-02-10T11:22:33.000Z",
"updatedAt": "2025-02-12T08:15:11.000Z",
"__v": 0
},
"createdAt": "2025-03-10T00:00:00.000Z",
"updatedAt": "2025-03-10T00:05:00.000Z"
}
],
"totalCount": 1
}
}

Create Task

info

Create a task in the authenticated organization.

Request Type

POST

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/tasks

Payload

  • title (optional but recommended)
  • description (optional)
  • status (optional): TODO | IN_PROGRESS | COMPLETED | CANCELED
  • priority (optional): LOW | MEDIUM | HIGH | CRITICAL
  • due (optional): ISO timestamp
  • assignees (optional): array of user Mongo IDs
  • tags (optional): array of tag Mongo IDs
  • sprintId (optional): sprint Mongo ID

cURL Example

curl -X POST "https://hana-api.hanabitech.com/v1/expose-api/tasks" \
-H "Content-Type: application/json" \
-H "X-API-KEY: HANA-<YOUR_API_KEY>" \
-d '{
"title": "Finalize dashboard QA checklist",
"status": "TODO",
"priority": "HIGH",
"due": "2026-02-28T18:30:00.000Z"
}'

Response

{
"success": true,
"content": {
"_id": "TASK_ID",
"title": "Finalize dashboard QA checklist",
"status": "TODO",
"priority": "HIGH",
"due": "2026-02-28T18:30:00.000Z",
"organizationId": "ORG_ID",
"createdBy": "USER_ID",
"updatedBy": "USER_ID",
"createdAt": "2026-02-19T12:11:10.000Z",
"updatedAt": "2026-02-19T12:11:10.000Z",
"__v": 0
}
}

Get User By ID

info

Retrieve one user by Mongo user ID.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/users/{userId}

cURL Example

curl -X GET "https://hana-api.hanabitech.com/v1/expose-api/users/USER_ID" \
-H "X-API-KEY: HANA-<YOUR_API_KEY>"

Response

{
"success": true,
"content": {
"_id": "USER_ID",
"userID": "users/12345678901234567890",
"email": "user@example.com",
"displayName": "Alex Jones",
"organizationId": "ORG_ID",
"role": "ADMIN",
"isActive": true,
"profilePicture": "https://example.com/user.jpg",
"createdAt": "2025-02-10T11:22:33.000Z",
"updatedAt": "2025-02-12T08:15:11.000Z",
"__v": 0
}
}

Get Organization

info

Retrieve the authenticated organization details associated with the API key.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/organization

cURL Example

curl -X GET "https://hana-api.hanabitech.com/v1/expose-api/organization" \
-H "X-API-KEY: HANA-<YOUR_API_KEY>"

Response

{
"success": true,
"content": {
"_id": "ORG_ID",
"displayName": "Acme Inc.",
"planId": {
"_id": "PLAN_ID",
"displayName": "PRO"
},
"purchasedSeats": 25,
"country": "United States",
"website": "https://acme.com",
"allowDm": true,
"allowThreadedSpaceInteraction": true,
"allowAutoMemoryIngestion": true,
"allowPrivateChat": true,
"allowInvocationHistory": true,
"allowAutoEngagement": false,
"allowResponseControlCard": true,
"allowResponseMetadata": true,
"knowledgeValidationMode": "UNRESTRICTED",
"preferredLanguage": "EN",
"createdAt": "2025-02-01T10:00:00.000Z",
"updatedAt": "2025-02-19T10:00:00.000Z",
"__v": 0
}
}

Create Approval

info

Create an approval request that can be tracked in dashboard and automation flows.

Request Type

POST

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/approval/create-approval

Payload

  • content (required): text needing approval
  • approvers (required): non-empty array of approver user Mongo IDs
  • expiryDate (required): ISO timestamp, must be sufficiently in the future
  • defaultAction (required): APPROVED | REJECTED | NO_ACTION
  • images (optional): image URL array
  • links (optional): URL array
  • googleChatSpaceId (optional): target spaces/{...} for posting approval card
Automation-safe defaults

For high-risk actions (publishing, external sends, production changes), prefer defaultAction: "REJECTED" and a short expiryDate.

cURL Example

curl -X POST "https://hana-api.hanabitech.com/v1/expose-api/approval/create-approval" \
-H "Content-Type: application/json" \
-H "X-API-KEY: HANA-<YOUR_API_KEY>" \
-d '{
"content": "Approve publishing the Q1 launch announcement.",
"approvers": ["USER_ID_1", "USER_ID_2"],
"expiryDate": "2026-02-21T18:30:00.000Z",
"defaultAction": "REJECTED",
"links": ["https://docs.google.com/document/d/EXAMPLE"]
}'

Response

{
"success": true,
"content": {
"_id": "APPROVAL_ID",
"content": "Approve publishing the Q1 launch announcement.",
"approvers": ["USER_ID_1", "USER_ID_2"],
"approverActions": {
"USER_ID_1": {
"action": "NO_ACTION",
"actionDate": "2026-02-19T12:12:00.000Z"
},
"USER_ID_2": {
"action": "NO_ACTION",
"actionDate": "2026-02-19T12:12:00.000Z"
}
},
"defaultAction": "REJECTED",
"expiryDate": "2026-02-21T18:30:00.000Z",
"organizationId": "ORG_ID",
"createdBy": "USER_ID",
"links": ["https://docs.google.com/document/d/EXAMPLE"],
"createdAt": "2026-02-19T12:12:00.000Z",
"updatedAt": "2026-02-19T12:12:00.000Z",
"__v": 0
}
}

How to Use in Zapier/API Flows

  1. Create approval and store returned _id as approvalId.
  2. Poll GET /approval/{approvalId} until:
    • approvers act, or
    • expiryDate is reached.
  3. Evaluate outcome using approverActions + defaultAction.

Suggested decision patterns:

  • Any-approver approve: proceed if any approver action is APPROVED.
  • All-approver approve: proceed only if all approver actions are APPROVED.
  • Strict reject: fail fast if any approver action is REJECTED.
  • Timeout fallback: when expired and unresolved, apply defaultAction.

Get Approval By ID

info

Retrieve a single approval request by ID.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/approval/{approvalId}

cURL Example

curl -X GET "https://hana-api.hanabitech.com/v1/expose-api/approval/APPROVAL_ID" \
-H "X-API-KEY: HANA-<YOUR_API_KEY>"

Response

{
"success": true,
"content": {
"_id": "APPROVAL_ID",
"content": "Approve publishing the Q1 launch announcement.",
"approvers": [
{
"_id": "USER_ID_1",
"userID": "users/USER_ID_1",
"email": "manager@example.com",
"displayName": "Manager",
"organizationId": "ORG_ID",
"profilePicture": "https://example.com/user.jpg",
"createdAt": "2025-01-20T09:12:00.000Z",
"updatedAt": "2026-02-01T08:00:00.000Z",
"__v": 0
}
],
"approverActions": {
"USER_ID_1": {
"action": "NO_ACTION",
"actionDate": "2026-02-20T10:00:00.000Z"
}
},
"defaultAction": "REJECTED",
"expiryDate": "2026-02-21T18:30:00.000Z",
"createdBy": {
"_id": "USER_ID",
"userID": "users/USER_ID",
"email": "owner@example.com",
"displayName": "Owner",
"organizationId": "ORG_ID",
"profilePicture": "https://example.com/user.jpg",
"createdAt": "2025-01-20T09:12:00.000Z",
"updatedAt": "2026-02-01T08:00:00.000Z",
"__v": 0
},
"organizationId": "ORG_ID",
"links": ["https://docs.google.com/document/d/EXAMPLE"],
"images": [],
"createdAt": "2026-02-19T12:12:00.000Z",
"updatedAt": "2026-02-19T12:12:00.000Z",
"__v": 0
}
}

Get Approvals

info

List approvals for the authenticated organization.

Request Type

GET

Endpoint

https://hana-api.hanabitech.com/v1/expose-api/approval?page={{PAGE_NUMBER}}&per_page={{PAGE_NUMBER_LIMIT}}

cURL Example

curl -G "https://hana-api.hanabitech.com/v1/expose-api/approval" \
-H "X-API-KEY: HANA-<YOUR_API_KEY>" \
--data-urlencode "page=1" \
--data-urlencode "per_page=10"

Response

{
"success": true,
"content": {
"data": [
{
"_id": "APPROVAL_ID",
"content": "Approve publishing the Q1 launch announcement.",
"approvers": [
{
"_id": "USER_ID_1",
"userID": "users/USER_ID_1",
"email": "manager@example.com",
"displayName": "Manager",
"organizationId": "ORG_ID",
"profilePicture": "https://example.com/user.jpg",
"createdAt": "2025-01-20T09:12:00.000Z",
"updatedAt": "2026-02-01T08:00:00.000Z",
"__v": 0
}
],
"createdBy": {
"_id": "USER_ID",
"userID": "users/USER_ID",
"email": "owner@example.com",
"displayName": "Owner",
"organizationId": "ORG_ID",
"profilePicture": "https://example.com/user.jpg",
"createdAt": "2025-01-20T09:12:00.000Z",
"updatedAt": "2026-02-01T08:00:00.000Z",
"__v": 0
},
"defaultAction": "REJECTED",
"expiryDate": "2026-02-21T18:30:00.000Z",
"organizationId": "ORG_ID",
"googleChatSpaceId": "spaces/AAAA1234xyz",
"approverActions": {
"USER_ID_1": { "action": "NO_ACTION", "actionDate": "2026-02-20T10:00:00.000Z" },
"USER_ID_2": { "action": "APPROVED", "actionDate": "2026-02-20T10:12:00.000Z" }
},
"images": [],
"links": ["https://docs.google.com/document/d/EXAMPLE"]
}
],
"totalCount": 1
}
}
Performing approval actions

Approval actions (APPROVED / REJECTED) are taken by authorized approvers through Hana Dashboard Approvals or approval cards in Google Chat.