# Create a datastore

> Source: https://truto.one/docs/api-reference/admin/datastores/create/

`POST /datastore`

Resource: **Datastores**

## Request body

- **`id`** _(string)_
  The datastore ID (optional; if omitted, one is generated).
- **`type`** _(string)_
  The datastore type. Determines the shape of `config`.
  Allowed: `mongo_data_api`, `google_cloud_storage`, `s3`, `qdrant`
- **`label`** _(string)_
  A friendly label for this datastore.
- **`config`** _(object)_
  Config object for the datastore connection. Shape depends on `type`.
  _One of:_
  - **Mongo Data Api**
    - **`data_source`** _(string)_
      Name of the Atlas cluster (the Data API "data source").
    - **`database`** _(string)_
    - **`api_url`** _(string)_
      Base URL of your Atlas Data API endpoint.
    - **`api_key`** _(string)_
      Atlas Data API key. Treat as a secret.
  - **Google Cloud Storage**
    - **`bucket`** _(string)_
    - **`credentials`** _(object, required)_
      Service-account JSON used to authenticate against Google Cloud Storage.
      - **`type`** _(string)_
      - **`project_id`** _(string)_
      - **`private_key_id`** _(string)_
      - **`private_key`** _(string)_
      - **`client_email`** _(string)_
      - **`client_id`** _(string)_
      - **`auth_uri`** _(string)_
      - **`token_uri`** _(string)_
      - **`auth_provider_x509_cert_url`** _(string)_
      - **`client_x509_cert_url`** _(string)_
      - **`universe_domain`** _(string)_
  - **S3**
    - **`access_key_id`** _(string)_
    - **`secret_access_key`** _(string)_
      Secret access key. Treat as a secret.
    - **`region`** _(string)_
    - **`bucket`** _(string)_
    - **`base_url`** _(string)_
      Optional override for non-AWS S3 endpoints (e.g. R2, MinIO).
  - **Qdrant**
    - **`base_url`** _(string)_
    - **`api_key`** _(string)_
      Qdrant API key. Treat as a secret.
    - **`port`** _(integer)_
    - **`collection`** _(string)_
- **`config_secret`** _(string)_
  Optional secret value for sensitive credentials.
- **`environment_id`** _(string)_
  The environment that owns this datastore. If omitted, defaults to the user's first environment; required when the user has multiple environments.
- **`validation_methods`** _(array<string>)_
  Optional list of integration methods (e.g. `unified_api/resource/method`) used to validate the datastore configuration before persisting.

## Response body

- **`id`** _(string)_
  The unique ID of the datastore.
- **`type`** _(string)_
  The datastore's backend type. Determines the shape of `config`.
  Allowed: `mongo_data_api`, `google_cloud_storage`, `s3`, `qdrant`
- **`label`** _(string)_
  A friendly label for identifying this datastore.
- **`config`** _(object)_
  Config object for the datastore connection (minus sensitive fields). The shape depends on `type`.
  _One of:_
  - **Mongo Data Api**
    - **`data_source`** _(string)_
      Name of the Atlas cluster (the Data API "data source").
    - **`database`** _(string)_
    - **`api_url`** _(string)_
      Base URL of your Atlas Data API endpoint.
    - **`api_key`** _(string)_
      Atlas Data API key. Treat as a secret.
  - **Google Cloud Storage**
    - **`bucket`** _(string)_
    - **`credentials`** _(object, required)_
      Service-account JSON used to authenticate against Google Cloud Storage.
      - **`type`** _(string)_
      - **`project_id`** _(string)_
      - **`private_key_id`** _(string)_
      - **`private_key`** _(string)_
      - **`client_email`** _(string)_
      - **`client_id`** _(string)_
      - **`auth_uri`** _(string)_
      - **`token_uri`** _(string)_
      - **`auth_provider_x509_cert_url`** _(string)_
      - **`client_x509_cert_url`** _(string)_
      - **`universe_domain`** _(string)_
  - **S3**
    - **`access_key_id`** _(string)_
    - **`secret_access_key`** _(string)_
      Secret access key. Treat as a secret.
    - **`region`** _(string)_
    - **`bucket`** _(string)_
    - **`base_url`** _(string)_
      Optional override for non-AWS S3 endpoints (e.g. R2, MinIO).
  - **Qdrant**
    - **`base_url`** _(string)_
    - **`api_key`** _(string)_
      Qdrant API key. Treat as a secret.
    - **`port`** _(integer)_
    - **`collection`** _(string)_
- **`environment_id`** _(string)_
  The environment to which this datastore belongs.
- **`created_at`** _(string)_
  Timestamp when the datastore record was created.
- **`updated_at`** _(string)_
  Timestamp when the datastore record was last updated.

## Code examples

### curl

```bash
curl -X POST 'https://api.truto.one/datastore' \
  -H 'Authorization: Bearer <your_api_token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "id": "your_id",
  "type": "mongo_data_api",
  "label": "your_label",
  "config_secret": "your_config_secret",
  "environment_id": "your_environment_id",
  "validation_methods": []
}'
```

### JavaScript

```javascript
const body = {
  "id": "your_id",
  "type": "mongo_data_api",
  "label": "your_label",
  "config_secret": "your_config_secret",
  "environment_id": "your_environment_id",
  "validation_methods": []
};

const response = await fetch('https://api.truto.one/datastore', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <your_api_token>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(body),
});

const data = await response.json();
console.log(data);
```

### Python

```python
import requests

url = "https://api.truto.one/datastore"
headers = {
    "Authorization": "Bearer <your_api_token>",
    "Content-Type": "application/json",
}
params = {
}
payload = {
    "id": "your_id",
    "type": "mongo_data_api",
    "label": "your_label",
    "config_secret": "your_config_secret",
    "environment_id": "your_environment_id",
    "validation_methods": []
}

response = requests.post(url, headers=headers, params=params, json=payload)
print(response.json())
```

### Truto TS SDK

```typescript
import Truto from '@truto/truto-ts-sdk';

const truto = new Truto({
  token: '<your_api_token>',
});

const body = {
  "id": "your_id",
  "type": "mongo_data_api",
  "label": "your_label",
  "config_secret": "your_config_secret",
  "environment_id": "your_environment_id",
  "validation_methods": []
};

const result = await truto.datastore.create(body);

console.log(result);
```

### Truto Python SDK

```python
import asyncio
from truto_python_sdk import TrutoApi

truto_api = TrutoApi(token="<your_api_token>")

async def main():
    body = {
        "id": "your_id",
        "type": "mongo_data_api",
        "label": "your_label",
        "config_secret": "your_config_secret",
        "environment_id": "your_environment_id",
        "validation_methods": []
    }

    result = await truto_api.datastores.create(body)
    print(result)

asyncio.run(main())
```
