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

# Importing from Opsgenie

> Bring your Opsgenie teams, schedules and escalation policies into WHAWIT with an API key — what comes across, what does not, and what to check afterwards

Atlassian is retiring Opsgenie. Sales ended on 4 June 2025, **support ends on
5 April 2027**, and Atlassian deletes unmigrated data on that date. There is no
official portable export, so the REST API is the only supported way to get your
configuration out — and it keeps working right up until support ends.

WHAWIT reads it for you. In **On-Call Configuration**, choose **Import from
Opsgenie**: paste an API key, review exactly what will be created, apply.

<Note>
  The import only ever **reads** from Opsgenie. Nothing in your Opsgenie account
  is modified or deleted, and your existing rotations keep paging while you
  evaluate the result.
</Note>

## Before you start

<AccordionGroup>
  <Accordion title="An Opsgenie API key with the right permissions">
    In Opsgenie, go to **Settings → API key management → Add new API key** and
    grant it **Read** and **Configuration Access**.

    Use an API-key-management key, not an integration key. A key that belongs to
    a single team only sees that team's data, so the import would silently come
    back with a fraction of your account.
  </Accordion>

  <Accordion title="A second key, only if you also want incident sync">
    Opsgenie splits its API in two, and one key cannot do both halves. The
    API-key-management key above reads your configuration; **creating,
    acknowledging and closing alerts is blocked for that kind of key**. If you
    want WHAWIT incidents to keep flowing into Opsgenie while you cut over, add
    an **API integration key** from **Settings → Integrations → API** in the
    **API Integration Key** field — on the Opsgenie card under Integrations, or
    on the connect step of the wizard when you save the connection.

    Skip it if you are migrating off Opsgenie and do not need alerts to keep
    arriving there. The import does not use it.
  </Accordion>

  <Accordion title="Your Opsgenie region">
    Accounts live on either `api.opsgenie.com` (US) or `api.eu.opsgenie.com`
    (EU). A key is only valid on its own region — if the connect step reports
    that the key was rejected and you are certain it is correct, try the other
    region.
  </Accordion>

  <Accordion title="Permission to configure on-call in WHAWIT">
    You need the **on-call configure** capability, the same one that lets you
    create a schedule by hand. Owners and admins have it.
  </Accordion>

  <Accordion title="Somewhere to put it">
    The import creates entities in the organization and project you currently
    have selected. Switch to the right one before you start.
  </Accordion>
</AccordionGroup>

## Running the import

<Steps>
  <Step title="Connect">
    Paste the API key and pick the region. Optionally tick **save this
    connection as an Opsgenie integration** — useful if you also want incident
    sync while you run both systems in parallel.

    If you leave it unticked, the key is used for this read and then discarded.
    It is never written to the database, and it never appears in a log line.
    When you do save it, it goes to Google Secret Manager like every other
    credential.
  </Step>

  <Step title="Preview">
    WHAWIT reads your users, teams, schedules and escalation policies, maps them,
    and shows you the result *before anything is written*. Nothing has been
    created at this point — not an entity, not an invitation, not a secret.

    Untick anything you do not want. The counts at the top follow your
    selection, so you can see exactly what a partial import would produce.
  </Step>

  <Step title="Import">
    People are invited first, then teams, then schedules, then escalation
    policies — in that order, because a rotation cannot reference someone who is
    not yet a member of your organization.

    The final screen reports what was created, any invitations that failed, and
    everything that could not be migrated automatically.
  </Step>
</Steps>

## What comes across

| Opsgenie          | WHAWIT              | How it maps                                                                                                                                                                                                  |
| ----------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| User              | Organization member | Matched by email. Opsgenie usernames *are* email addresses, so there is no identity mapping to maintain.                                                                                                     |
| Team              | Escalation team     | Members and their roles are preserved.                                                                                                                                                                       |
| Schedule          | Schedule            | The timezone carries over unchanged — both sides use IANA names.                                                                                                                                             |
| Rotation          | Layer               | One layer per rotation, in order, with the participants as the rotation roster.                                                                                                                              |
| Rotation type     | Rotation            | Daily and weekly rotations of length 1 stay daily and weekly. Everything else becomes a custom rotation with an explicit shift length: hourly × N → N hours, daily × N → 24N hours, weekly × N → 168N hours. |
| Rotation start    | Anchor and handoff  | The start date becomes the layer anchor, and its time of day — read in the schedule's own timezone — becomes the handoff time.                                                                               |
| Time restriction  | Restriction         | Days of week plus a start and end time. Overnight windows are kept as one restriction that crosses midnight.                                                                                                 |
| Override          | Override            | Kept with its dates, and scoped to a single layer when the Opsgenie override was scoped to one rotation.                                                                                                     |
| Escalation policy | Escalation policy   | An ordered chain of levels.                                                                                                                                                                                  |
| Escalation rule   | Escalation level    | Rules are ordered by delay, and rules that share a delay merge into one level that pages all of them at once.                                                                                                |
| Rule delay        | Level timeout       | Opsgenie delays are absolute (*"at 10 minutes"*); WHAWIT timeouts are per level (*"wait 10 minutes, then escalate"*). Each level gets the gap to the next one. The last level gets 15 minutes.               |
| Rule recipient    | Level target        | A user becomes an email target, a schedule or team becomes a target pointing at the imported schedule or escalation team.                                                                                    |
| Repeat if no ack  | Repeat              | The repeat count carries over.                                                                                                                                                                               |

