---
title: "Api Create Integration"
method: POST
path: "/dashboard/api/integrations"
tags: ["integrations"]
---

# Api Create Integration

`POST /dashboard/api/integrations`

## Request

- Base URL: `https://mcp.sentinelx.app` (the document declares no server; this is the origin it was published from)
- URL: `https://mcp.sentinelx.app/dashboard/api/integrations`
- Auth: none declared

Create or replace one of the calling user's integrations.

Idempotent on (user_id, name) — re-posting with the same name
overwrites the previous secret. That's intentional: it's how a
user rotates a credential without needing a separate endpoint.

## Cookies

- `sentinelx_dash_session` string, nullable

## Request body

- CreateIntegrationRequest: Body for POST /dashboard/api/integrations. `secret_value` is the only place plaintext credentials enter the system. It is consumed immediately by storage.set_integration, encrypted with Fernet, and never persisted in plaintext nor returned in any response.
  - `name` string, required: Short user-chosen label, e.g. 'personal-cf'. Letters, digits, underscore and hyphen only; must start with an alphanumeric.
  - `provider` 'cloudflare' | 'telegram' | 'resend' | 'compute', required: Which third-party service this credential is for.
  - `secret_value` string, required: The plaintext credential (API token, bot token, etc.). Sent encrypted-at-rest immediately; never logged.
  - `metadata` object: Non-secret hints to the playbook layer, e.g. {'zone': 'pensa.ar'} for Cloudflare. Must not contain secret data — anything in here is returned by list.

## Response `201`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/sentinelx/apis/sentinelx-hub.md) · [All operations](https://skmtc.dev/sentinelx/apis/sentinelx-hub/llms.txt) · [OpenAPI document](https://skmtc.dev/sentinelx/apis/sentinelx-hub/revisions/d1f84924795e?raw)
