<!-- llms.txt: https://workos.com/llms.txt -->

# Data integration

A data integration represents a configured connection to a third-party [provider](https://workos.com/docs/reference/pipes/provider) through Pipes. Data integrations define the OAuth credentials, scopes, and settings used when users connect their accounts.

For built-in providers, create a data integration by referencing the provider's slug. For custom providers, supply a `custom_provider` definition with the OAuth endpoints and configuration.

:::code-group{title="Example data integration"}

```json language="json"
{
  "object": "data_integration",
  "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT",
  "slug": "github",
  "integration_type": "github",
  "description": "Production GitHub app",
  "enabled": true,
  "state": "valid",
  "scopes": [
    "repo",
    "read:org"
  ],
  "redirect_uri": "https://api.workos.com/data-integrations/github/dik_01EHZNVPK3SFK441A1RGBFSHRT/callback",
  "credentials": {
    "type": "custom",
    "client_id": "Iv1.abc123",
    "redacted_client_secret": "f456"
  },
  "custom_provider": null,
  "created_at": "2024-01-15T10:30:00.000Z",
  "updated_at": "2024-01-15T10:30:00.000Z"
}
```

:::

## Endpoints

- [Create a data integration](https://workos.com/docs/reference/pipes/data-integration/create)
- [List data integrations](https://workos.com/docs/reference/pipes/data-integration/list)
- [Get a data integration](https://workos.com/docs/reference/pipes/data-integration/get)
- [Update a data integration](https://workos.com/docs/reference/pipes/data-integration/update)
- [Delete a data integration](https://workos.com/docs/reference/pipes/data-integration/delete)

## Create a data integration

Creates a [data integration](https://workos.com/docs/reference/pipes/data-integration) for a provider. Set `credentials.type` to `custom` to use your own OAuth app credentials, or `organization` to have each organization supply its own.

For a built-in provider, pass its slug as `provider`. For a custom provider, pass a new slug plus a `custom_provider` definition.

:::code-group

```bash language="curl" title="Request" tab="1"
curl --request POST \
  --url "https://api.workos.com/data-integrations" \
  --header "Authorization: Bearer sk_example_123456789" \
  --header "Content-Type: application/json" \
  -d @- <<'BODY'
    {
        "provider": "github"
    }
BODY
```

```rb language="ruby" title="Request" tab="1"
require "workos"

WorkOS.configure do |config|
  config.api_key = "sk_example_123456789"
end

WorkOS.client.pipes.create_data_integration(provider: "github")
```

```py language="python" title="Request" tab="1"
from workos import WorkOSClient

client = WorkOSClient(api_key="sk_example_123456789", client_id="client_123456789")

client.pipes.create_data_integration(provider="github")
```

```go language="go" title="Request" tab="1"
package main

import (
	"context"

	"github.com/workos/workos-go/v10"
)

func main() {
	client := workos.NewClient("sk_example_123456789")

	_, err := client.Pipes().CreateDataIntegration(context.Background(), &workos.PipesCreateDataIntegrationParams{
		Provider: "github",
	})
	if err != nil {
		panic(err)
	}
}
```

```php language="php" title="Request" tab="1"
<?php

use WorkOS\WorkOS;

$workos = new WorkOS(
    apiKey: "sk_example_123456789",
    clientId: "client_123456789",
);

$workos->pipes()->createDataIntegration(provider: "github");
```

```java language="java" title="Request" tab="1"
import com.workos.WorkOS;
import com.workos.pipes.PipesApi.CreateDataIntegrationOptions;

WorkOS workos = new WorkOS("sk_example_123456789");

CreateDataIntegrationOptions options =
    CreateDataIntegrationOptions.builder().provider("github").build();

workos.pipes.createDataIntegration(options);
```

```cs language="dotnet" title="Request" tab="1"
using WorkOS;

var client = new WorkOSClient(new WorkOSOptions {
    ApiKey = "sk_example_123456789",
    ClientId = "client_123456789",
});

await client.Pipes.CreateDataIntegrationAsync(new PipesCreateDataIntegrationOptions {
    Provider = "github",
});
```

```rust language="rust" title="Request" tab="1"
use workos::Client;
use workos::pipes::CreateDataIntegrationParams;

#[tokio::main]
async fn main() -> Result<(), workos::Error> {
    let client = Client::builder()
        .api_key("sk_example_123456789")
        .client_id("client_123456789")
        .build();

    let _result = client
        .pipes()
        .create_data_integration(
            CreateDataIntegrationParams {
                provider: "github".into(),
                ..Default::default()
            }
        )
        .await?;

    Ok(())
}
```

```json language="json" title="Response" tab="2"
{
  "object": "data_integration",
  "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT",
  "slug": "github",
  "integration_type": "github",
  "description": "Production GitHub app",
  "enabled": true,
  "state": "valid",
  "scopes": [
    "repo",
    "read:org"
  ],
  "redirect_uri": "https://api.workos.com/data-integrations/github/dik_01EHZNVPK3SFK441A1RGBFSHRT/callback",
  "auth_methods": [
    "oauth"
  ],
  "credentials": {
    "type": "custom",
    "client_id": "Iv1.abc123",
    "redacted_client_secret": "6789"
  },
  "installation": null,
  "config": {
    "account": "myorg-myaccount"
  },
  "custom_provider": {
    "name": "My OAuth App",
    "authorization_url": "https://provider.example.com/oauth/authorize",
    "token_url": "https://provider.example.com/oauth/token",
    "refresh_token_url": "https://provider.example.com/oauth/token",
    "pkce_enabled": true,
    "request_scope_separator": " ",
    "scopes_required": false,
    "client_secret_required": true,
    "additional_authorization_parameters": {
      "prompt": "consent"
    },
    "token_body_content_type": "application/x-www-form-urlencoded",
    "authenticate_via": "request_body"
  },
  "created_at": "2026-01-15T12:00:00.000Z",
  "updated_at": "2026-01-15T12:00:00.000Z"
}
```

:::

### Error responses

- **404 Not Found**: The provider slug does not match a built-in provider (and no `custom_provider` was supplied).
- **422**: Invalid credentials configuration (e.g., missing `client_id`/`client_secret` for `custom` type, or supplying them for `organization` type).

## Delete a data integration

Deletes a [data integration](https://workos.com/docs/reference/pipes/data-integration) by its provider slug. Returns `204 No Content` on success.

This operation is idempotent — deleting a non-existent integration returns a successful response. Deleting a data integration also removes all associated connected accounts.

:::code-group

```bash language="curl" title="Request" tab="1"
curl --request DELETE \
  --url "https://api.workos.com/data-integrations/github" \
  --header "Authorization: Bearer sk_example_123456789"
```

```rb language="ruby" title="Request" tab="1"
require "workos"

WorkOS.configure do |config|
  config.api_key = "sk_example_123456789"
end

WorkOS.client.pipes.delete_data_integration(slug: "github")
```

```py language="python" title="Request" tab="1"
from workos import WorkOSClient

client = WorkOSClient(api_key="sk_example_123456789", client_id="client_123456789")

client.pipes.delete_data_integration(slug="github")
```

```go language="go" title="Request" tab="1"
package main

import (
	"context"

	"github.com/workos/workos-go/v10"
)

func main() {
	client := workos.NewClient("sk_example_123456789")

	_, err := client.Pipes().DeleteDataIntegration(context.Background(), "github")
	if err != nil {
		panic(err)
	}
}
```

```php language="php" title="Request" tab="1"
<?php

use WorkOS\WorkOS;

$workos = new WorkOS(
    apiKey: "sk_example_123456789",
    clientId: "client_123456789",
);

$workos->pipes()->deleteDataIntegration(slug: "github");
```

```java language="java" title="Request" tab="1"
import com.workos.WorkOS;

WorkOS workos = new WorkOS("sk_example_123456789");

workos.pipes.deleteDataIntegration("github");
```

```cs language="dotnet" title="Request" tab="1"
using WorkOS;

var client = new WorkOSClient(new WorkOSOptions {
    ApiKey = "sk_example_123456789",
    ClientId = "client_123456789",
});

await client.Pipes.DeleteDataIntegrationAsync("github");
```

```rust language="rust" title="Request" tab="1"
use workos::Client;

#[tokio::main]
async fn main() -> Result<(), workos::Error> {
    let client = Client::builder()
        .api_key("sk_example_123456789")
        .client_id("client_123456789")
        .build();

    let _result = client
        .pipes()
        .delete_data_integration("github")
        .await?;

    Ok(())
}
```

:::

## Get a data integration

Retrieves a data integration by its slug.

:::code-group

```bash language="curl" title="Request" tab="1"
curl "https://api.workos.com/data-integrations/github" \
  --header "Authorization: Bearer sk_example_123456789"
```

```rb language="ruby" title="Request" tab="1"
require "workos"

WorkOS.configure do |config|
  config.api_key = "sk_example_123456789"
end

WorkOS.client.pipes.get_data_integration(slug: "github")
```

```py language="python" title="Request" tab="1"
from workos import WorkOSClient

client = WorkOSClient(api_key="sk_example_123456789", client_id="client_123456789")

client.pipes.get_data_integration(slug="github")
```

```go language="go" title="Request" tab="1"
package main

import (
	"context"

	"github.com/workos/workos-go/v10"
)

func main() {
	client := workos.NewClient("sk_example_123456789")

	_, err := client.Pipes().GetDataIntegration(context.Background(), "github")
	if err != nil {
		panic(err)
	}
}
```

```php language="php" title="Request" tab="1"
<?php

use WorkOS\WorkOS;

$workos = new WorkOS(
    apiKey: "sk_example_123456789",
    clientId: "client_123456789",
);

$workos->pipes()->getDataIntegration(slug: "github");
```

```java language="java" title="Request" tab="1"
import com.workos.WorkOS;

WorkOS workos = new WorkOS("sk_example_123456789");

workos.pipes.getDataIntegration("github");
```

```cs language="dotnet" title="Request" tab="1"
using WorkOS;

var client = new WorkOSClient(new WorkOSOptions {
    ApiKey = "sk_example_123456789",
    ClientId = "client_123456789",
});

await client.Pipes.GetDataIntegrationAsync("github");
```

```rust language="rust" title="Request" tab="1"
use workos::Client;

#[tokio::main]
async fn main() -> Result<(), workos::Error> {
    let client = Client::builder()
        .api_key("sk_example_123456789")
        .client_id("client_123456789")
        .build();

    let _result = client
        .pipes()
        .get_data_integration("github")
        .await?;

    Ok(())
}
```

```json language="json" title="Response" tab="2"
{
  "object": "data_integration",
  "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT",
  "slug": "github",
  "integration_type": "github",
  "description": "Production GitHub app",
  "enabled": true,
  "state": "valid",
  "scopes": [
    "repo",
    "read:org"
  ],
  "redirect_uri": "https://api.workos.com/data-integrations/github/dik_01EHZNVPK3SFK441A1RGBFSHRT/callback",
  "auth_methods": [
    "oauth"
  ],
  "credentials": {
    "type": "custom",
    "client_id": "Iv1.abc123",
    "redacted_client_secret": "6789"
  },
  "installation": null,
  "config": {
    "account": "myorg-myaccount"
  },
  "custom_provider": {
    "name": "My OAuth App",
    "authorization_url": "https://provider.example.com/oauth/authorize",
    "token_url": "https://provider.example.com/oauth/token",
    "refresh_token_url": "https://provider.example.com/oauth/token",
    "pkce_enabled": true,
    "request_scope_separator": " ",
    "scopes_required": false,
    "client_secret_required": true,
    "additional_authorization_parameters": {
      "prompt": "consent"
    },
    "token_body_content_type": "application/x-www-form-urlencoded",
    "authenticate_via": "request_body"
  },
  "created_at": "2026-01-15T12:00:00.000Z",
  "updated_at": "2026-01-15T12:00:00.000Z"
}
```

:::

### Error responses

- **404 Not Found**: No data integration exists for the given slug, or the integration uses unsupported credentials.

## List data integrations

Lists the environment's data integrations configured with `custom` or `organization` credentials, including custom providers and API key integrations.

:::code-group

```bash language="curl" title="Request" tab="1"
curl "https://api.workos.com/data-integrations" \
  --header "Authorization: Bearer sk_example_123456789"
```

```rb language="ruby" title="Request" tab="1"
require "workos"

WorkOS.configure do |config|
  config.api_key = "sk_example_123456789"
end

WorkOS.client.pipes.list_data_integrations
```

```py language="python" title="Request" tab="1"
from workos import WorkOSClient

client = WorkOSClient(api_key="sk_example_123456789", client_id="client_123456789")

client.pipes.list_data_integrations()
```

```go language="go" title="Request" tab="1"
package main

import (
	"context"

	"github.com/workos/workos-go/v10"
)

func main() {
	client := workos.NewClient("sk_example_123456789")

	_, err := client.Pipes().ListDataIntegrations(context.Background())
	if err != nil {
		panic(err)
	}
}
```

```php language="php" title="Request" tab="1"
<?php

use WorkOS\WorkOS;

$workos = new WorkOS(
    apiKey: "sk_example_123456789",
    clientId: "client_123456789",
);

$workos->pipes()->listDataIntegrations();
```

```java language="java" title="Request" tab="1"
import com.workos.WorkOS;

WorkOS workos = new WorkOS("sk_example_123456789");

workos.pipes.listDataIntegrations();
```

```cs language="dotnet" title="Request" tab="1"
using WorkOS;

var client = new WorkOSClient(new WorkOSOptions {
    ApiKey = "sk_example_123456789",
    ClientId = "client_123456789",
});

await client.Pipes.ListDataIntegrationsAsync();
```

```rust language="rust" title="Request" tab="1"
use workos::Client;

#[tokio::main]
async fn main() -> Result<(), workos::Error> {
    let client = Client::builder()
        .api_key("sk_example_123456789")
        .client_id("client_123456789")
        .build();

    let _result = client
        .pipes()
        .list_data_integrations()
        .await?;

    Ok(())
}
```

```json language="json" title="Response" tab="2"
{
  "object": "list",
  "data": [
    {
      "object": "data_integration",
      "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT",
      "slug": "github",
      "integration_type": "github",
      "description": "Production GitHub app",
      "enabled": true,
      "state": "valid",
      "scopes": [
        "repo",
        "read:org"
      ],
      "redirect_uri": "https://api.workos.com/data-integrations/github/dik_01EHZNVPK3SFK441A1RGBFSHRT/callback",
      "auth_methods": [
        "oauth"
      ],
      "credentials": {
        "type": "custom",
        "client_id": "Iv1.abc123",
        "redacted_client_secret": "6789"
      },
      "installation": null,
      "config": {
        "account": "myorg-myaccount"
      },
      "custom_provider": {
        "name": "My OAuth App",
        "authorization_url": "https://provider.example.com/oauth/authorize",
        "token_url": "https://provider.example.com/oauth/token",
        "refresh_token_url": "https://provider.example.com/oauth/token",
        "pkce_enabled": true,
        "request_scope_separator": " ",
        "scopes_required": false,
        "client_secret_required": true,
        "additional_authorization_parameters": {
          "prompt": "consent"
        },
        "token_body_content_type": "application/x-www-form-urlencoded",
        "authenticate_via": "request_body"
      },
      "created_at": "2026-01-15T12:00:00.000Z",
      "updated_at": "2026-01-15T12:00:00.000Z"
    }
  ],
  "list_metadata": {
    "before": "data_integration_01HXYZ123456789ABCDEFGHIJ",
    "after": "data_integration_01HXYZ987654321KJIHGFEDCBA"
  }
}
```

:::

## Update a data integration

Updates a [data integration](https://workos.com/docs/reference/pipes/data-integration) by its provider slug. Only the fields you include in the request body are updated; omitted fields are left unchanged.

When `credentials` is provided, the stored client secret is rotated to the new value. The `custom_provider` block is only valid for custom-provider integrations.

:::code-group

```bash language="curl" title="Request" tab="1"
curl --request PUT \
  --url "https://api.workos.com/data-integrations/github" \
  --header "Authorization: Bearer sk_example_123456789" \
  --header "Content-Type: application/json" \
  -d @- <<'BODY'
    {
        "description": "Production GitHub app",
        "enabled": true,
        "scopes": [
            "repo",
            "read:org"
        ],
        "credentials": {
            "type": "custom",
            "client_id": "Iv1.abc123",
            "client_secret": "secret_…"
        },
        "custom_provider": {
            "name": "My OAuth App",
            "authorization_url": "https://provider.example.com/oauth/authorize",
            "token_url": "https://provider.example.com/oauth/token",
            "refresh_token_url": "https://provider.example.com/oauth/token",
            "pkce_enabled": true,
            "request_scope_separator": " ",
            "scopes_required": false,
            "client_secret_required": true,
            "additional_authorization_parameters": {
                "prompt": "consent"
            },
            "token_body_content_type": "application/x-www-form-urlencoded",
            "authenticate_via": "request_body"
        }
    }
BODY
```

```rb language="ruby" title="Request" tab="1"
require "workos"

WorkOS.configure do |config|
  config.api_key = "sk_example_123456789"
end

WorkOS.client.pipes.update_data_integration(slug: "github")
```

```py language="python" title="Request" tab="1"
from workos import WorkOSClient

client = WorkOSClient(api_key="sk_example_123456789", client_id="client_123456789")

client.pipes.update_data_integration(slug="github")
```

```go language="go" title="Request" tab="1"
package main

import (
	"context"

	"github.com/workos/workos-go/v10"
)

func main() {
	client := workos.NewClient("sk_example_123456789")

	_, err := client.Pipes().UpdateDataIntegration(context.Background(), "github")
	if err != nil {
		panic(err)
	}
}
```

```php language="php" title="Request" tab="1"
<?php

use WorkOS\WorkOS;

$workos = new WorkOS(
    apiKey: "sk_example_123456789",
    clientId: "client_123456789",
);

$workos->pipes()->updateDataIntegration(slug: "github");
```

```java language="java" title="Request" tab="1"
import com.workos.WorkOS;

WorkOS workos = new WorkOS("sk_example_123456789");

workos.pipes.updateDataIntegration("github");
```

```cs language="dotnet" title="Request" tab="1"
using WorkOS;

var client = new WorkOSClient(new WorkOSOptions {
    ApiKey = "sk_example_123456789",
    ClientId = "client_123456789",
});

await client.Pipes.UpdateDataIntegrationAsync("github");
```

```rust language="rust" title="Request" tab="1"
use workos::Client;

#[tokio::main]
async fn main() -> Result<(), workos::Error> {
    let client = Client::builder()
        .api_key("sk_example_123456789")
        .client_id("client_123456789")
        .build();

    let _result = client
        .pipes()
        .update_data_integration("github")
        .await?;

    Ok(())
}
```

```json language="json" title="Response" tab="2"
{
  "object": "data_integration",
  "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT",
  "slug": "github",
  "integration_type": "github",
  "description": "Production GitHub app",
  "enabled": true,
  "state": "valid",
  "scopes": [
    "repo",
    "read:org"
  ],
  "redirect_uri": "https://api.workos.com/data-integrations/github/dik_01EHZNVPK3SFK441A1RGBFSHRT/callback",
  "auth_methods": [
    "oauth"
  ],
  "credentials": {
    "type": "custom",
    "client_id": "Iv1.abc123",
    "redacted_client_secret": "6789"
  },
  "installation": null,
  "config": {
    "account": "myorg-myaccount"
  },
  "custom_provider": {
    "name": "My OAuth App",
    "authorization_url": "https://provider.example.com/oauth/authorize",
    "token_url": "https://provider.example.com/oauth/token",
    "refresh_token_url": "https://provider.example.com/oauth/token",
    "pkce_enabled": true,
    "request_scope_separator": " ",
    "scopes_required": false,
    "client_secret_required": true,
    "additional_authorization_parameters": {
      "prompt": "consent"
    },
    "token_body_content_type": "application/x-www-form-urlencoded",
    "authenticate_via": "request_body"
  },
  "created_at": "2026-01-15T12:00:00.000Z",
  "updated_at": "2026-01-15T12:00:00.000Z"
}
```

:::

### Error responses

- **404 Not Found**: No data integration exists for the given slug.
- **422**: Invalid credentials configuration or `custom_provider` supplied for a built-in provider integration.

### data_integration

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | "data_integration" | Yes | Distinguishes the data integration object. |
| `id` | string | Yes | The unique identifier of the data integration. |
| `slug` | string | Yes | The provider slug for this data integration. |
| `integration_type` | string | Yes | The integration type derived from the provider. |
| `description` | string \| null | Yes | An optional description of the data integration. |
| `enabled` | boolean | Yes | Whether the data integration is enabled. |
| `state` | "valid" \| "invalid" \| "requested" | Yes | The state of the data integration: `valid`: The integration is properly configured. `invalid`: The integration is not configured or has an error. `requested`: The integration has been requested but not yet configured. |
| `scopes` | string[] \| null | Yes | The OAuth scopes configured for the data integration. `null` when the provider's configured scopes are used. |
| `redirect_uri` | string | Yes | The OAuth redirect URI to register with the provider when configuring the custom application. |
| `credentials` | object | Yes | The credentials configured for the data integration. |
| `custom_provider` | object \| null | Yes | The OAuth definition when this is a custom provider; `null` for built-in providers. |
| `created_at` | string | Yes | The timestamp when the data integration was created. |
| `updated_at` | string | Yes | The timestamp when the data integration was last updated. |

### POST /data-integrations

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `provider` | string | Yes | The provider to create a data integration for. For a built-in provider, use its slug (e.g., `github`, `slack`). For a custom provider, pass a new slug and supply `custom_provider`. |
| `description` | string | No | An optional description of the data integration. |
| `enabled` | boolean | No | Whether the data integration is enabled. Defaults to `false`. |
| `scopes` | string[] | No | The OAuth scopes to request for the data integration. Defaults to the provider's configured scopes when omitted. |
| `auth_methods` | ("oauth" \| "api_key" \| "client_credentials")[] | No | How accounts authenticate with the provider. Defaults to `["oauth"]`. Use `["api_key"]` to declare an API key integration; `credentials` is then not required and keys are supplied per-tenant (optionally via `api_key` on this request). Use `["client_credentials"]` to declare a client-credentials integration; `credentials` is likewise not required and client credentials are supplied per-tenant. |
| `config` | object | No | Provider-specific config values (e.g. a Snowflake `account`), keyed by the config field. Only fields the built-in provider declares are accepted. |
| `credentials` | object | No | The credentials to configure for the data integration. |
| `api_key` | object | No | An optional API key to install for the first tenant on an `api_key` integration. Omit to declare a keyless integration; tenants can be added later via the per-installation API key path. |
| `custom_provider` | object | No | The OAuth definition for a custom provider. Supply this to define a custom provider; omit it to create an integration for a built-in provider. |

#### Returns

| Field | Type | Description |
| --- | --- | --- |
| `data_integration` | object | Distinguishes the Data Integration object. |

### DELETE /data-integrations/{slug}

#### Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `slug` | string | Yes | The slug identifier of the data integration to delete. |

#### Returns

| Field | Type | Description |
| --- | --- | --- |
| `empty` | empty | Returns an empty response on success. |

### GET /data-integrations/{slug}

#### Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `slug` | string | Yes | The slug identifier of the data integration (e.g., `github`, `slack`). |

#### Returns

| Field | Type | Description |
| --- | --- | --- |
| `data_integration` | object | Distinguishes the Data Integration object. |

### GET /data-integrations

#### Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `before` | string | No | Pagination cursor to receive records before a provided data integration ID. |
| `after` | string | No | Pagination cursor to receive records after a provided data integration ID. |
| `limit` | integer | No | Maximum number of records to return. Accepts values between 1 and 100. Default is 10. |
| `order` | "normal" \| "desc" \| "asc" | No | Sort order for the records. Accepts `asc`, `desc`, or `normal` (descending with reversed cursor semantics). Default is `desc`. |

### PUT /data-integrations/{slug}

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `description` | string | No | An optional description of the data integration. |
| `enabled` | boolean | No | Whether the data integration is enabled. |
| `scopes` | string[] | No | The OAuth scopes to request for the data integration. Pass `null` to reset to the provider's configured scopes. |
| `credentials` | object | No | New credentials for the data integration. When provided, rotates the stored client secret. |
| `api_key` | object | No | An API key to install or rotate for a tenant on an `api_key` integration. Upserts the tenant installation identified by `user_id` (and optional `organization_id`). |
| `custom_provider` | object | No | Updates to a custom provider's OAuth definition. Only valid for custom-provider integrations. Provided fields replace their current value. |

#### Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `slug` | string | Yes | The slug identifier of the data integration to update. |

#### Returns

| Field | Type | Description |
| --- | --- | --- |
| `data_integration` | object | Distinguishes the Data Integration object. |