<Warning>
  **Every imported escalation level notifies by email.** Opsgenie's per-user
  notification rules do not have a WHAWIT equivalent, so nothing decides for you
  that a level should also send SMS or WhatsApp. Add the channels you need per
  level after importing — and fill in phone numbers first, because a user
  without one is skipped for those channels.
</Warning>

### Nothing you already have is touched

The import is strictly additive. If an incoming team, schedule or policy has the
same name as one you already have, WHAWIT creates it as `Name (OpsGenie)` rather
than overwriting yours, and tells you it did. No pre-existing entity is ever
modified or deleted.

## What does not come across

Every import ends with a report naming these explicitly, so nothing disappears
quietly:

<AccordionGroup>
  <Accordion title="Alert-source integrations">
    Your Datadog, Sentry, CloudWatch and similar integrations are listed but not
    recreated. **Reconnect each source natively in WHAWIT** — connecting the
    source directly is what gives you the investigation, which an alert
    forwarded from Opsgenie cannot.
  </Accordion>

  <Accordion title="Team routing rules">
    Listed with their criteria so you can see what you had. Route with
    escalation policies and per-agent defaults instead.
  </Accordion>

  <Accordion title="Notification rules and alert policies">
    Per-user notification rules, alert policies and notification policies have
    no direct equivalent. See the warning above about channels.
  </Accordion>

  <Accordion title="Heartbeats">
    Not migrated. WHAWIT covers this ground with its on-call agents.
  </Accordion>

  <Accordion title="Alert history">
    Not migrated. This is deliberate, and every tool in this space does the
    same: history belongs to the system that produced it. Keep Opsgenie
    reachable until you no longer need to look back.
  </Accordion>
</AccordionGroup>

## After the import

Run through this before you turn Opsgenie off. The first two are where
migrations actually go wrong.

<AccordionGroup>
  <Accordion title="Preview every imported policy">
    Preview resolves a policy as if an incident had just fired and shows who
    would really be paged at each level, with the imported rotations and
    overrides applied. It is the cheapest way to find a coverage gap, and it
    takes seconds per policy.
  </Accordion>

  <Accordion title="Look at a full week of shifts">
    Open each imported schedule and look at the shifts it produces across a
    whole week. Restrictions that do not quite meet leave a window where the
    schedule resolves to nobody — visible instantly here, invisible until 3am
    otherwise.
  </Accordion>

  <Accordion title="Check who was invited">
    Opsgenie users who were not already members are invited by email. They
    appear in the directory as invited, and paging works once they accept. Any
    invitation that failed is named on the final screen — those people are left
    out of the imported rosters rather than silently referenced.
  </Accordion>

  <Accordion title="Add channels and phone numbers">
    Imported levels notify by email only. Add SMS, WhatsApp, Slack or Teams per
    level where you need them, and make sure the people on those levels have a
    phone number on their profile.
  </Accordion>

  <Accordion title="Mark an organization default policy">
    One policy should be the organization default. It catches any incident
    raised by something you have not explicitly configured.
  </Accordion>
</AccordionGroup>

## Troubleshooting

<AccordionGroup>
  <Accordion title="“Opsgenie rejected the API key”">
    The key exists but does not have what the import needs. Recreate it under
    **Settings → API key management** with **Read** and **Configuration
    Access**. If the key is definitely right, check the region — an EU key fails
    against the US endpoint and vice versa.
  </Accordion>

  <Accordion title="Fewer teams or schedules than expected">
    You are almost certainly using a team-scoped integration key, which can only
    see its own team. Use an account-level API-key-management key.
  </Accordion>

  <Accordion title="A schedule imported with no rotations">
    Its rotations had no participants WHAWIT could resolve — usually because
    they pointed at an Opsgenie escalation rather than at users or a team. The
    preview names each one. Add the roster by hand after importing.
  </Accordion>

  <Accordion title="“This level will page nobody”">
    You excluded a schedule or team that an included policy escalates to.
    Include it, or fix that level after importing — the preview flags it before
    you commit, precisely so it is not discovered during an incident.
  </Accordion>

  <Accordion title="The import is slow on a large account">
    Opsgenie rate-limits configuration endpoints, and WHAWIT backs off and
    retries rather than failing your import. A big account takes a little
    longer; it does not need babysitting.
  </Accordion>
</AccordionGroup>

## Running both systems in parallel

You do not have to cut over on import day. WHAWIT can ingest Opsgenie alerts
while your Opsgenie rotations stay authoritative, which lets you compare
WHAWIT's investigation against what your team found on real incidents. Import
the rotations whenever you are ready, verify them with Preview, then turn off
the old escalation.

<Note>
  Migrating a large account and want a second pair of eyes on it? Email
  [sales@whawit.ai](mailto:sales@whawit.ai). If something is not resolving the
  way you expect after importing, [support@whawit.ai](mailto:support@whawit.ai).
</Note>

## Next

<CardGroup cols={2}>
  <Card title="Schedules and rotations" icon="calendar" href="/on-call/schedules">
    Adjusting the layers and restrictions that came across.
  </Card>

  <Card title="Escalation policies" icon="arrow-up-right-dots" href="/on-call/escalation-policies">
    Previewing the imported chains, and adding channels per level.
  </Card>
</CardGroup>
