> ## Documentation Index
> Fetch the complete documentation index at: https://docs.open.cx/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect Creatio

> Create an OAuth application in Creatio, enter credentials in OpenCX, configure optional routing settings, and verify the connection.

export const CreatioFlow = () => {
  const BEAM_COLOR = "#22c55e";
  const renderBeam = ({id, d, duration = 2.8, delay = 0, reverse = false}) => {
    const values = reverse ? {
      x1: "110%;-10%",
      x2: "120%;0%"
    } : {
      x1: "-10%;110%",
      x2: "0%;120%"
    };
    return <g key={id}>
        <path d={d} stroke="currentColor" strokeOpacity="0.18" strokeWidth="1.5" fill="none" strokeLinecap="round" />
        <path d={d} stroke={`url(#${id})`} strokeWidth="2" fill="none" strokeLinecap="round" />
        <defs>
          <linearGradient id={id} gradientUnits="userSpaceOnUse" x1="0" y1="0" x2="0" y2="0">
            <stop offset="0%" stopColor={BEAM_COLOR} stopOpacity="0" />
            <stop offset="45%" stopColor={BEAM_COLOR} stopOpacity="1" />
            <stop offset="55%" stopColor={BEAM_COLOR} stopOpacity="1" />
            <stop offset="100%" stopColor={BEAM_COLOR} stopOpacity="0" />
            <animate attributeName="x1" values={values.x1} dur={`${duration}s`} begin={`${delay}s`} repeatCount="indefinite" />
            <animate attributeName="x2" values={values.x2} dur={`${duration}s`} begin={`${delay}s`} repeatCount="indefinite" />
          </linearGradient>
        </defs>
      </g>;
  };
  const CUST_X = 70, OCX_X = 290, OAUTH_X = 490, SVC_X = 720;
  const MID = 180, R = 40;
  const b1 = `M ${CUST_X + R},${MID} L ${OCX_X - R},${MID}`;
  const b2 = `M ${OCX_X + R},${MID} L ${OAUTH_X - 30},${MID}`;
  const b3 = `M ${OAUTH_X + 30},${MID} C ${OAUTH_X + 80},${MID - 30} ${SVC_X - 70 - 40},${MID - 30} ${SVC_X - 70},${MID - 30}`;
  const b4 = `M ${OAUTH_X + 30},${MID} C ${OAUTH_X + 80},${MID + 30} ${SVC_X - 70 - 40},${MID + 30} ${SVC_X - 70},${MID + 30}`;
  const b3r = `M ${SVC_X - 70},${MID - 30} C ${SVC_X - 70 - 40},${MID - 30} ${OAUTH_X + 80},${MID + 30} ${OAUTH_X + 30},${MID}`;
  return <div className="zendesk-flow not-prose my-8 w-full">
      <div className="zendesk-flow-frame relative w-full overflow-hidden rounded-md border border-black/10 bg-white px-4 py-6 dark:border-white/10 dark:bg-zinc-950">
        <div className="zendesk-flow-grid pointer-events-none absolute inset-0" aria-hidden />
        <svg viewBox="0 0 820 320" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" className="relative z-[1] block w-full text-zinc-500 dark:text-zinc-400" role="img" aria-label="Creatio flow: OpenCX writes Cases and Activities to Creatio's Service module through an OAuth 2.0 auth layer; two-way resolution sync">
          {renderBeam({
    id: "cr-1",
    d: b1,
    duration: 2.4,
    delay: 0
  })}
          {renderBeam({
    id: "cr-2",
    d: b2,
    duration: 2.4,
    delay: 0.3
  })}
          {renderBeam({
    id: "cr-3",
    d: b3,
    duration: 2.6,
    delay: 0.6
  })}
          {renderBeam({
    id: "cr-4",
    d: b4,
    duration: 2.6,
    delay: 1.0
  })}
          {renderBeam({
    id: "cr-3r",
    d: b3r,
    duration: 2.8,
    delay: 2.2,
    reverse: true
  })}

          <g className="fill-zinc-500 dark:fill-zinc-400" style={{
    font: "500 10.5px ui-sans-serif, system-ui, sans-serif"
  }}>
            <text x={(OCX_X + OAUTH_X) / 2} y={MID - 18} textAnchor="middle">auth</text>
            <text x={(OAUTH_X + SVC_X) / 2} y={MID - 50} textAnchor="middle">Cases</text>
            <text x={(OAUTH_X + SVC_X) / 2} y={MID + 62} textAnchor="middle">Activities</text>
          </g>

          {}
          <g>
            <circle cx={CUST_X} cy={MID} r={R} className="fill-white stroke-black/10 dark:fill-zinc-900 dark:stroke-white/10" strokeWidth="1" />
            <g transform={`translate(${CUST_X - 14} ${MID - 10})`} className="fill-none stroke-zinc-700 dark:stroke-zinc-200" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round">
              <rect x="0" y="0" width="28" height="20" rx="2" />
              <path d="M 0,3 L 14,13 L 28,3" />
            </g>
            <text x={CUST_X} y={MID + R + 22} textAnchor="middle" className="fill-zinc-700 dark:fill-zinc-200" style={{
    font: "600 12px ui-sans-serif, system-ui, sans-serif"
  }}>Customer</text>
          </g>

          {}
          <g>
            <circle cx={OCX_X} cy={MID} r={R + 4} className="fill-none" stroke={BEAM_COLOR} strokeOpacity="0.25" strokeWidth="1.5">
              <animate attributeName="r" values={`${R + 2};${R + 12};${R + 2}`} dur="3.6s" repeatCount="indefinite" />
              <animate attributeName="stroke-opacity" values="0.35;0;0.35" dur="3.6s" repeatCount="indefinite" />
            </circle>
            <circle cx={OCX_X} cy={MID} r={R} className="fill-white stroke-black/10 dark:fill-zinc-900 dark:stroke-white/10" strokeWidth="1" />
            <foreignObject x={OCX_X - 30} y={MID - 16} width="60" height="32">
              <div className="flex h-full w-full items-center justify-center">
                <img src="/logo-light.svg" alt="" className="block h-full w-full object-contain dark:hidden" />
                <img src="/logo.svg" alt="" className="hidden h-full w-full object-contain dark:block" />
              </div>
            </foreignObject>
            <text x={OCX_X} y={MID + R + 22} textAnchor="middle" className="fill-zinc-700 dark:fill-zinc-200" style={{
    font: "600 12px ui-sans-serif, system-ui, sans-serif"
  }}>OpenCX</text>
            <text x={OCX_X} y={MID + R + 36} textAnchor="middle" className="fill-zinc-500 dark:fill-zinc-400" style={{
    font: "400 10.5px ui-sans-serif, system-ui, sans-serif"
  }}>AI agent</text>
          </g>

          {}
          <g>
            <ellipse cx={OAUTH_X} cy={MID - 30} rx="30" ry="8" className="fill-white stroke-black/10 dark:fill-zinc-900 dark:stroke-white/10" strokeWidth="1" />
            <path d={`M ${OAUTH_X - 30},${MID - 30} L ${OAUTH_X - 30},${MID + 30}`} className="stroke-black/10 dark:stroke-white/10" strokeWidth="1" />
            <path d={`M ${OAUTH_X + 30},${MID - 30} L ${OAUTH_X + 30},${MID + 30}`} className="stroke-black/10 dark:stroke-white/10" strokeWidth="1" />
            <path d={`M ${OAUTH_X - 30},${MID + 30} A 30 8 0 0 0 ${OAUTH_X + 30},${MID + 30}`} className="fill-white stroke-black/10 dark:fill-zinc-900 dark:stroke-white/10" strokeWidth="1" />
            <text x={OAUTH_X} y={MID - 2} textAnchor="middle" className="fill-zinc-700 dark:fill-zinc-200" style={{
    font: "600 11px ui-sans-serif, system-ui, sans-serif"
  }}>OAuth 2.0</text>
            <text x={OAUTH_X} y={MID + 12} textAnchor="middle" className="fill-zinc-500 dark:fill-zinc-400" style={{
    font: "400 9.5px ui-sans-serif, system-ui, sans-serif"
  }}>token refresh</text>
          </g>

          {}
          <g>
            <rect x={SVC_X - 70} y={MID - 46} width="140" height="32" rx="6" className="fill-white stroke-black/10 dark:fill-zinc-900 dark:stroke-white/10" strokeWidth="1" />
            <text x={SVC_X + 6} y={MID - 26} className="fill-zinc-800 dark:fill-zinc-100" style={{
    font: "700 11px ui-sans-serif, system-ui, sans-serif"
  }}>Cases</text>
            <circle cx={SVC_X - 50} cy={MID - 30} r="8" fill={BEAM_COLOR} fillOpacity="0.2" stroke={BEAM_COLOR} strokeWidth="1" />

            <rect x={SVC_X - 70} y={MID + 14} width="140" height="32" rx="6" className="fill-white stroke-black/10 dark:fill-zinc-900 dark:stroke-white/10" strokeWidth="1" />
            <text x={SVC_X + 6} y={MID + 34} className="fill-zinc-800 dark:fill-zinc-100" style={{
    font: "700 11px ui-sans-serif, system-ui, sans-serif"
  }}>Activities</text>
            <circle cx={SVC_X - 50} cy={MID + 30} r="8" fill={BEAM_COLOR} fillOpacity="0.2" stroke={BEAM_COLOR} strokeWidth="1" />

            <text x={SVC_X} y={MID + R + 22} textAnchor="middle" className="fill-zinc-700 dark:fill-zinc-200" style={{
    font: "600 12px ui-sans-serif, system-ui, sans-serif"
  }}>Creatio Service</text>
            <text x={SVC_X} y={MID + R + 36} textAnchor="middle" className="fill-zinc-500 dark:fill-zinc-400" style={{
    font: "400 10.5px ui-sans-serif, system-ui, sans-serif"
  }}>resolution sync ↕</text>
          </g>
        </svg>
      </div>
    </div>;
};

