# Managing Execution Limits per User

## Managing Execution Limits per User

This use case outlines how to manage the number of executions per user and automate stopping and restarting flows based on a specified execution limit. The flows are stopped once the limit is reached and restarted at the beginning of a new month. This guide explains the necessary API calls and steps to implement this behavior effectively.

## Retrieve Execution Count

This API call retrieves the total number of executions associated with a specific user. It returns details that include the user ID, flows associated with the user, and the total execution count.

`GET` `https://api.platform.openintegrationhub.com/icenter/executions`

**The following url parameters are supported:**

| **Parameter** | **Description**                                                                                                     |
| ------------- | ------------------------------------------------------------------------------------------------------------------- |
| `start`       | The beginning of the time frame, in the format `YYYY-MM-DD`. Defaults to one month ago                              |
| `end`         | The ending of the time frame, in the format `YYYY-MM-DD`. Defaults to today                                         |
| `groupby`     | Which field the counts should be grouped at. Currently supports `user`, `flow`, and `component`. Defaults to `user` |

**Response Properties**

| **Properties** | **Description**                                                                        |
| -------------- | -------------------------------------------------------------------------------------- |
| id             | the id is the internal FlowMate user ID                                                |
| user           | user is the internal FlowMate user ID                                                  |
| tenant         | tenant is the ID of the FlowMate account                                               |
| allFlows       | List of all active flows per user                                                      |
| execution      | The count of all actions for the defined time period                                   |
| username       | The identifier of the user that is transferred when integrating the Integration Center |

**Example GET Request**

`GET` `https://api.platform.openintegrationhub.com/icenter/executions?start=2024-11-16&end=2024-11-17&groupby=user`

**Response**

```json
{
        "_id": "636d0762bd257a7eb2373d6c",
        "user": "636d0762bd257a7eb2373d6c",
        "tenant": "636d0762bd257a7eb2373d6a",
        "allFlows": [
            "6732345d01bea099edcb9863",
            "6731feaf01bea099edcb977a",
            "67320a6e01bea099edcb97f2",
            "67125ff1a9cde94983184da4",
            "673230f301bea099edcb9844"
        ],
        "executions": 304,
        "username": "demo.oih@gmail.com"
    }
```

In this step, you will use the **executions** field to monitor the user's activity. If the number of executions reaches a predefined limit, you can proceed to the next steps, such as stopping flows or taking other actions. Remember that **username** is the user identifier from the customer's system, while **user** is an identifier given by FlowMate.

## Stop User Flows

Once the execution limit for a user is reached, you can stop one or multiple flows to prevent further executions. The API provides options to stop individual flows or multiple flows simultaneously.

**Option 1: Stop a single flow**

Use this endpoint to stop a specific flow. Replace `*FLOW_ID*` with the unique ID of the flow obtained from the previous steps that you need to halt.

`POST` `https://api.platform.openintegrationhub.com/flows/*FLOW_ID*/stop`

**Option 2: Stop a multiple flows**

Use this endpoint to stop multiple flows in a single request. Provide an array of flow IDs obtained from the previous steps that you need to halt.

`POST` `https://api.platform.openintegrationhub.com/flows/multiple/stop`

**Request Body Example**

```json
{
[
    "flow1",
    "flow2",
    "flow3"
]
}
```

## Start Flows again, when fitting

* start of new month (reset action limit)
* new purchase of actions
* new plan

There are different scenarios in which you will reactivate flows. Before managing flows, you must impersonate the user to gain the necessary permissions to modify their flows.

#### Impersonate the User

The impersonate call provides a token that authorizes you to manage the user's flows. This token must be included in subsequent API calls (such as starting flows) to authenticate your actions on behalf of the user. Use the `username` field to specify the external identifier of the user (the one passed by the customer).

`POST` `https://api.platform.openintegrationhub.com/impersonate`

**Request Body Example**

```json
{
  "username": "abc123"
}
```

**Response**

```json
{
  "token": "f9MPJQz6aRfQH4qVnkzUFbU3-4n-BAjiBXQKmED4_e15KK745Heq9KY2M7XknbGi-zO3XHF--OnbZUyqTHEO-qwXwzFX8K-isRZ2lclMzXDZiD_2DahQ1rfynbZHfn_VFi8VfHda5FiLfhcmxa20WL2TcPq82_lpgKN0nSTwCD4",
  "id": "62460554305401543e4e60c1"
}
```

#### Restarting User Flows

Once you have successfully impersonated the user and received a token, you can use that token to restart the flows. The API offers the option to start a single flow or multiple flows at once.

**Option 1: Start a Single Flow**

Use this endpoint to start a specific flow. Replace `*FLOW_ID*` with the unique ID of the flow you want to activate.

`POST` `https://api.platform.openintegrationhub.com/flows/*FLOW_ID*/start`

**Authorization**: Include the token from the impersonate call in the `Authorization` header.

**Authorization Header example**

```json
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
```

**Option 2: Start Multiple Flows at Once**

Use this endpoint to start multiple flows in a single request. The request body should be an array containing the IDs of the flows you want to start.

`POST` `https://api.platform.openintegrationhub.com/flows/multiple/start`

**Authorization:** Use the same token from the impersonate call as a Bearer token in the `Authorization` header.

**Authorization Header example**

```json
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
```

**Request Body Example**

```json
{
[
    "flow1",
    "flow2",
    "flow3"
]
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://flowmate.gitbook.io/flowmate-documentation/using-the-flowmate-api/managing-execution-limits-per-user.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
