# ICE - API Sample responses
Dev API: https://dsypummp81.execute-api.us-east-1.amazonaws.com/dev/
Swagger and request documentation: https://app.swaggerhub.com/apis/ADMIN_334/ice-app_api/1.0.0
### POST /create-sns-endpoint/{user_id}/
Create SNS (notifications) endpoint for corresponding device token.
### PUT /users/{user_id}/
#### Response
```
{
"message": "User profile updated successfully",
"updatedAttributes": {
"created_at": "2024-03-14T04:02:17.014694Z",
"is_registered": false,
"full_name": "Viswajit Alternate",
"email": "vv2339@columbia.edu",
"gender": "male",
"columbia_school": "SEAS",
"icebreakers": [
{
"question": {
"prompt": "What's overhyped?",
"chat": "What's something that's overhyped but you don't understand?",
"profile": "Something that's overhyped but I don't understand is"
},
"answer": "Taylor Swift"
},
{
"question": {
"prompt": "Your unique skill",
"chat": "What's a skill you've mastered that you are convinced no one else has",
"profile": "A skill I've mastered that I am convinced no one else has is"
},
"answer": "Licking my nose."
},
{
"question": {
"prompt": "Blend 2 animals for perfect pet",
"chat": "If you could blend two animals for the ultimate pet, what would it be?",
"profile": "If I could blend two animals for the ultimate pet, it'd be"
},
"answer": "Dog and Zebra"
}
],
"updated_at": "2024-03-27T03:57:05.379073Z",
"is_photo_blurred": false,
"user_id": "105084308459876091747",
"looking_for":"more than friends",
"connection": "google-oauth2",
"interests": [
"sci-fi",
"soccer",
"reading"
],
"dob": "05/04/1999",
"vibes": [
"chill",
"rizzler",
"salty"
],
"major": "Computer Science",
"username": "viswajit_alt",
"is_lgbtq": false,
"is_deleted": false,
"is_verified": false
}
}
```
### GET /users/{user_id}?complete=true
#### Response
```
{
"created_at": "2024-02-13 05:49:52.236009Z",
"is_registered": false,
"full_name": "Viswajit Nair",
"email": "viswajitnair@gmail.com",
"gender": "male",
"columbia_school": "SEAS",
"icebreakers": [
{
"question": {
"prompt": "What's overhyped?",
"chat": "What's something that's overhyped but you don't understand?",
"profile": "Something that's overhyped but I don't understand is"
},
"answer": "Taylor Swift"
},
{
"question": {
"prompt": "Your unique skill",
"chat": "What's a skill you've mastered that you are convinced no one else has",
"profile": "A skill I've mastered that I am convinced no one else has is"
},
"answer": "Licking my nose."
},
{
"question": {
"prompt": "Blend 2 animals for perfect pet",
"chat": "If you could blend two animals for the ultimate pet, what would it be?",
"profile": "If I could blend two animals for the ultimate pet, it'd be"
},
"answer": "Dog and Zebra"
}
],
"updated_at": "2024-02-13 19:18:55.067372Z",
"is_photo_blurred": "false",
"user_id": "116518837762263751050",
"relationship_status": "single",
"connection": "google-oauth2",
"interests": "interests",
"dob": "05/04/1999",
"major": "Computer Science",
"username": "joemama",
"looking_for":"more than friends",
"is_deleted": false,
"is_verified": false
}
```
### GET /users/{user_id}/
#### Response
As of now, this is the response for an 'incomplete'. There maybe some additions.
```
{
"user_id":"116518837762263751050",
"gender": "male",
"full_name": "Viswajit Nair" # Note: this should be initialized if anonymous "VN"
"interests": ["interests"],
}
```
### GET /presigned/{user_id}?file_type=file_type_var&access_type=access_type
#### Response
##### access_type can be:
- get
- put
Use put for getting urls to upload images/voice to.
##### file_type can be:
- cropped
- thumbnail
- cropped_blurred
- thumbnail_blurred
- raw
- voice
First call request with qparam 'raw' before photo upload, and call a PUT request to the URL received with image/voice in the body.
#### PUT for voice
- PUT the presigned url with the voice file attached. This triggers storage and a subsequent backend process where the voice is cloned. After this, follow instructions in /generate/voice/{user_id}
The url received from the request can also be used to load images (after uploading).
```
{
"presigned_url": "https://ice-user-assets-dev.s3.amazonaws.com/116518837762263751050/raw-photo?AWSAccessKeyId=ASIA5TLEJNGLUB6KZLNE&Signature=8dqPhRlkIQwZIxPNwrjF6%2Bdo3BE%3D&x-amz-security-token=IQoJb3JpZ2luX2VjEKX%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIQDXVpTFz73T%2BzO8EVdqoIcb6ipE4LSM38XDWdzgwDK%2BTQIgZp0DBmJ6ht%2FO6IgCwbJoyz7SL%2FdN7zwCMt96i3%2B1aIQqtQMIfRABGgw5MzQ5MDI1ODk4NDciDJTpGt6ovO4FGV3ItiqSA5xXBW6WAT0WQuISL13T0rhtk7N%2FARrImWmzQold1KwpvDZ5hXVTDsUqs%2FgNsNG9tG0oz3BkP10DlY7reU8aWB7II6ubLDVbs0MYy58HIqfHqlAU516hrUFwEX1Clm%2B%2F%2BI7KyhDnWVJ3MrBOx1iohTLtWLPkaX%2FfQ%2F0fHV3H6M8YRUMqL78sjFdicoR57Dq6mpi49XkzWlNZ79BL7hZlgFb2Qk692AOEFPjZC3VHWUGc%2BT3PTbW3RvMUIa5Zop%2F65f5wsPDR7JEByRj7p7Efdg%2BOQTJXVZGr3P5ZdsIHeRMVDWyiHVk9SzXPhYSsJ%2BchWP2bXjDP29wj5vbZJZJ1raPJCNkBWv3W2b2q%2FV9mwlTo%2BcUijMBjeKG24ItrVkynsn0%2FxwaqtKzAAQy7dmx1s8kV42kohTvH0Ld7j%2FATb7npcniX0U4rmRNUc1tRVwcyROlPiEUrGFgOmkvkXSyjmuVmdGNV7scLdAZ9cJAFgch5OtL1Q%2BrGsEKfeZIKrVP%2BAHVG91%2B0TT9fePn%2FlfHXO8bDsTD1mq%2BuBjqeAZh6mJCnqkU9DbFEgUD3d9UAYpU64uBioTljO3yBFrsJBy9e6d0eYZQlZEf8ZOKcpCL2eNzkdUuW2g1%2FPq97Geac5xloGsS38W%2Ba9Q5VAttN0VJV8dvpbp7ijbgxqys%2BB3jwgZUihuYIYRn8Zi2oPkqqoD9UsvxgOORk7ktCsCueGWoEs03kPhRGerir6vkg2QrBWiM%2Bftj7fen7wEkX&Expires=1707858821"
}
```
### POST /generate/voice/{user_id}
This is the api to generate speech for a piece of text. Note: Only for onboarding NOT for chat.
```
{
content:<string>
}
```
Keep content as empty if retrieving the sample text to speech, else populate with text (going to be AI message).
```
{
"message": "Voice generated successfully",
"presigned_url": "https://ice-userassets-934902589847-dev.s3.amazonaws.com/116518837762263751050/voice-gen-sample.mp3?AWSAccessKeyId=ASIA5TLEJNGLQPXH477Y&Signature=1WvqdpmbdiJHt94Bjd6tQT8BKCo%3D&x-amz-security-token=IQoJb3JpZ2luX2VjEHQaCXVzLWVhc3QtMSJIMEYCIQCUM4IOMFU0f71xz4vWV%2BtS%2FXkZ2MOzr0CtQVVD8BCkGgIhANgeD%2BFGQN0T05hNZFaSUBjK%2FidVssFHx6sbs%2BvbNGXVKrEDCG0QARoMOTM0OTAyNTg5ODQ3IgwaO3X%2FISK2ujtBZasqjgMKFgLtYYvagGUYbdlhysQb340PouXBOHaMwt80dEpOi08ZWXlfurSXXGRLuhxkbK5AUCjYKl89ngF3BsMx%2FV9wZ2ELOliiYAHz9mLMin9Yl4jq1dwj8fQSZ7UFNkgFRBvm9%2FKOatZSUbyB17wJKcrOuDpGMV6tT8KjS9md9i0fCuDNxNkRUCKcftqDCJ9ows0iSxBHSCTZ6Fy%2BRaFkAR47om36YaODKVQnfvzNoHLFoxckTnISu5SUPdumzcCGikfIhOY0PUzjbQA4nIhF2OqbjRe0i9Jaxlr7CvDuJ5MFZKygcRwFSmIsbrByunZ5m4kk5uHICT5qaQwOJ8DbvQhQL6BUtIwOyz88RChta7CwC8tUau1712Q6HXbg8xzBdaO23gj%2B%2F6xJ5hFgAgVdBxr34m%2BLVisCg2ONXCklrYE5EQyzNelYHM0QF9WRZwwakVXXCe0IQUBrMtuMnXIG7pUFOlpUKrAbxzSp3ECL9J1wqdamh6CGwpzgusrIIKzEl36V5RXJqmTE%2BlMmO9rl9zCZhZWvBjqcARs5cpurkmb6VpkjQc6AyIYZQMxNTX6e9%2FSvwuQrJmq%2Beygc7YmR1KGRKn6TbZFd1mFgwYvYIl%2BNkLVEyoKkMf4YavMzqZu2t9pbk1NGa35txrHCRfgeADyHifFp6LmLUv%2BbxO%2FD2Ovr8XPS7aLQz9Fi1tC%2FN%2BNLdmf4%2BN4Z%2BVNzB6wxKn1phPoBVik4IAB8BrAxWm5AYtfA5Eihmg%3D%3D&Expires=1709527214"
}
```
### GET /users/explore/{user_id}/
Retrieving explore page for users. user_id passed in case we need to add recommendation system or something. Sample response:
```
{
"message": "Users retrieved successfully",
"users": [
{
"created_at": "2024-03-14T04:02:17.014694Z",
"is_registered": true,
"full_name": "Viswajit Alternate",
"email": "vv2339@columbia.edu",
"gender": "male",
"columbia_school": "SEAS",
"icebreakers": [
{
"question": {
"prompt": "What's overhyped?",
"chat": "What's something that's overhyped but you don't understand?",
"profile": "Something that's overhyped but I don't understand is"
},
"answer": "Taylor Swift"
},
{
"question": {
"prompt": "Your unique skill",
"chat": "What's a skill you've mastered that you are convinced no one else has",
"profile": "A skill I've mastered that I am convinced no one else has is"
},
"answer": "Licking my nose."
},
{
"question": {
"prompt": "Blend 2 animals for perfect pet",
"chat": "If you could blend two animals for the ultimate pet, what would it be?",
"profile": "If I could blend two animals for the ultimate pet, it'd be"
},
"answer": "Dog and Zebra"
}
],
"updated_at": "<built-in method isoformat of datetime.datetime object at 0x7fd568c5d140>Z",
"is_photo_blurred": false,
"user_id": "105084308459876091747",
"relationship_status": "single",
"connection": "google-oauth2",
"interests": [
"sci-fi",
"soccer",
"reading"
],
"dob": "05/04/1999",
"vibes": [
"chill",
"rizzler",
"salty"
],
"major": "Computer Science",
"username": "viswajit_alt",
"is_lgbtq": false,
"is_deleted": false,
"is_verified": false,
"image_keys": {
"cropped": "https://ice-userassets-934902589847-dev.s3.amazonaws.com/105084308459876091747/cropped_photo.jpg",
"thumbnail": "https://ice-userassets-934902589847-dev.s3.amazonaws.com/105084308459876091747/thumbnail_photo.jpg"
}
},
{
"created_at": "2024-02-28 17:52:32.166182Z",
"is_registered": true,
"full_name": "Nikhil Nath R",
"email": "test@example.com",
"gender": "male",
"columbia_school": "Columbia College",
"updated_at": "2024-03-19T16:52:24.988220Z",
"is_photo_blurred": true,
"user_id": "65d8a4d4da180f3fba8c2ec7",
"connection": "auth0",
"interests": [
"Comic",
"Jazz",
"Anthology"
],
"dob": "02/02/2002",
"vibes": [
"Moody",
"Wholesome",
"Curious"
],
"username": "user",
"is_deleted": false,
"is_verified": false,
"image_keys": {
"cropped": "https://ice-userassets-934902589847-dev.s3.amazonaws.com/65d8a4d4da180f3fba8c2ec7/blurred_cropped_photo.jpg",
"thumbnail": "https://ice-userassets-934902589847-dev.s3.amazonaws.com/65d8a4d4da180f3fba8c2ec7/blurred_thumbnail_photo.jpg"
}
}
]
}
```
## Websocket API for chat
TODO: Include refactoring changes and update responses.
TODO: Changes after including LLM response.
- Connection url : wss://my7jnqmy20.execute-api.us-east-1.amazonaws.com/dev/
- Connect with user id as query param:
wss://my7jnqmy20.execute-api.us-east-1.amazonaws.com/dev?user_id={user_id}
- Payload for succesfully sending a message at the beginning of a chat:
```
{
action:"sendmessage",
message:{
"content":<text typed by user / empty if it is voice note>,
"modality":"text"/"voice"
},
sender:<sender_user_id>,
receiver:<receiver_user_id>,
is_chat_start:true
initial_assistant_message:<'chat' version of icebreaker chosen>
}
```
- Payload for succesfully sending a message not at the beginning of a chat:
```
{
action:"sendmessage",
chat_id:<chat_id> // made in the backend, will be returned
message:{
"content":<text typed by user / empty if it is voice note>,
"modality":"text"/"voice"
},
sender:<sender_user_id>,
receiver:<receiver_user_id>,
is_chat_start:false
}
```
#### EXAMPLE
Payload:
```
{
"action":"sendmessage",
"message":{
"content":"Hey boss can I habe piza pls",
"modality":"text"
},
"sender":"userb",
"receiver":"usera",
"is_chat_start":true,
"initial_assistant_message":"Who do you think is overhyped?"
}
```
Example response for sender:
```
{
"response-type":"success-response",
"message": {
"message_id": "22eb7555-9175-4372-8ff6-ef51e55b4d87",
"timestamp": "2024-03-10T01:51:51.118697Z",
"chat_id": "ae831abf-2b0e-4398-b47f-6c3e943356f1",
"sender": "userb",
"content": "Hey boss can I habe piza pls",
"role": "user",
"receiver":"usera",
"is_deleted": false,
"voice_available": false
},
"success": true
}
```
Example response for receiver IF CONNECTED and IF ICE BROKEN:
```
{
"response-type":"singular"
"message": {
"message_id": "22eb7555-9175-4372-8ff6-ef51e55b4d87",
"timestamp": "2024-03-10T01:51:51.118697Z",
"chat_id": "ae831abf-2b0e-4398-b47f-6c3e943356f1",
"sender": "userb",
"receiver":"usera",
"content": "Hey boss can I habe piza pls",
"role": "user"
"is_deleted": false,
"voice_available": false
}
}
```
Example response for both sender and receiver IF both CONNECTED and ICE NOT BROKEN, i.e LLM response.:
```
{
"response-type": "singular",
"message": {
"message_id": "05d9a6bb-8b0f-46a0-9ce9-a0bf2ec7600f",
"timestamp": "2024-04-04T04:30:07.313072Z",
"chat_id": "0298376e-1aa9-457a-8d71-53b087ed8e79",
"sender": "userb",
"receiver":"usera",
"content": "Interesting, you must be a talented athlete. So, what's your favorite team?",
"role": "assistant",
"is_deleted": false,
"voice_available": true
}
}
```
Note the "role" can be user / assistant depending on whether it is a bot response or a user response. If role is "assistant" and "voice_available" is true, a follow up ping will be received on the websocket signifying that corresponding generated voice is ready:
```
{
"response-type": "voice_ready",
"message_id": "05d9a6bb-8b0f-46a0-9ce9-a0bf2ec7600f"
}
```
retrieve the corresponding voice generation by accessing the bucket :
- ice-messages-tts-934902589847-dev
- Object Key is chat_id/message_id.
Example object url: https://ice-messages-tts-934902589847-dev.s3.amazonaws.com/0298376e-1aa9-457a-8d71-53b087ed8e79/05d9a6bb-8b0f-46a0-9ce9-a0bf2ec7600f.mp3
### GET /generate/icebreaker
No payload/query param. Generates a random icebreaker question. Sample response
```
{
"icebreaker": {
"profile": "I'm convinced that",
"prompt": "Convinced about this",
"chat": "What are you convinced of?"
}
}
```
### GET /generate/interests
Retrieving the interests dictionary grouped by categories.
### GET /generate/voiceprompt
Retrieving the text to be shown on the voice clone page during onboarding.
```
{
"voice_prompt": "Amidst the digital chatter, whispers spoke of a legendary app. Ice, they said, where every connection felt like stumbling upon a hidden gem, each chat a captivating journey through enchanted realms."
}
```
### POST /social/icebreak/{chat_id}/
Set ice_broken to true or false. Payload `{ "ice_broken": <boolean>}`
Success if 200 response.
### GET /data
Get app data such as columbia school, interests, vibe_words
### GET /chats/{user_id}/
Retrieving all kinds of chats for a user.
Sample response:
TODO: update chats with sender_name and recipient_name, latest_message_id
```
{
"all_chats": [
{
"updated_at": "2024-03-14T15:37:41.265939Z",
"recipient_user_id": "105084308459876091747",
"created_at": "2024-03-14T15:37:41.265939Z",
"initiator_user_id": "116518837762263751050",
"ice_broken": false,
"is_deleted": false,
"chat_id": "b8cbb31d-c7e2-460a-9769-b247d5443189",
"initiator_name":<initiator_name>,
"recipient_name":<recipient_name>
}
],
"ice_broken_chats": [],
"iced_sender_chats": [
{
"updated_at": "2024-03-14T15:37:41.265939Z",
"recipient_user_id": "105084308459876091747",
"created_at": "2024-03-14T15:37:41.265939Z",
"initiator_user_id": "116518837762263751050",
"ice_broken": false,
"is_deleted": false,
"chat_id": "b8cbb31d-c7e2-460a-9769-b247d5443189",
"initiator_name":<initiator_name>,
"recipient_name":<recipient_name>
}
],
"iced_recipient_chats": []
}
```
### GET /roll-ice/{user_id}/
API called when roll ice button is tapped. Currently returns a random user.
Sample response:
```
{
"message": "Ice Rolled! Compatible user retrieved successfully",
"user": {
"created_at": "2024-02-28 17:52:32.166182Z",
"is_registered": true,
"full_name": "Nikhil Nath R",
"email": "test@example.com",
"gender": "male",
"columbia_school": "Columbia College",
"updated_at": "2024-03-19T16:52:24.988220Z",
"is_photo_blurred": true,
"user_id": "65d8a4d4da180f3fba8c2ec7",
"connection": "auth0",
"interests": [
"Comic",
"Jazz",
"Anthology"
],
"dob": "02/02/2002",
"vibes": [
"Moody",
"Wholesome",
"Curious"
],
"username": "user",
"is_deleted": false,
"is_verified": false,
"image_keys": {
"cropped": "https://ice-userassets-934902589847-dev.s3.amazonaws.com/65d8a4d4da180f3fba8c2ec7/blurred_cropped_photo.jpg",
"thumbnail": "https://ice-userassets-934902589847-dev.s3.amazonaws.com/65d8a4d4da180f3fba8c2ec7/blurred_thumbnail_photo.jpg"
}
}
}
```
### GET /messages/{chat_id}/
Retrieve all messages of a chat. Ordered in ascending order by timestamp:
```
[
{
"sender": "116518837762263751050",
"content": "Hello alternate viswa how are you doing today",
"role": "user",
"voice_available": false,
"timestamp": "2024-03-14T15:37:41.265939Z",
"message_id": "d084f21c-f956-4a1c-962e-9e6166cff93d",
"chat_id": "b8cbb31d-c7e2-460a-9769-b247d5443189",
"is_deleted": false
},
{
"sender": "105084308459876091747",
"content": "Hey bitch",
"role": "user",
"voice_available": false,
"timestamp": "2024-03-14T15:46:46.731991Z",
"message_id": "c12cfa57-f45d-4b83-8547-92c4d3c548af",
"chat_id": "b8cbb31d-c7e2-460a-9769-b247d5443189",
"is_deleted": false
},
{
"sender": "116518837762263751050",
"content": "Shut up",
"role": "user",
"voice_available": false,
"timestamp": "2024-03-14T15:47:27.655022Z",
"message_id": "00accd05-d0b7-4133-885c-36ebae321e7f",
"chat_id": "b8cbb31d-c7e2-460a-9769-b247d5443189",
"is_deleted": false
},
{
"sender": "105084308459876091747",
"content": "no i wont shut up",
"role": "user",
"voice_available": false,
"timestamp": "2024-03-14T15:47:36.343939Z",
"message_id": "6092ff80-9774-446a-9047-f1c09c8353a7",
"chat_id": "b8cbb31d-c7e2-460a-9769-b247d5443189",
"is_deleted": false
}
]
```