One-time setup: create an OAuth application in Creatio, enter your credentials in OpenCX, configure optional case routing, and verify.

<CreatioFlow />

<Info>
  Setup takes about 15 minutes. You need admin access on both sides — your Creatio instance and your OpenCX organization.
</Info>

## Before you start

<AccordionGroup>
  <Accordion title="Creatio instance with the Service module" icon="circle-check">
    The integration creates cases in Creatio's Service module. Confirm your instance has it enabled (e.g. `https://yourcompany.creatio.com`).
  </Accordion>

  <Accordion title="Admin access in Creatio" icon="user-shield">
    You need to create an OAuth 2.0 application and confirm API access to the Case entity. Standard agent roles cannot reach these settings.
  </Accordion>

  <Accordion title="Owner or admin in OpenCX" icon="key">
    Required to save integration settings in [Settings → Integrations](https://platform.open.cx/settings/integrations).
  </Accordion>
</AccordionGroup>

## Setup

<Steps>
  <Step title="Create an OAuth 2.0 application in Creatio">
    In your Creatio instance, navigate to **System Designer → OAuth 2.0 integrated applications**.

    1. Click **Add application**.
    2. Set the **Name** to `OpenCX Integration`.
    3. Set the **Grant Type** to `Client Credentials`.
    4. Leave **Redirect URI** blank — not needed for client credentials.
    5. Save. Creatio displays the **Client ID** and **Client Secret**.
    6. **Copy both values immediately.**

    <Warning>
      The client secret is only shown once. If you lose it, you need to regenerate it.
    </Warning>
  </Step>

  <Step title="Open Creatio settings in OpenCX">
    In your [OpenCX dashboard](https://platform.open.cx/settings/integrations), go to **Settings → Integrations** and select **Creatio**.
  </Step>

  <Step title="Enter your credentials">
    | Field             | Value                                                                                       |
    | ----------------- | ------------------------------------------------------------------------------------------- |
    | **Instance URL**  | Your Creatio URL (e.g. `https://yourcompany.creatio.com`). Do not include a trailing slash. |
    | **Client ID**     | From the OAuth application you just created.                                                |
    | **Client Secret** | From the OAuth application you just created.                                                |
  </Step>

  <Step title="Configure optional settings">
    These are optional but recommended for teams that want automated case routing:

    | Field                           | What it does                                                                                            |
    | ------------------------------- | ------------------------------------------------------------------------------------------------------- |
    | **Default Case Owner ID**       | Creatio Contact GUID. Cases are assigned to this person on creation.                                    |
    | **Default Case Group ID**       | Creatio Group GUID. Cases are assigned to this group for team-based routing.                            |
    | **Resolved Status ID**          | Creatio CaseStatus GUID used when OpenCX resolves a conversation. Required for two-way resolution sync. |
    | **Create case only on handoff** | When enabled, cases are only created when the AI escalates — not on every conversation.                 |

    <Tip>
      To find GUIDs, use Creatio's built-in lookup pages or query the relevant entity. For example, case statuses are at `https://yourcompany.creatio.com/0/odata/CaseStatus`.
    </Tip>
  </Step>

  <Step title="Verify and save">
    Click **Test & Save**. OpenCX authenticates with Creatio using your credentials. If the test passes, the connection is active.

    If it fails, jump to [Troubleshooting](/integrations/creatio/troubleshooting).
  </Step>
</Steps>

## Rotating credentials

Regenerating the OAuth client secret in Creatio invalidates the old one immediately. To rotate:

1. Generate a new client secret in Creatio's OAuth application settings.
2. Update the secret in [Settings → Integrations](https://platform.open.cx/settings/integrations) → Creatio.
3. Click **Test & Save** to confirm the new credentials work.

## Disconnecting

In OpenCX, open the Creatio integration and click **Disconnect**. Cases created while the integration was active remain untouched in Creatio.

***

## Related Documentation

<CardGroup cols={2}>
  <Card title="Case Sync" icon="arrows-rotate" href="/integrations/creatio/case-sync">
    How cases are created, what syncs, and how to set up two-way webhooks.
  </Card>

  <Card title="AI Fields" icon="wand-magic-sparkles" href="/integrations/creatio/ai-fields">
    Auto-fill case fields from conversation context.
  </Card>

  <Card title="Creatio overview" icon="grid-2" href="/integrations/creatio/overview">
    Capabilities, supported channels, and observability.
  </Card>

  <Card title="Troubleshooting" icon="wrench" href="/integrations/creatio/troubleshooting">
    Credential errors, cases not creating, sync failures.
  </Card>
</CardGroup>
