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

# IT Contact

An IT contact is a member of an [organization](https://workos.com/docs/reference/organization)'s IT team responsible for configuring Single Sign-On or Directory Sync. IT contacts can be [invited](https://workos.com/docs/reference/organization/it-contact/invite) to configure these features through the [Admin Portal](https://workos.com/docs/admin-portal), and receive critical alerts and error notifications directly from WorkOS. WorkOS emails the contact a setup link directly, so the link never passes through your application.

An organization can have at most one active Admin Portal invitation at a time, and invitations can be [revoked](https://workos.com/docs/reference/organization/it-contact/revoke) at any time.

:::code-group{title="Example IT Contact"}

```json language="curl"
{
  "object": "it_contact",
  "id": "it_contact_01HXYZ123456789ABCDEFGHIJ",
  "email": "it-contact@example.com",
  "created_at": "2026-01-15T12:00:00.000Z",
  "updated_at": "2026-01-15T12:00:00.000Z"
}
```

:::

## Create an IT contact

Add an IT contact to an organization. No Admin Portal invitation is sent, though the contact is notified if the organization has a connection certificate nearing expiry.

:::code-group

```bash language="curl" title="Request" tab="1"
curl --request POST \
  --url "https://api.workos.com/organizations/org_01EHWNCE74X7JSDV0X3SZ3KJNY/it_contacts" \
  --header "Authorization: Bearer sk_example_123456789" \
  --header "Content-Type: application/json" \
  -d @- <<'BODY'
    {
        "email": "it-contact@example.com"
    }
BODY
```

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

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

WorkOS.client.organizations_it_contacts.create_organization_it_contact(
  organization_id: "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
  email: "it-contact@example.com"
)
```

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

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

client.organizations_it_contacts.create_organization_it_contact(
    organization_id="org_01EHWNCE74X7JSDV0X3SZ3KJNY", email="it-contact@example.com"
)
```

```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.OrganizationsItContacts().Create(context.Background(), "org_01EHWNCE74X7JSDV0X3SZ3KJNY", &workos.OrganizationsItContactsCreateParams{
		Email: "it-contact@example.com",
	})
	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
    ->organizationsItContacts()
    ->createOrganizationItContact(
        organizationId: "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
        email: "it-contact@example.com",
    );
```

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

WorkOS workos = new WorkOS("sk_example_123456789");

CreateOrganizationItContactOptions options =
    CreateOrganizationItContactOptions.builder().email("it-contact@example.com").build();

workos.organizationsItContacts.createOrganizationItContact(
    "org_01EHWNCE74X7JSDV0X3SZ3KJNY", 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.OrganizationsItContacts.CreateAsync("org_01EHWNCE74X7JSDV0X3SZ3KJNY",
                                                 new OrganizationsItContactsCreateOptions {
                                                     Email = "it-contact@example.com",
                                                 });
```

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

#[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
        .organizations_it_contacts()
        .create_organization_it_contact(
            "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
            CreateOrganizationItContactParams {
                email: "it-contact@example.com".into(),
                ..Default::default()
            }
        )
        .await?;

    Ok(())
}
```

```json language="json" title="Response" tab="2"
{
  "object": "it_contact",
  "id": "it_contact_01HXYZ123456789ABCDEFGHIJ",
  "email": "it-contact@example.com",
  "created_at": "2026-01-15T12:00:00.000Z",
  "updated_at": "2026-01-15T12:00:00.000Z"
}
```

:::

## Delete an IT contact

Remove an IT contact from an organization and revoke the contact's active setup links.

:::code-group

```bash language="curl" title="Request" tab="1"
curl --request DELETE \
  --url "https://api.workos.com/organizations/org_01EHWNCE74X7JSDV0X3SZ3KJNY/it_contacts/it_contact_01HXYZ123456789ABCDEFGHIJ" \
  --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.organizations_it_contacts.delete_organization_it_contact(
  organization_id: "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
  contact_id: "it_contact_01HXYZ123456789ABCDEFGHIJ"
)
```

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

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

client.organizations_it_contacts.delete_organization_it_contact(
    organization_id="org_01EHWNCE74X7JSDV0X3SZ3KJNY",
    contact_id="it_contact_01HXYZ123456789ABCDEFGHIJ",
)
```

```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.OrganizationsItContacts().Delete(context.Background(), "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "it_contact_01HXYZ123456789ABCDEFGHIJ")
	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
    ->organizationsItContacts()
    ->deleteOrganizationItContact(
        organizationId: "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
        contactId: "it_contact_01HXYZ123456789ABCDEFGHIJ",
    );
```

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

WorkOS workos = new WorkOS("sk_example_123456789");

workos.organizationsItContacts.deleteOrganizationItContact(
    "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "it_contact_01HXYZ123456789ABCDEFGHIJ");
```

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

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

await client.OrganizationsItContacts.DeleteAsync("org_01EHWNCE74X7JSDV0X3SZ3KJNY",
                                                 "it_contact_01HXYZ123456789ABCDEFGHIJ");
```

```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
        .organizations_it_contacts()
        .delete_organization_it_contact(
            "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
            "it_contact_01HXYZ123456789ABCDEFGHIJ"
        )
        .await?;

    Ok(())
}
```

:::

## Invite an IT contact

Create an Admin Portal setup link and email it to the IT contact. An organization can have at most one active invitation.

:::code-group

```bash language="curl" title="Request" tab="1"
curl --request POST \
  --url "https://api.workos.com/organizations/org_01EHWNCE74X7JSDV0X3SZ3KJNY/it_contacts/it_contact_01HXYZ123456789ABCDEFGHIJ/invite" \
  --header "Authorization: Bearer sk_example_123456789" \
  --header "Content-Type: application/json" \
  -d @- <<'BODY'
    {
        "intents": [
            "sso",
            "directory_sync"
        ]
    }
BODY
```

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

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

WorkOS.client.organizations_it_contacts.create_it_contact_invite(
  organization_id: "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
  contact_id: "it_contact_01HXYZ123456789ABCDEFGHIJ",
  intents: ["sso", "directory_sync"]
)
```

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

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

client.organizations_it_contacts.create_it_contact_invite(
    organization_id="org_01EHWNCE74X7JSDV0X3SZ3KJNY",
    contact_id="it_contact_01HXYZ123456789ABCDEFGHIJ",
    intents=["sso", "directory_sync"],
)
```

```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.OrganizationsItContacts().CreateItContactInvite(context.Background(), "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "it_contact_01HXYZ123456789ABCDEFGHIJ", &workos.OrganizationsItContactsCreateItContactInviteParams{
		Intents: []any{"sso", "directory_sync"},
	})
	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
    ->organizationsItContacts()
    ->createItContactInvite(
        organizationId: "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
        contactId: "it_contact_01HXYZ123456789ABCDEFGHIJ",
        intents: ["sso", "directory_sync"],
    );
```

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

WorkOS workos = new WorkOS("sk_example_123456789");

CreateItContactInviteOptions options = CreateItContactInviteOptions.builder()
                                           .intents(List.of("sso", "directory_sync"))
                                           .build();

workos.organizationsItContacts.createItContactInvite(
    "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "it_contact_01HXYZ123456789ABCDEFGHIJ", 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.OrganizationsItContacts.CreateItContactInviteAsync(
    "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "it_contact_01HXYZ123456789ABCDEFGHIJ",
    new OrganizationsItContactsCreateItContactInviteOptions {
        Intents = new[] { "sso", "directory_sync" },
    });
```

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

#[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
        .organizations_it_contacts()
        .create_it_contact_invite(
            "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
            "it_contact_01HXYZ123456789ABCDEFGHIJ",
            CreateItContactInviteParams {
                intents: vec!["sso".into(), "directory_sync".into()],
                ..Default::default()
            }
        )
        .await?;

    Ok(())
}
```

:::

## List IT contacts

Get the IT contacts for an organization.

:::code-group

```bash language="curl" title="Request" tab="1"
curl "https://api.workos.com/organizations/org_01EHWNCE74X7JSDV0X3SZ3KJNY/it_contacts" \
  --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.organizations_it_contacts.list_organization_it_contacts(organization_id: "org_01EHWNCE74X7JSDV0X3SZ3KJNY")
```

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

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

client.organizations_it_contacts.list_organization_it_contacts(
    organization_id="org_01EHWNCE74X7JSDV0X3SZ3KJNY"
)
```

```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.OrganizationsItContacts().List(context.Background(), "org_01EHWNCE74X7JSDV0X3SZ3KJNY")
	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
    ->organizationsItContacts()
    ->listOrganizationItContacts(
        organizationId: "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
    );
```

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

WorkOS workos = new WorkOS("sk_example_123456789");

workos.organizationsItContacts.listOrganizationItContacts(
    "org_01EHWNCE74X7JSDV0X3SZ3KJNY");
```

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

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

await client.OrganizationsItContacts.ListAsync("org_01EHWNCE74X7JSDV0X3SZ3KJNY");
```

```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
        .organizations_it_contacts()
        .list_organization_it_contacts("org_01EHWNCE74X7JSDV0X3SZ3KJNY")
        .await?;

    Ok(())
}
```

```json language="json" title="Response" tab="2"
{
  "object": "list",
  "data": [
    {
      "object": "it_contact",
      "id": "it_contact_01HXYZ123456789ABCDEFGHIJ",
      "email": "it-contact@example.com",
      "created_at": "2026-01-15T12:00:00.000Z",
      "updated_at": "2026-01-15T12:00:00.000Z"
    }
  ],
  "list_metadata": {
    "before": "it_contact_01HXYZ123456789ABCDEFGHIJ",
    "after": "it_contact_01HXYZ987654321KJIHGFEDCBA"
  }
}
```

:::

## Revoke an IT contact's invitation

Revoke the organization's active Admin Portal invitation.

:::code-group

```bash language="curl" title="Request" tab="1"
curl --request POST \
  --url "https://api.workos.com/organizations/org_01EHWNCE74X7JSDV0X3SZ3KJNY/it_contacts/it_contact_01HXYZ123456789ABCDEFGHIJ/revoke" \
  --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.organizations_it_contacts.revoke_it_contact(
  organization_id: "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
  contact_id: "it_contact_01HXYZ123456789ABCDEFGHIJ"
)
```

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

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

client.organizations_it_contacts.revoke_it_contact(
    organization_id="org_01EHWNCE74X7JSDV0X3SZ3KJNY",
    contact_id="it_contact_01HXYZ123456789ABCDEFGHIJ",
)
```

```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.OrganizationsItContacts().RevokeItContact(context.Background(), "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "it_contact_01HXYZ123456789ABCDEFGHIJ")
	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
    ->organizationsItContacts()
    ->revokeItContact(
        organizationId: "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
        contactId: "it_contact_01HXYZ123456789ABCDEFGHIJ",
    );
```

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

WorkOS workos = new WorkOS("sk_example_123456789");

workos.organizationsItContacts.revokeItContact(
    "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "it_contact_01HXYZ123456789ABCDEFGHIJ");
```

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

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

await client.OrganizationsItContacts.RevokeItContactAsync("org_01EHWNCE74X7JSDV0X3SZ3KJNY",
                                                          "it_contact_01HXYZ123456789ABCDEFGHIJ");
```

```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
        .organizations_it_contacts()
        .revoke_it_contact(
            "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
            "it_contact_01HXYZ123456789ABCDEFGHIJ"
        )
        .await?;

    Ok(())
}
```

:::

### it_contact

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | "it_contact" | Yes | The IT Contact object. |
| `id` | string | Yes | The unique ID of the IT Contact. |
| `email` | string | Yes | The email address of the IT Contact. |
| `created_at` | string | Yes | An ISO 8601 timestamp. |
| `updated_at` | string | Yes | An ISO 8601 timestamp. |

### POST /organizations/{organization_id}/it_contacts

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `email` | string | Yes | The email address of the IT contact. |

#### Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `organization_id` | string | Yes | The ID of the organization. |

#### Returns

| Field | Type | Description |
| --- | --- | --- |
| `it_contact` | object | The IT Contact object. |

### DELETE /organizations/{organization_id}/it_contacts/{contact_id}

#### Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `organization_id` | string | Yes | The ID of the organization. |
| `contact_id` | string | Yes | The ID of the IT contact. |

#### Returns

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

### POST /organizations/{organization_id}/it_contacts/{contact_id}/invite

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `intents` | ("sso" \| "directory_sync" \| "log_streams" \| "domain_verification" \| "bring_your_own_key")[] | Yes | The Admin Portal features that the IT contact can configure. |

#### Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `organization_id` | string | Yes | The ID of the organization. |
| `contact_id` | string | Yes | The ID of the IT contact. |

#### Returns

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

### GET /organizations/{organization_id}/it_contacts

#### Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `organization_id` | string | Yes | The ID of the organization. |

### POST /organizations/{organization_id}/it_contacts/{contact_id}/revoke

#### Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `organization_id` | string | Yes | The ID of the organization. |
| `contact_id` | string | Yes | The ID of the IT contact. |

#### Returns

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