---
# System prepended metadata

title: CAT API

---

# Cat API Documentation

## Overview

The Cat API provides endpoints for uploading CV documents, scripts, and retrieving the latest images for a given client from Google Cloud Storage. These endpoints are designed to support dynamic web content management and client-specific customizations.



## Authentication

*Not required*
## Base URL

`https://asia-east1-chichat-cat.cloudfunctions.net`

## API Endpoint

### `/cv_uploader`

This endpoint supports POST requests for uploading CVs.

#### HTTP Method

`POST`

#### Headers

*Not required*

#### Request Parameters

| Parameter | Type | Description | Required |
|-----------|------|-------------|----------|
| `ccid` | String | Client's unique identifier. | Yes |
| `is_click_push` | Boolean | Flag to indicate if the upload was triggered by a click. | Yes |

#### Request Body Example

```json
{
  "ccid": "client123",
  "is_click_push": false
}
```
#### Error Codes

The `cv_uploader` function is responsible for uploading `click.js` and `conversion.js` files based on the provided `ccid` to Google Cloud Storage. During its operation, various errors can occur due to request handling, parameter validation, or server-side processing. Below is a list of potential error codes, their meanings, and common causes.

| Error Code | Description | Common Causes |
|------------|-------------|---------------|
| 400 | Bad Request | This error occurs if the request body is empty, the `ccid` is missing or empty, or the `is_click_push` flag is not properly provided. It indicates that the server cannot process the request due to client-side input errors. |
| 405 | Method Not Allowed | An unsupported HTTP method was used for the request. The `cv_uploader` function only supports POST requests, and using GET or any other method will result in this error. |
| 404 | Not Found | This error is returned if there is no client data associated with the provided `ccid`. It indicates that the specified `ccid` does not exist in the Firestore database. |
| 500 | Internal Server Error | General server-side errors can trigger this response. This could be due to issues with Firestore or Cloud Storage interactions, unhandled exceptions in the `cv_uploader` function, or other backend failures. |

---
### `/script_uploader`


These endpoints support POST requests for uploading scripts. 

#### HTTP Method

`POST`


#### Headers

*Not required*

#### Request Parameters

| Parameter | Type | Description | Required |
|-----------|------|-------------|----------|
| `ccid` | String | The unique identifier for the client. | Yes |
| `url` | String | The URL scheme associated with the script. | Yes |
| `function_flag` | Boolean | Indicates whether a specific function is enabled. | Yes |
| `function_name` | String | The name of the function to be enabled, if any. | Yes |
| `img_name` | String | The name of the image to be used within the script. | Yes |
| `time_auto_modal` | Boolean | Determines if a modal should automatically pop up after a certain time. | Yes |
| `time_auto_sec` | Integer | The number of seconds to wait before the automatic modal pops up. | Yes |
| `scroll_modal` | Boolean | Indicates whether a modal should appear upon scrolling a certain percentage of the page. | Yes |
| `scroll_percent` | Integer | The page scroll percentage required to trigger the modal. | Yes |
| `visibility_flag` | Boolean | Controls the visibility of certain elements in the script. | Yes |
| `popup_again_min` | Integer | The minimum number of minutes before the popup can be shown again to the same user. | Yes |
| `ai_log_flag` | Boolean | Enables or disables logging for AI-related activities. | Yes |
| `ai_popup_flag` | Boolean | Determines whether AI-driven popups are enabled. | Yes |
| `back_popup_flag` | Boolean | Enables or disables popups when navigating back in browser history. | Yes |
| `show_rate` | Integer | The percentage rate at which AI-driven popups should appear. | Yes |
| `banner_size` | String | Specifies the size of the banner to be used. | Yes |
| `device_popup_flag` | String | Controls the popup behavior based on the device type. | Yes |
| `dev_flag` | Boolean | Control whether sending request to dev endpoint. | Yes |
| `ab_test_flag` | Boolean | Enables A/B testing for the script. | Yes |
| `image_name_a` | String | The image name for variant A in A/B testing. | Yes |
| `image_name_b` | String | The image name for variant B in A/B testing. | Yes |
| `back_same_domain_flag` | Boolean | Controls the back button behavior for the same domain. | Yes |
| `wait_same_domain_flag` | Boolean | Adds a wait condition for actions within the same domain. | Yes |
| `scroll_same_domain_flag` | Boolean | Controls scroll behavior for the same domain. | Yes |
| `visibility_same_domain_flag` | Boolean | Manages visibility settings for elements within the same domain. | Yes |





#### Request Body Example

