# API Documentation for CRM Integration
## General Information
- **Authentication**: All requests require Bearer Token authentication.
- **Error Response Format**:
```json
{
"status": "fail",
"error": "Error description here"
}
```
---
## Endpoint: `/message_from_chat` (POST)
### Description
This endpoint allows the backend of the CRM system to send a notification to the bot backend about a new message in a chat.
### Payload
- `channel` (str): The channel. Currently, only "telegram" is supported.
- `message_type` (str): Type of the message (`text`, `sticker`, `voice`, `media`). Currently, only "text" is processed.
- `message_id` (str): ID of the message.
- `message_metadata` (dict): Metadata for non-text messages.
- `chat_type` (str): Type of the chat.
- `from_chat_id` (str): ID of the chat where the message is coming from.
- `from_user` (dict): Information about the user who sent the message.
- `user_id` (str): User ID.
- `username` (str, optional): Username.
- `user_first_name` (str): User's first name.
- `user_last_name` (str): User's last name.
- `metadata` (dict): Additional metadata.
- `conversation_history` (list[Message]): Conversation history.
- `timestamp` (float): Timestamp of the message.
- `text` (str): Text of the message.
---
## Endpoint: `/send_to_chat` (POST)
### Description
This endpoint allows sending a message to a chat.
### Payload
- `channel` (str): The channel. Currently, only "telegram" is supported.
- `message_type` (str): Type of the message (`text`, `sticker`, `voice`, `media`). Currently, only "text" is processed.
- `message_metadata` (dict): Metadata for non-text messages.
- `to_chat_id` (str): ID of the chat to send the message to. If `to_chat_id` is equal to `to_user_id`, the message will be sent to DM.
- `to_user_id` (str): ID of the user to send the message to.
- `text` (str): Text of the message.
- `reply_to_message_id` (str): ID of the message to reply to.
- `from_user_id` (str): ID of the sender. It can be the ID of the bot or a regular Telegram account.
### Response
```json
{
"status": "ok",
"message_id": "Message ID from Telegram server",
"timestamp": "Timestamp"
}
```
---
## Endpoint: `/get_contact` (GET)
### Description
This endpoint retrieves a client's contact card.
---
## Endpoint: `/update_contact_field` (POST)
### Description
This endpoint updates a field/tag/status in a client's contact card.
### Payload
- `field_name` (str): Name of the field to update.
- `field_value` (str): New value for the field.
---
## Endpoint: `/get_rates` (GET)
### Description
This endpoint retrieves exchange rates.
### Parameters
- `from_currency` (str): Source currency.
- `to_currency` (str): Target currency.
- `from_amount` (str or null): Amount in the source currency (to avoid float rounding).
- `to_amount` (str or null): Amount in the target currency (for reverse exchanges).
### Response
```json
{
"from_currency": "Source currency",
"to_currency": "Target currency",
"from_amount": "Amount in source currency",
"to_amount": "Amount in target currency"
"valid_until": ... (float)
}
```
---
## Endpoint: `/get_discount` (GET)
### Description
This endpoint retrieves available discounts.
### Parameters
- `from_currency` (str): Source currency.
- `to_currency` (str): Target currency.
- `from_amount` (str): Amount in the source currency.
- `to_amount` (str): Amount in the target currency.
- `contact_id` (str): ID of the contact to retrieve discounts for.
### Response
```json
{
"discount": "0.005", # 5%
"from_currency": ...,
"to_currency": ...,
"from_amount": ...,
"to_amount": ...,
"valid_until": ... (float)
}
```