# Update connection

`PATCH /v1/voximplant-sip/:configId`

**Scope:** `telephony` | **Authentication:** `X-Api-Key` | **URL:** `https://vibecode.bitrix24.com/v1`

PATCH /v1/voximplant-sip/:configId calls voximplant.sip.update. Fields: title, server, login, password. Although Bitrix24 accepts TYPE, a type change is not persisted: type may only match the current type. Without type the wrapper sends the current type so office is not validated as cloud. Empty PATCH: 400 INVALID_PARAMS. The connection is re-read after the update.

Errors: 400 invalid parameters; 401 key or token; 403 scope, Bitrix24 permissions or READONLY writes; 422 upstream refusal; 429 limits; 502 unavailable Bitrix24 account; 503 timeout or freeze.

## Request parameters

| Field | Type | Required | Meaning |
|---|---|---|---|
| configId | integer | yes | Positive connection ID from [SIP list](/docs/voximplant-sip/list). |
| title | string | no | New connection display name. |
| server | string | no | New SIP server; omitted fields are preserved. |
| login | string | no | New login. |
| password | string | no | New password, write only. |
| type | string | no | Existing type only; changing connection type is rejected. At least one other field is required. |

## Response fields

| Field | Meaning |
|---|---|
| success | Boolean result |
| data | Result described above; credentials are omitted |

## Examples

### cURL Personal key

```bash
curl -X PATCH 'https://vibecode.bitrix24.com/v1/voximplant-sip/15' \
  -H 'X-Api-Key: FAKE_VIBE_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"title":"VIBE-PROBE updated"}'
```

### cURL OAuth

```bash
curl -X PATCH 'https://vibecode.bitrix24.com/v1/voximplant-sip/15' \
  -H 'X-Api-Key: FAKE_VIBE_API_KEY' \
  -H 'Authorization: Bearer FAKE_APP_SESSION_TOKEN' \
  -H 'Content-Type: application/json' \
  --data '{"title":"VIBE-PROBE updated"}'
```

### JavaScript Personal key

```javascript
const response = await fetch('https://vibecode.bitrix24.com/v1/voximplant-sip/15', {
  method: 'PATCH',
  headers: {"X-Api-Key": "FAKE_VIBE_API_KEY", "Content-Type": "application/json"},
  body: JSON.stringify({"title": "VIBE-PROBE updated"}),
});
console.log(await response.json());
```

### JavaScript OAuth

```javascript
const response = await fetch('https://vibecode.bitrix24.com/v1/voximplant-sip/15', {
  method: 'PATCH',
  headers: {"X-Api-Key": "FAKE_VIBE_API_KEY", "Authorization": "Bearer FAKE_APP_SESSION_TOKEN", "Content-Type": "application/json"},
  body: JSON.stringify({"title": "VIBE-PROBE updated"}),
});
console.log(await response.json());
```

Observed on the test account 2026-10-02; the example shows nonsecret response fields.

```json
{
  "success": true,
  "data": {
    "configId": "15",
    "type": "office",
    "title": "VIBE-PROBE MR5038 updated",
    "hasPassword": true,
    "hasIncomingPassword": true
  }
}
```

## Errors

| HTTP | Code |
|---|---|
| 400 | INVALID_PARAMS / MISSING_REQUIRED_FIELDS / READONLY_FIELD |
| 401 | MISSING_API_KEY / INVALID_API_KEY / TOKEN_MISSING |
| 403 | SCOPE_DENIED / WRITE_BLOCKED_READONLY_KEY / BITRIX_ACCESS_DENIED |
| 422 | BITRIX_ERROR |
| 429 | RATE_LIMITED |
| 502 | BITRIX_UNAVAILABLE |
| 503 | BITRIX_TIMEOUT |
| 404 | ENTITY_NOT_FOUND |

[Error reference](/docs/errors)

403 when the key has no telephony scope:

```json
{
  "success": false,
  "error": {
    "code": "SCOPE_DENIED",
    "message": "This endpoint requires 'telephony' scope"
  }
}
```

## See also

[Calls](/docs/calls)

[SIP](/docs/voximplant-sip)