```json
{
  "ccid": "your_client_id_here",
  "url": "your_url_scheme_here",
  "function_flag": false,
  "function_name": "your_function_name_here",
  "img_name": "your_image_name_here",
  "time_auto_modal": false,
  "time_auto_sec": 20,
  "scroll_modal": false,
  "scroll_percent": 50,
  "visibility_flag": false,
  "popup_again_min": 20,
  "ai_log_flag": false,
  "ai_popup_flag": false,
  "back_popup_flag": false,
  "show_rate": 80,
  "banner_size": "defaultSize",
  "device_popup_flag": "default",
  "dev_flag": false,
  "ab_test_flag": false,
  "image_name_a": "your_image_name_A_here",
  "image_name_b": "your_image_name_B_here",
  "back_same_domain_flag": false,
  "wait_same_domain_flag": false,
  "scroll_same_domain_flag": false,
  "visibility_same_domain_flag": false
}

```

#### Error Codes

During the operation of the `scriptUploader`, various errors can occur due to file uploads, parameter validation, server-side processing, or HTTP method restrictions. Below is a list of potential error codes, their meanings, and common causes.

| Error Code | Description | Common Causes |
|------------|-------------|---------------|
| 400 | Bad Request | Invalid parameters were provided to the `ScriptUploader`. This could be due to missing required fields, incorrect data types, or invalid values. Additionally, an empty request body will also result in this error. |
| 405 | Method Not Allowed | An unsupported HTTP method was used for the request. Only POST requests are allowed, and using GET or any other method will result in this error. |
| 500 | Internal Server Error | General server-side errors. This could be due to issues with the `ProcessStorage` service, file read/write errors, or other unhandled exceptions within the `ScriptUploader`. |


---

### `/get_gcs_client_images`

#### HTTP Method

`GET`


Retrieves the latest image for a given client based on the `client_id` parameter.

#### Parameters

- **client_id** (required): The unique identifier for the client whose images you want to retrieve.

#### Headers

*Not required for local execution. For cloud function deployment, CORS headers are automatically handled.*

#### Request Parameters

- `client_id` (required): The unique identifier for the client whose images you want to retrieve. This should be passed as a query parameter in the GET request URL.

  Example: `?client_id=12345`

#### Response

The response is a JSON object containing an array with the most recent image's URL and its creation timestamp.

##### Success Response Example

```json
{
  "image_url": [
    {
      "url": "https://cdn.chichat.tw/clients/{client_id}/public/images/latest_image.jpg",
      "time_created": "2024-01-31T12:00:00Z"
    }
  ]
}
```
#### Error Codes

| Error Code | Description | Common Causes |
|------------|-------------|---------------|
| 400 | Bad Request | The `client_id` query parameter is missing or invalid. |
| 404 | Not Found | No images found for the provided `client_id`. Note: The current implementation does not explicitly handle this case; it returns an empty list instead. |
| 500 | Internal Server Error | Server-side errors such as issues with Google Cloud Storage client initialization, failure in listing blobs, or any unhandled exceptions. |
| 503 | Service Unavailable | Temporary issues with the Google Cloud Storage service or network connectivity problems preventing access to the storage bucket. |

---
### `/uploader`

#### HTTP Method

`POST`

Uploads images and HTML content for a given client.

#### Headers

- `Content-Type`: `multipart/form-data` is required for uploading files.

#### Request Parameters

| Parameter | Type | Description | Required |
|-----------|------|-------------|----------|
| `ccid` | String | Client's unique identifier. | Yes |
| `url_scheme` | String | URL scheme to be used in HTML content. | Yes |
| `file_length` | String | Number of image files to upload. | Yes |
| `img_X` | File | Image file where X is the index starting from 0. Must match the number specified in `file_length`. | Conditional |
| `gta_script` | String | Google Tag Assistant Script. Include if applicable. | Yes |
| `gat_no_script` | String | Google Tag Assistant NoScript. Include if applicable. | Yes |
#### Request Form Example
```json
{ 
    "client": "test_client_001"
    "ccid": "b241f282-e7c1-4260-bb8d-630762a7e9bd"
    "url_scheme":"https://example.com"
    "gta_script":""
    "gta_no_script":""
    "img_0": "[object File]"
    "img_1": "[object File]"
    "file_length":"2"
}
```


#### Success Response

The response includes a JSON object with URLs for the uploaded images, redirect HTML, and script files.

##### Example

```json
{
  "images": ["https://cdn.chichat.tw/clients/{ccid}/public/images/img_0.jpg"],
  "redirect_url": ["https://cdn.chichat.tw/clients/{ccid}/public/static/banner.html"],
  "script_url": ["https://cdn.chichat.tw/clients/{ccid}/public/scripts/script.js"]
}
```
#### Error Codes
| Error Code | Description | Common Causes |
|------------|-------------|---------------|
| 400 | Bad Request | Returned if required form fields are missing or invalid, or if an uploaded file is not an image.
| 500 | Internal Server Error | Server-side errors such as issues with Google Cloud Storage client initialization, failure in listing blobs, or any unhandled exceptions. |