# Integration methods: reconnect, refresh, resume, revoke

URL: /code/sdk/integration/verbs-reconnect · Id: `page:code/sdk/integration/verbs-reconnect`

> The Integration Verbs reconnect, refresh, resume, revoke as typed SDK methods, with inputs, result, refusals and an example.

Reference for [Integration](/business/nouns/integration), one group of [Integration methods](/code/sdk/integration).

### Integration.reconnect
Reconnect re-approves an Integration in place, keeping its id and cursor, so nothing re-imports. [Verb page](/business/nouns/integration/reconnect?interface=sdk).

```ts
interface IntegrationVerbs {
  reconnect(input: IntegrationReconnectInput, options?: SB.CallOptions): SB.Call<IntegrationReconnectOutput>
}
```

Emits [`Integration.reconnected`](/business/events/Integration.reconnected).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `integration` | [Integration](/business/nouns/integration) | Yes | The Integration in `needsReauth`. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `connectUrl` | `url` | Yes | The approval page; it expires in one hour. |
| `integration` | [Integration](/business/nouns/integration) | Yes | The Integration, its id and cursor kept. |

**Refuses when**

| Check | Error | Fix | Then call |
| --- | --- | --- | --- |
| The key is valid, but its scopes do not allow this operation. | [`forbidden`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |

**Example**

```ts
import { $ } from 'startup-builder'

const { connectUrl, integration } = await $.Integration.reconnect({ integration: 'integration_alVwjQcmRy' })
```

### Integration.refresh
Refresh renews an Integration’s outside token before it expires; a refused refresh moves it to `needsReauth`. [Verb page](/business/nouns/integration/refresh?interface=sdk).

```ts
interface IntegrationVerbs {
  refresh(input: IntegrationRefreshInput, options?: SB.CallOptions): SB.Call<Integration>
}
```

Emits [`Integration.refreshed`](/business/events/Integration.refreshed).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `integration` | [Integration](/business/nouns/integration) | Yes | The Integration to refresh. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `integration` | [Integration](/business/nouns/integration) | Yes | The Integration with a new `refreshedAt`, or in `needsReauth`. |

**Refuses when**

| Check | Error | Fix | Then call |
| --- | --- | --- | --- |
| The key is valid, but its scopes do not allow this operation. | [`forbidden`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |

**Example**

```ts
import { $ } from 'startup-builder'

const integration = await $.Integration.refresh({ integration: 'integration_alVwjQcmRy' })
```

### Integration.resume
Resume restarts a paused Integration from its cursor and releases the Actions that waited on it. [Verb page](/business/nouns/integration/resume?interface=sdk).

```ts
interface IntegrationVerbs {
  resume(input: IntegrationResumeInput, options?: SB.CallOptions): SB.Call<Integration>
}
```

Emits [`Integration.resumed`](/business/events/Integration.resumed).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `integration` | [Integration](/business/nouns/integration) | Yes | The paused Integration. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `integration` | [Integration](/business/nouns/integration) | Yes | The Integration, `connected`. |

**Refuses when**

| Check | Error | Fix | Then call |
| --- | --- | --- | --- |
| The key is valid, but its scopes do not allow this operation. | [`forbidden`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |

**Example**

```ts
import { $ } from 'startup-builder'

const integration = await $.Integration.resume({ integration: 'integration_alVwjQcmRy' })
```

### Integration.revoke
Revoke ends an Integration at once: its token is revoked with the upstream, and every record it brought in stays. [Verb page](/business/nouns/integration/revoke?interface=sdk).

```ts
interface IntegrationVerbs {
  revoke(input: IntegrationRevokeInput, options?: SB.CallOptions): SB.Call<Integration>
}
```

Emits [`Integration.revoked`](/business/events/Integration.revoked).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `integration` | [Integration](/business/nouns/integration) | Yes | The Integration to end. |
| `reason` | `text` | No | Why, kept on the Integration. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `integration` | [Integration](/business/nouns/integration) | Yes | The Integration, `revoked`. |

**Refuses when**

| Check | Error | Fix | Then call |
| --- | --- | --- | --- |
| The key is valid, but its scopes do not allow this operation. | [`forbidden`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |

**Example**

```ts
import { $ } from 'startup-builder'

const integration = await $.Integration.revoke({ integration: 'integration_alVwjQcmRy' })
```