# Web Cloud › Internet › Access › Lines API

> Part of the OVHcloud developer hub. Index of every page and section: https://developers.eu.ovhcloud.com/llms.txt
> The Web Cloud product's sections: https://developers.eu.ovhcloud.com/reference/web-cloud/llms.txt
> Everything in one file: https://developers.eu.ovhcloud.com/llms-full.txt

> 10 operations of the OVHcloud API. Calls carry `authorization: Bearer $OVH_TOKEN`; the EU host is shown, Canada and the United States answer on api.ca.ovhcloud.com and api.us.ovhcloud.com.

Page: https://developers.eu.ovhcloud.com/reference/web-cloud/internet/access/lines/

OpenAPI v1: https://api.eu.ovhcloud.com/1.0/__schemas/developer-hub-navigation/web-cloud/internet/access/lines.json?format=openapi3
OpenAPI v2: https://api.eu.ovhcloud.com/v2/__schemas/developer-hub-navigation/web-cloud/internet/access/lines.json?format=openapi3

## Operations

- `GET /xdsl/{serviceName}/lines` — List the lines of an xDSL access
- `GET /xdsl/{serviceName}/lines/{number}` — Get a line of an xDSL access
- `POST /xdsl/{serviceName}/lines/{number}/diagnostic/cancel` — Cancel the diagnostic of a line
- `POST /xdsl/{serviceName}/lines/{number}/diagnostic/run` — Run the advanced diagnostic of a line
- `GET /xdsl/{serviceName}/lines/{number}/dslamPort` — Get the DSLAM port of a line
- `GET /xdsl/{serviceName}/lines/{number}/dslamPort/availableProfiles` — List the profiles of a DSLAM port
- `POST /xdsl/{serviceName}/lines/{number}/dslamPort/changeProfile` — Change the profile of a DSLAM port
- `GET /xdsl/{serviceName}/lines/{number}/dslamPort/logs` — List the logs of a DSLAM port
- `POST /xdsl/{serviceName}/lines/{number}/dslamPort/reset` — Reset a DSLAM port
- `GET /xdsl/{serviceName}/lines/{number}/statistics` — Get the statistics of a line

## List the lines of an xDSL access

`GET /1.0/xdsl/{serviceName}/lines`

Link: https://developers.eu.ovhcloud.com/reference/web-cloud/internet/access/lines/#get-xdsl-servicename-lines

**Status:** Stable production version  
**IAM actions:** `xdsl:apiovh:lines/get`

Returns the numbers of the copper lines of the access.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `serviceName` | path | string | yes | Service name |

### Responses

| Status | Type | Description |
| --- | --- | --- |
| 200 | string[] | successful operation |

```json
[
  "string"
]
```

### Example

```bash
curl -X GET \
  "https://api.eu.ovhcloud.com/1.0/xdsl/{serviceName}/lines" \
  -H "accept: application/json" \
  -H "authorization: Bearer $OVH_TOKEN"
```

```python
'''
First, install the latest release of Python wrapper: $ pip install ovh
'''
import json
import ovh

# Instantiate an OVH Client.
# You can generate new credentials with full access to your account on
# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
client = ovh.Client(
	endpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
	application_key='xxxxxxxxxx',    # Application Key
	application_secret='xxxxxxxxxx', # Application Secret
	consumer_key='xxxxxxxxxx',       # Consumer Key
)

result = client.get("/xdsl/{serviceName}/lines")

# Pretty print
print(json.dumps(result, indent=4))
```

```php
<?php
/**
 * First, download the latest release of PHP wrapper on github
 * And include this script into the folder with extracted files
 */
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

/**
 * Instantiate an OVH Client.
 * You can generate new credentials with full access to your account on
 * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
 */
$ovh = new Api('xxxxxxxxxx',  // Application Key
               'xxxxxxxxxx',  // Application Secret
               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
               'xxxxxxxxxx'); // Consumer Key

$result = $ovh->get("/xdsl/{serviceName}/lines");

print_r($result);
?>
```

## Get a line of an xDSL access

`GET /1.0/xdsl/{serviceName}/lines/{number}`

Link: https://developers.eu.ovhcloud.com/reference/web-cloud/internet/access/lines/#get-xdsl-servicename-lines-number

**Status:** Stable production version  
**IAM actions:** `xdsl:apiovh:lines/get`

Returns the line number, distance and sections to the DSLAM, synchronization rates, mitigation, deconsolidation, portability and fault repair time.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `number` | path | string | yes | Number |
| `serviceName` | path | string | yes | Service name |

### Responses

| Status | Type | Description |
| --- | --- | --- |
| 200 | xdsl.Line | successful operation |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `concentrationPoint` | xdsl.LandlineConcentrationPoint | read-only | Data to identify the line at the concentration point |
| `concentrationPoint.lineHead` | string | read-only | Identifier of the head of the cable from the MDF |
| `concentrationPoint.lineInitialSection` | integer | read-only | Identifier of the section at the lineHead |
| `concentrationPoint.lineInitialSectionPair` | integer | read-only | Identifier of the pair at the lineHead's lineInitialSection |
| `deconsolidation` | xdsl.DeconsolidationEnum | read-only | Deconsolidation of the line. — one of `createNeighbour`, `creation`, `creationNeighbour`, `partial`, `total` |
| `directDistribution` | boolean | read-only | True if the line is directly wired on the DSLAM |
| `distance` | integer | read-only | Distance in meters from the DSLAM |
| `faultRepairTime` | xdsl.FaultRepairTimeEnum | read-only | Maximum time needed to repair a landline — one of `10HO`, `4HNO`, `4HO`, `DPLUS1`, `NORMAL` |
| `lineSectionsLength` | xdsl.LineSectionLength[] | read-only | Detailed information about the sections between the DSLAM and the telephone jack |
| `lineSectionsLength[].diameter` | integer | read-only | The diameter of this section in millimeters |
| `lineSectionsLength[].length` | integer | read-only | The length of this section in meters |
| `mitigation` | number | read-only | Mitigation of the line in dB |
| `number` | string | read-only | The number of the line |
| `originalNumber` | string | read-only | The number used to place the order. Null if the same as the current number. |
| `portability` | boolean | read-only | Whether the line number has been ported to OVH, to be used with VoIP service |
| `syncDown` | number | read-only | The download synchronisation on the DSLAM in Kbps |
| `syncUp` | number | read-only | The upload synchronisation on the DSLAM in Kbps |

```json
{
  "concentrationPoint": {
    "lineHead": "string",
    "lineInitialSection": 0,
    "lineInitialSectionPair": 0
  },
  "deconsolidation": "createNeighbour",
  "directDistribution": true,
  "distance": 0,
  "faultRepairTime": "10HO",
  "lineSectionsLength": [
    {
      "diameter": 0,
      "length": 0
    }
  ],
  "mitigation": 0,
  "number": "string",
  "originalNumber": "string",
  "portability": true,
  "syncDown": 0,
  "syncUp": 0
}
```

### Example

```bash
curl -X GET \
  "https://api.eu.ovhcloud.com/1.0/xdsl/{serviceName}/lines/{number}" \
  -H "accept: application/json" \
  -H "authorization: Bearer $OVH_TOKEN"
```

```python
'''
First, install the latest release of Python wrapper: $ pip install ovh
'''
import json
import ovh

# Instantiate an OVH Client.
# You can generate new credentials with full access to your account on
# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
client = ovh.Client(
	endpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
	application_key='xxxxxxxxxx',    # Application Key
	application_secret='xxxxxxxxxx', # Application Secret
	consumer_key='xxxxxxxxxx',       # Consumer Key
)

result = client.get("/xdsl/{serviceName}/lines/{number}")

# Pretty print
print(json.dumps(result, indent=4))
```

```php
<?php
/**
 * First, download the latest release of PHP wrapper on github
 * And include this script into the folder with extracted files
 */
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

/**
 * Instantiate an OVH Client.
 * You can generate new credentials with full access to your account on
 * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
 */
$ovh = new Api('xxxxxxxxxx',  // Application Key
               'xxxxxxxxxx',  // Application Secret
               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
               'xxxxxxxxxx'); // Consumer Key

$result = $ovh->get("/xdsl/{serviceName}/lines/{number}");

print_r($result);
?>
```

## Cancel the diagnostic of a line

`POST /1.0/xdsl/{serviceName}/lines/{number}/diagnostic/cancel`

Link: https://developers.eu.ovhcloud.com/reference/web-cloud/internet/access/lines/#post-xdsl-servicename-lines-number-diagnostic-cancel

**Status:** Stable production version  
**IAM actions:** `xdsl:apiovh:lines/diagnostic/cancel`

Cancels the ongoing advanced diagnostic of the line, when it can still be canceled.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `number` | path | string | yes | Number |
| `serviceName` | path | string | yes | Service name |

### Responses

| Status | Type | Description |
| --- | --- | --- |
| 200 | — | successful operation |

### Example

```bash
curl -X POST \
  "https://api.eu.ovhcloud.com/1.0/xdsl/{serviceName}/lines/{number}/diagnostic/cancel" \
  -H "accept: application/json" \
  -H "authorization: Bearer $OVH_TOKEN"
```

```python
'''
First, install the latest release of Python wrapper: $ pip install ovh
'''
import json
import ovh

# Instantiate an OVH Client.
# You can generate new credentials with full access to your account on
# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
client = ovh.Client(
	endpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
	application_key='xxxxxxxxxx',    # Application Key
	application_secret='xxxxxxxxxx', # Application Secret
	consumer_key='xxxxxxxxxx',       # Consumer Key
)

result = client.post("/xdsl/{serviceName}/lines/{number}/diagnostic/cancel")

# Pretty print
print(json.dumps(result, indent=4))
```

```php
<?php
/**
 * First, download the latest release of PHP wrapper on github
 * And include this script into the folder with extracted files
 */
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

/**
 * Instantiate an OVH Client.
 * You can generate new credentials with full access to your account on
 * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
 */
$ovh = new Api('xxxxxxxxxx',  // Application Key
               'xxxxxxxxxx',  // Application Secret
               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
               'xxxxxxxxxx'); // Consumer Key

$result = $ovh->post("/xdsl/{serviceName}/lines/{number}/diagnostic/cancel");

print_r($result);
?>
```

## Run the advanced diagnostic of a line

`POST /1.0/xdsl/{serviceName}/lines/{number}/diagnostic/run`

Link: https://developers.eu.ovhcloud.com/reference/web-cloud/internet/access/lines/#updateLineDiagnostic

**Status:** Stable production version  
**IAM actions:** `xdsl:apiovh:lines/diagnostic/run`

Starts or continues the advanced diagnostic of the line with the customer answers and actions done. Returns the diagnostic with its status, fault type and data.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `number` | path | string | yes | Number |
| `serviceName` | path | string | yes | Service name |

### Request body (required)

Type: `xdsl.lines.diagnostic.run.post`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `actionsDone` | xdsl.lineDiagnostic.CustomerActionsEnum[] |  | Customer possible actions |
| `answers` | xdsl.lineDiagnostic.Answers |  | Customer answers for line diagnostic |
| `answers.bandwidthTestUnit` | xdsl.lineDiagnostic.BandwidthTestUnitEnum | read-only | bandwidth unit for proof.ovh.net test values — one of `Kbps`, `Mbps` |
| `answers.comment` | string | read-only | comment will contains all information needed for intervention and about your access problem |
| `answers.conditionsAccepted` | boolean | read-only | customer knows that he can be charged (150 euros HT) if he is responsible for the problem or if tests have not been done correctly ? |
| `answers.contactPhone` | string | read-only | customer's phone number |
| `answers.datetimeOfAppearance` | string (date-time) | read-only | approximative datetime of problem happening |
| `answers.downloadBandwidthTest` | integer | read-only | bandwidth download value on proof.ovh.net test |
| `answers.endAfternoonHours` | string | read-only | afternoon closing information or time for the site |
| `answers.endMorningHours` | string | read-only | morning closing information or time for the site |
| `answers.followBySms` | boolean | read-only | indicate if customer wants to be informed by sms |
| `answers.hasModemKeptSynchronization` | boolean | read-only | Has modem kept his synchronization during line port reset ? |
| `answers.idAppointment` | integer | read-only | id of appointment chosen ("possibleValues" contains choices list with id) |
| `answers.individualSite` | boolean | read-only | is non-professional site ? |
| `answers.modemIsSynchronized` | boolean | read-only | Is modem synchronized ? (whatever internet connection) |
| `answers.modemMac` | string | read-only | modem mac address |
| `answers.modemStillSynchronized` | boolean | read-only | Modem still synchronized ? Please check once again. |
| `answers.modemType` | string | read-only | modem brand and reference |
| `answers.ovhTicket` | string | read-only | Ovh ticket name or ticket ID, only if a ticket is already opened for this problem |
| `answers.problemType` | xdsl.lineDiagnostic.ProblemTypeEnum | read-only | Problem Type on DSL connection — one of `lowBandwidth`, `syncLoss` |
| `answers.resolvedAfterTests` | boolean | read-only | is access problem solved ? |
| `answers.secureSite` | boolean | read-only | is secure site ? |
| `answers.severalInternetConnections` | boolean | read-only | Has customer several internal connections ? (on the same place) |
| `answers.siteClosedDays` | string | read-only | days or period where site access is not possible |
| `answers.siteDigicode` | string | read-only | digicode for site entrance |
| `answers.siteOpening` | string | read-only | site opening hours or information |
| `answers.startAfternoonHours` | string | read-only | afternoon opening information or time for the site |
| `answers.startMorningHours` | string | read-only | morning opening information or time for the site |
| `answers.uploadBandwidthTest` | integer | read-only | bandwidth upload value on proof.ovh.net test |
| `faultType` | xdsl.lineDiagnostic.FaultTypeEnum | yes | Line diagnostic fault type — one of `alignment`, `noSync`, `syncLossOrLowBandwidth`, `unknown` |

```json
{
  "actionsDone": [
    "bePreparedToCheckModemSynchronization"
  ],
  "answers": {},
  "faultType": "alignment"
}
```

### Responses

| Status | Type | Description |
| --- | --- | --- |
| 200 | xdsl.lineDiagnostic.Diagnostic | successful operation |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | xdsl.lineDiagnostic.DiagnosticData | read-only | Diagnostic data and information |
| `data.actionsDone` | xdsl.lineDiagnostic.CustomerActionsEnum[] | read-only | List of actions already done by customer |
| `data.actionsToDo` | xdsl.lineDiagnostic.CustomerActionToDo[] | read-only | List of actions that must be done by customer |
| `data.actionsToDo[].description` | string | read-only | action's description |
| `data.actionsToDo[].name` | xdsl.lineDiagnostic.CustomerActionsEnum | read-only | Customer possible actions — one of `bePreparedToCheckModemSynchronization`, `changeDslFilterAndPlugInDti`, `changeExtensionCable`, `changeProfile`, `checkConnectionCable`, `checkConnectionLoginAndParameters`, `checkFilter`, `connectModemToOtherPlugs`, `neutralTest`, `rebootModem`, `resetModem`, `unplugEveryModems`, … |
| `data.answers` | xdsl.lineDiagnostic.Answers | read-only | Customer answers for line diagnostic |
| `data.answers.bandwidthTestUnit` | xdsl.lineDiagnostic.BandwidthTestUnitEnum | read-only | bandwidth unit for proof.ovh.net test values — one of `Kbps`, `Mbps` |
| `data.answers.comment` | string | read-only | comment will contains all information needed for intervention and about your access problem |
| `data.answers.conditionsAccepted` | boolean | read-only | customer knows that he can be charged (150 euros HT) if he is responsible for the problem or if tests have not been done correctly ? |
| `data.answers.contactPhone` | string | read-only | customer's phone number |
| `data.answers.datetimeOfAppearance` | string (date-time) | read-only | approximative datetime of problem happening |
| `data.answers.downloadBandwidthTest` | integer | read-only | bandwidth download value on proof.ovh.net test |
| `data.answers.endAfternoonHours` | string | read-only | afternoon closing information or time for the site |
| `data.answers.endMorningHours` | string | read-only | morning closing information or time for the site |
| `data.answers.followBySms` | boolean | read-only | indicate if customer wants to be informed by sms |
| `data.answers.hasModemKeptSynchronization` | boolean | read-only | Has modem kept his synchronization during line port reset ? |
| `data.answers.idAppointment` | integer | read-only | id of appointment chosen ("possibleValues" contains choices list with id) |
| `data.answers.individualSite` | boolean | read-only | is non-professional site ? |
| `data.answers.modemIsSynchronized` | boolean | read-only | Is modem synchronized ? (whatever internet connection) |
| `data.answers.modemMac` | string | read-only | modem mac address |
| `data.answers.modemStillSynchronized` | boolean | read-only | Modem still synchronized ? Please check once again. |
| `data.answers.modemType` | string | read-only | modem brand and reference |
| `data.answers.ovhTicket` | string | read-only | Ovh ticket name or ticket ID, only if a ticket is already opened for this problem |
| `data.answers.problemType` | xdsl.lineDiagnostic.ProblemTypeEnum | read-only | Problem Type on DSL connection — one of `lowBandwidth`, `syncLoss` |
| `data.answers.resolvedAfterTests` | boolean | read-only | is access problem solved ? |
| `data.answers.secureSite` | boolean | read-only | is secure site ? |
| `data.answers.severalInternetConnections` | boolean | read-only | Has customer several internal connections ? (on the same place) |
| `data.answers.siteClosedDays` | string | read-only | days or period where site access is not possible |
| `data.answers.siteDigicode` | string | read-only | digicode for site entrance |
| `data.answers.siteOpening` | string | read-only | site opening hours or information |
| `data.answers.startAfternoonHours` | string | read-only | afternoon opening information or time for the site |
| `data.answers.startMorningHours` | string | read-only | morning opening information or time for the site |
| `data.answers.uploadBandwidthTest` | integer | read-only | bandwidth upload value on proof.ovh.net test |
| `data.comment` | string | read-only | Diagnostic comment. Can be update during any diagnostic step |
| `data.creationDate` | string (date-time) | read-only | Diagnostic creation date |
| `data.diagnosticDoneDate` | string (date-time) | read-only | End of diagnostic date. Will be null until problem totally identified |
| `data.error` | string | read-only | Error message |
| `data.lastUpdate` | string (date-time) | read-only | Last diagnostic update date |
| `data.lineDetails` | xdsl.lineDiagnostic.LineDetails | read-only | Line information |
| `data.lineDetails.accessName` | string | read-only | access name |
| `data.lineDetails.accessPing` | boolean | read-only | Access IP ping or not |
| `data.lineDetails.address` | string | read-only | address of the access |
| `data.lineDetails.connectionInfo` | xdsl.lineDiagnostic.ConnectionInformations | read-only | information directly get on DSLAM or Modem |
| `data.lineDetails.contactPhone` | string | read-only | customer phone number for contact |
| `data.lineDetails.description` | string | read-only | custom access description |
| `data.lineDetails.dslamIsSynchronized` | boolean | read-only | DSLAM is synchronized or not |
| `data.lineDetails.gtr` | boolean | read-only | is GTR access or not |
| `data.lineDetails.length` | integer | read-only | Line length in meters |
| `data.lineDetails.lineCapabilities` | xdsl.lineDiagnostic.LineCapabilities | read-only | Theoretical line capabilities |
| `data.lineDetails.lineType` | xdsl.DslTypeEnum | read-only | Possible DSL technologies — one of `adsl`, `ftte`, `ftth`, `ftto`, `sdsl`, `vdsl` |
| `data.lineDetails.nra` | string | read-only | NRA name |
| `data.lineDetails.number` | string | read-only | line number |
| `data.lineDetails.operator` | xdsl.ProviderEnum | read-only | The providers — one of `axione`, `bouygues`, `ft`, `ftBySfr`, `kosc`, `koscDeg`, `ovh`, `sfr` |
| `data.lineDetails.sections` | xdsl.lineDiagnostic.Section[] | read-only | cables sections details |
| `data.robotAction` | xdsl.lineDiagnostic.RobotActionsEnum | read-only | Current or last robot action — one of `alignmentLockTest`, `alignmentResetTest`, `alignmentTestResult`, `checkCustomerTicket`, `checkIfAccessPing`, `checkIfResolvedAfterConnectionTests`, `checkIfResolvedAfterInstallationCheck`, `checkIfResolvedAfterTests`, `checkIfSeveralConnections`, `checkInstallation`, `checkProblem`, `checkSynchronizationWithoutOtherModems`, … |
| `data.seltTest` | xdsl.lineDiagnostic.SeltResult | read-only | Customer answers for line diagnostic |
| `data.seltTest.date` | string (date-time) | read-only | SELT test running date |
| `data.seltTest.distance` | integer | read-only | Distance of the problem identified on the line (by SELT test), from NRA to customer |
| `data.seltTest.preloc` | xdsl.lineDiagnostic.SeltPrelocEnum | read-only | Prelocalization of the problem — one of `CUST`, `DSLAM`, `LINE`, `RE` |
| `data.seltTest.state` | xdsl.lineDiagnostic.SeltStateEnum | read-only | Problem type identified by SELT test — one of `open`, `short`, `synced`, `unknown` |
| `data.seltTest.status` | xdsl.lineDiagnostic.SeltStatusEnum | read-only | SELT test status — one of `failed`, `notAvailable`, `ok` |
| `data.timeout` | integer | read-only | Diagnostic timeout in minutes. Any action restart timeout |
| `data.toAnswer` | xdsl.lineDiagnostic.Question[] | read-only | List of questions that must be answered by customer |
| `data.toAnswer[].defaultValue` | string | read-only | question description |
| `data.toAnswer[].description` | string | read-only | question description |
| `data.toAnswer[].enumValues` | string[] | read-only | available values for enum |
| `data.toAnswer[].name` | xdsl.lineDiagnostic.QuestionsEnum | read-only | Possible customer questions — one of `bandwidthTestUnit`, `comment`, `conditionsAccepted`, `contactPhone`, `datetimeOfAppearance`, `downloadBandwidthTest`, `endAfternoonHours`, `endMorningHours`, `followBySms`, `hasModemKeptSynchronization`, `idAppointment`, `individualSite`, … |
| `data.toAnswer[].possibleValues` | xdsl.lineDiagnostic.PossibleValue[] | read-only | list of possible values |
| `data.toAnswer[].required` | boolean | read-only | is a required question |
| `data.toAnswer[].type` | string | read-only | answer type |
| `faultType` | xdsl.lineDiagnostic.FaultTypeEnum | read-only | Line diagnostic fault type — one of `alignment`, `noSync`, `syncLossOrLowBandwidth`, `unknown` |
| `id` | integer | read-only | Diagnostic id |
| `status` | xdsl.lineDiagnostic.DiagnosticStatusEnum | read-only | Diagnostic status possible values — one of `cancelled`, `connectionProblem`, `genericIncidentPending`, `haveToConnectModemOnTheRightPlug`, `init`, `interventionRequested`, `noBandwidthFault`, `noProblemAnymore`, `noSyncFaultDiagnosticRequired`, `problem`, `resolvedAfterTests`, `sleeping`, … |

```json
{
  "data": {
    "actionsDone": [
      "bePreparedToCheckModemSynchronization"
    ],
    "actionsToDo": [
      {
        "description": "string",
        "name": "bePreparedToCheckModemSynchronization"
      }
    ],
    "answers": {
      "bandwidthTestUnit": "Kbps",
      "comment": "string",
      "conditionsAccepted": true,
      "contactPhone": "string",
      "datetimeOfAppearance": "2024-01-01T12:00:00Z",
      "downloadBandwidthTest": 0,
      "endAfternoonHours": "string",
      "endMorningHours": "string",
      "followBySms": true,
      "hasModemKeptSynchronization": true,
      "idAppointment": 0,
      "individualSite": true,
      "modemIsSynchronized": true,
      "modemMac": "string",
      "modemStillSynchronized": true,
      "modemType": "string",
      "ovhTicket": "string",
      "problemType": "lowBandwidth",
      "resolvedAfterTests": true,
      "secureSite": true,
      "severalInternetConnections": true,
      "siteClosedDays": "string",
      "siteDigicode": "string",
      "siteOpening": "string",
      "startAfternoonHours": "string",
      "startMorningHours": "string",
      "uploadBandwidthTest": 0
    },
    "comment": "string",
    "creationDate": "2024-01-01T12:00:00Z",
    "diagnosticDoneDate": "2024-01-01T12:00:00Z",
    "error": "string",
    "lastUpdate": "2024-01-01T12:00:00Z",
    "lineDetails": {
      "accessName": "string",
      "accessPing": true,
      "address": "string",
      "connectionInfo": {
        "crcError": 0,
        "downstreamAttenuation": 0,
        "downstreamMargin": 0,
        "downstreamSync": 0,
  …
```

### Example

```bash
curl -X POST \
  "https://api.eu.ovhcloud.com/1.0/xdsl/{serviceName}/lines/{number}/diagnostic/run" \
  -H "accept: application/json" \
  -H "authorization: Bearer $OVH_TOKEN" \
  -H "content-type: application/json" \
  -d '{ }'
```

```python
'''
First, install the latest release of Python wrapper: $ pip install ovh
'''
import json
import ovh

# Instantiate an OVH Client.
# You can generate new credentials with full access to your account on
# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
client = ovh.Client(
	endpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
	application_key='xxxxxxxxxx',    # Application Key
	application_secret='xxxxxxxxxx', # Application Secret
	consumer_key='xxxxxxxxxx',       # Consumer Key
)

# Request body type: xdsl.lines.diagnostic.run.post
result = client.post("/xdsl/{serviceName}/lines/{number}/diagnostic/run",
	actionsDone = None, # Customer possible actions (type: array)
	answers = None, # Customer answers for line diagnostic (type: xdsl.lineDiagnostic.Answers)
	faultType = None, # Line diagnostic fault type (type: xdsl.lineDiagnostic.FaultTypeEnum)
)

# Pretty print
print(json.dumps(result, indent=4))
```

```php
<?php
/**
 * First, download the latest release of PHP wrapper on github
 * And include this script into the folder with extracted files
 */
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

/**
 * Instantiate an OVH Client.
 * You can generate new credentials with full access to your account on
 * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
 */
$ovh = new Api('xxxxxxxxxx',  // Application Key
               'xxxxxxxxxx',  // Application Secret
               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
               'xxxxxxxxxx'); // Consumer Key

// Request body type: xdsl.lines.diagnostic.run.post
$result = $ovh->post("/xdsl/{serviceName}/lines/{number}/diagnostic/run", array(
	actionsDone => null, // Customer possible actions (type: array)
	answers => null, // Customer answers for line diagnostic (type: xdsl.lineDiagnostic.Answers)
	faultType => null, // Line diagnostic fault type (type: xdsl.lineDiagnostic.FaultTypeEnum)
));

print_r($result);
?>
```

## Get the DSLAM port of a line

`GET /1.0/xdsl/{serviceName}/lines/{number}/dslamPort`

Link: https://developers.eu.ovhcloud.com/reference/web-cloud/internet/access/lines/#get-xdsl-servicename-lines-number-dslamport

**Status:** Stable production version  
**IAM actions:** `xdsl:apiovh:lines/dslamPort/get`

Returns the status and profile of the DSLAM port of the line, with its last synchronization and desynchronization dates.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `number` | path | string | yes | Number |
| `serviceName` | path | string | yes | Service name |

### Responses

| Status | Type | Description |
| --- | --- | --- |
| 200 | xdsl.DslamPort | successful operation |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `lastDesyncDate` | string (date-time) | read-only | Last time the port lost the synchronization |
| `lastSyncDate` | string (date-time) | read-only | Last time the port synchronized |
| `profile` | xdsl.DslamLineProfile | read-only | Profile on the DSLAM |
| `profile.id` | integer | read-only |  |
| `profile.isCurrent` | boolean | read-only |  |
| `profile.name` | string | read-only |  |
| `status` | xdsl.DslamPortStatusEnum | read-only | Different states of a DSLAM port — one of `activated`, `deactivated`, `outofsync` |

```json
{
  "lastDesyncDate": "2024-01-01T12:00:00Z",
  "lastSyncDate": "2024-01-01T12:00:00Z",
  "profile": {
    "id": 0,
    "isCurrent": true,
    "name": "string"
  },
  "status": "activated"
}
```

### Example

```bash
curl -X GET \
  "https://api.eu.ovhcloud.com/1.0/xdsl/{serviceName}/lines/{number}/dslamPort" \
  -H "accept: application/json" \
  -H "authorization: Bearer $OVH_TOKEN"
```

```python
'''
First, install the latest release of Python wrapper: $ pip install ovh
'''
import json
import ovh

# Instantiate an OVH Client.
# You can generate new credentials with full access to your account on
# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
client = ovh.Client(
	endpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
	application_key='xxxxxxxxxx',    # Application Key
	application_secret='xxxxxxxxxx', # Application Secret
	consumer_key='xxxxxxxxxx',       # Consumer Key
)

result = client.get("/xdsl/{serviceName}/lines/{number}/dslamPort")

# Pretty print
print(json.dumps(result, indent=4))
```

```php
<?php
/**
 * First, download the latest release of PHP wrapper on github
 * And include this script into the folder with extracted files
 */
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

/**
 * Instantiate an OVH Client.
 * You can generate new credentials with full access to your account on
 * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
 */
$ovh = new Api('xxxxxxxxxx',  // Application Key
               'xxxxxxxxxx',  // Application Secret
               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
               'xxxxxxxxxx'); // Consumer Key

$result = $ovh->get("/xdsl/{serviceName}/lines/{number}/dslamPort");

print_r($result);
?>
```

## List the profiles of a DSLAM port

`GET /1.0/xdsl/{serviceName}/lines/{number}/dslamPort/availableProfiles`

Link: https://developers.eu.ovhcloud.com/reference/web-cloud/internet/access/lines/#get-xdsl-servicename-lines-number-dslamport-availableprofiles

**Status:** Stable production version  
**IAM actions:** `xdsl:apiovh:lines/dslamPort/availableProfiles/get`

Returns the profiles that can be applied to the DSLAM port of the line, and which one is current.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `number` | path | string | yes | Number |
| `serviceName` | path | string | yes | Service name |

### Responses

| Status | Type | Description |
| --- | --- | --- |
| 200 | xdsl.DslamLineProfile[] | successful operation |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | read-only |  |
| `isCurrent` | boolean | read-only |  |
| `name` | string | read-only |  |

```json
[
  {
    "id": 0,
    "isCurrent": true,
    "name": "string"
  }
]
```

### Example

```bash
curl -X GET \
  "https://api.eu.ovhcloud.com/1.0/xdsl/{serviceName}/lines/{number}/dslamPort/availableProfiles" \
  -H "accept: application/json" \
  -H "authorization: Bearer $OVH_TOKEN"
```

```python
'''
First, install the latest release of Python wrapper: $ pip install ovh
'''
import json
import ovh

# Instantiate an OVH Client.
# You can generate new credentials with full access to your account on
# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
client = ovh.Client(
	endpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
	application_key='xxxxxxxxxx',    # Application Key
	application_secret='xxxxxxxxxx', # Application Secret
	consumer_key='xxxxxxxxxx',       # Consumer Key
)

result = client.get("/xdsl/{serviceName}/lines/{number}/dslamPort/availableProfiles")

# Pretty print
print(json.dumps(result, indent=4))
```

```php
<?php
/**
 * First, download the latest release of PHP wrapper on github
 * And include this script into the folder with extracted files
 */
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

/**
 * Instantiate an OVH Client.
 * You can generate new credentials with full access to your account on
 * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
 */
$ovh = new Api('xxxxxxxxxx',  // Application Key
               'xxxxxxxxxx',  // Application Secret
               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
               'xxxxxxxxxx'); // Consumer Key

$result = $ovh->get("/xdsl/{serviceName}/lines/{number}/dslamPort/availableProfiles");

print_r($result);
?>
```

## Change the profile of a DSLAM port

`POST /1.0/xdsl/{serviceName}/lines/{number}/dslamPort/changeProfile`

Link: https://developers.eu.ovhcloud.com/reference/web-cloud/internet/access/lines/#changeLineDSLAMProfile

**Status:** Stable production version  
**IAM actions:** `xdsl:apiovh:lines/dslamPort/changeProfile`

Applies one of the available profiles to the DSLAM port of the line. Returns the task that performs the change.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `number` | path | string | yes | Number |
| `serviceName` | path | string | yes | Service name |

### Request body (required)

Type: `xdsl.lines.dslamPort.changeProfile.post`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dslamProfileId` | integer | yes | The id of the xdsl.DslamLineProfile |

```json
{
  "dslamProfileId": 0
}
```

### Responses

| Status | Type | Description |
| --- | --- | --- |
| 200 | xdsl.Task | successful operation |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `doneDate` | string (date-time) | read-only | Date when the action was completed |
| `function` | string | read-only |  |
| `id` | integer | read-only |  |
| `isArchived` | boolean | read-only |  |
| `status` | xdsl.TaskStatusEnum | read-only | Status of a task. — one of `cancelled`, `doing`, `done`, `error`, `problem`, `todo` |
| `todoDate` | string (date-time) | read-only | Date when the action will start |
| `updateDate` | string (date-time) | read-only |  |

```json
{
  "doneDate": "2024-01-01T12:00:00Z",
  "function": "string",
  "id": 0,
  "isArchived": true,
  "status": "cancelled",
  "todoDate": "2024-01-01T12:00:00Z",
  "updateDate": "2024-01-01T12:00:00Z"
}
```

### Example

```bash
curl -X POST \
  "https://api.eu.ovhcloud.com/1.0/xdsl/{serviceName}/lines/{number}/dslamPort/changeProfile" \
  -H "accept: application/json" \
  -H "authorization: Bearer $OVH_TOKEN" \
  -H "content-type: application/json" \
  -d '{ }'
```

```python
'''
First, install the latest release of Python wrapper: $ pip install ovh
'''
import json
import ovh

# Instantiate an OVH Client.
# You can generate new credentials with full access to your account on
# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
client = ovh.Client(
	endpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
	application_key='xxxxxxxxxx',    # Application Key
	application_secret='xxxxxxxxxx', # Application Secret
	consumer_key='xxxxxxxxxx',       # Consumer Key
)

# Request body type: xdsl.lines.dslamPort.changeProfile.post
result = client.post("/xdsl/{serviceName}/lines/{number}/dslamPort/changeProfile",
	dslamProfileId = None, # The id of the xdsl.DslamLineProfile (type: integer)
)

# Pretty print
print(json.dumps(result, indent=4))
```

```php
<?php
/**
 * First, download the latest release of PHP wrapper on github
 * And include this script into the folder with extracted files
 */
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

/**
 * Instantiate an OVH Client.
 * You can generate new credentials with full access to your account on
 * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
 */
$ovh = new Api('xxxxxxxxxx',  // Application Key
               'xxxxxxxxxx',  // Application Secret
               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
               'xxxxxxxxxx'); // Consumer Key

// Request body type: xdsl.lines.dslamPort.changeProfile.post
$result = $ovh->post("/xdsl/{serviceName}/lines/{number}/dslamPort/changeProfile", array(
	dslamProfileId => null, // The id of the xdsl.DslamLineProfile (type: integer)
));

print_r($result);
?>
```

## List the logs of a DSLAM port

`GET /1.0/xdsl/{serviceName}/lines/{number}/dslamPort/logs`

Link: https://developers.eu.ovhcloud.com/reference/web-cloud/internet/access/lines/#get-xdsl-servicename-lines-number-dslamport-logs

**Status:** Stable production version  
**IAM actions:** `xdsl:apiovh:lines/dslamPort/logs/get`

Returns the messages the DSLAM emitted for the port of the line, with their date, last occurrence and number of occurrences.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `limit` | query | integer | yes |  |
| `number` | path | string | yes | Number |
| `serviceName` | path | string | yes | Service name |

### Responses

| Status | Type | Description |
| --- | --- | --- |
| 200 | xdsl.DslamPortLog[] | successful operation |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `date` | string (date-time) | read-only |  |
| `lastOccurrenceDate` | string (date-time) | read-only | The last time this message occured |
| `message` | string | read-only |  |
| `numberOfOccurrences` | integer | read-only | The number of times this message occured between date and lastOccurrenceDate |

```json
[
  {
    "date": "2024-01-01T12:00:00Z",
    "lastOccurrenceDate": "2024-01-01T12:00:00Z",
    "message": "string",
    "numberOfOccurrences": 0
  }
]
```

### Example

```bash
curl -X GET \
  "https://api.eu.ovhcloud.com/1.0/xdsl/{serviceName}/lines/{number}/dslamPort/logs" \
  -H "accept: application/json" \
  -H "authorization: Bearer $OVH_TOKEN"
```

```python
'''
First, install the latest release of Python wrapper: $ pip install ovh
'''
import json
import ovh

# Instantiate an OVH Client.
# You can generate new credentials with full access to your account on
# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
client = ovh.Client(
	endpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
	application_key='xxxxxxxxxx',    # Application Key
	application_secret='xxxxxxxxxx', # Application Secret
	consumer_key='xxxxxxxxxx',       # Consumer Key
)

result = client.get("/xdsl/{serviceName}/lines/{number}/dslamPort/logs")

# Pretty print
print(json.dumps(result, indent=4))
```

```php
<?php
/**
 * First, download the latest release of PHP wrapper on github
 * And include this script into the folder with extracted files
 */
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

/**
 * Instantiate an OVH Client.
 * You can generate new credentials with full access to your account on
 * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
 */
$ovh = new Api('xxxxxxxxxx',  // Application Key
               'xxxxxxxxxx',  // Application Secret
               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
               'xxxxxxxxxx'); // Consumer Key

$result = $ovh->get("/xdsl/{serviceName}/lines/{number}/dslamPort/logs");

print_r($result);
?>
```

## Reset a DSLAM port

`POST /1.0/xdsl/{serviceName}/lines/{number}/dslamPort/reset`

Link: https://developers.eu.ovhcloud.com/reference/web-cloud/internet/access/lines/#post-xdsl-servicename-lines-number-dslamport-reset

**Status:** Stable production version  
**IAM actions:** `xdsl:apiovh:lines/dslamPort/reset`

Resets the port of the line on the DSLAM. Returns the task that performs the change.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `number` | path | string | yes | Number |
| `serviceName` | path | string | yes | Service name |

### Responses

| Status | Type | Description |
| --- | --- | --- |
| 200 | xdsl.Task | successful operation |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `doneDate` | string (date-time) | read-only | Date when the action was completed |
| `function` | string | read-only |  |
| `id` | integer | read-only |  |
| `isArchived` | boolean | read-only |  |
| `status` | xdsl.TaskStatusEnum | read-only | Status of a task. — one of `cancelled`, `doing`, `done`, `error`, `problem`, `todo` |
| `todoDate` | string (date-time) | read-only | Date when the action will start |
| `updateDate` | string (date-time) | read-only |  |

```json
{
  "doneDate": "2024-01-01T12:00:00Z",
  "function": "string",
  "id": 0,
  "isArchived": true,
  "status": "cancelled",
  "todoDate": "2024-01-01T12:00:00Z",
  "updateDate": "2024-01-01T12:00:00Z"
}
```

### Example

```bash
curl -X POST \
  "https://api.eu.ovhcloud.com/1.0/xdsl/{serviceName}/lines/{number}/dslamPort/reset" \
  -H "accept: application/json" \
  -H "authorization: Bearer $OVH_TOKEN"
```

```python
'''
First, install the latest release of Python wrapper: $ pip install ovh
'''
import json
import ovh

# Instantiate an OVH Client.
# You can generate new credentials with full access to your account on
# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
client = ovh.Client(
	endpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
	application_key='xxxxxxxxxx',    # Application Key
	application_secret='xxxxxxxxxx', # Application Secret
	consumer_key='xxxxxxxxxx',       # Consumer Key
)

result = client.post("/xdsl/{serviceName}/lines/{number}/dslamPort/reset")

# Pretty print
print(json.dumps(result, indent=4))
```

```php
<?php
/**
 * First, download the latest release of PHP wrapper on github
 * And include this script into the folder with extracted files
 */
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

/**
 * Instantiate an OVH Client.
 * You can generate new credentials with full access to your account on
 * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
 */
$ovh = new Api('xxxxxxxxxx',  // Application Key
               'xxxxxxxxxx',  // Application Secret
               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
               'xxxxxxxxxx'); // Consumer Key

$result = $ovh->post("/xdsl/{serviceName}/lines/{number}/dslamPort/reset");

print_r($result);
?>
```

## Get the statistics of a line

`GET /1.0/xdsl/{serviceName}/lines/{number}/statistics`

Link: https://developers.eu.ovhcloud.com/reference/web-cloud/internet/access/lines/#get-xdsl-servicename-lines-number-statistics

**Status:** Stable production version  
**IAM actions:** `xdsl:apiovh:lines/statistics/get`

Returns the values of one line metric (attenuation, SNR, synchronization or CRC, FEC and HEC errors) over a daily, weekly, monthly or yearly period, with their unit.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `number` | path | string | yes | Number |
| `period` | query | xdsl.StatisticsPeriodEnum | yes | Periods for statistics. — one of `daily`, `monthly`, `preview`, `weekly`, `yearly` |
| `serviceName` | path | string | yes | Service name |
| `type` | query | xdsl.LineStatisticsTypeEnum | yes | Various types of statisctics available for the line. — one of `attenuation:download`, `attenuation:upload`, `error:crc`, `error:fec`, `error:hec`, `snr:download`, `snr:upload`, `synchronization:download`, `synchronization:upload` |

### Responses

| Status | Type | Description |
| --- | --- | --- |
| 200 | complexType.UnitAndValues_xdsl.TimestampAndValue | successful operation |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `unit` | string | read-only |  |
| `values` | xdsl.TimestampAndValue[] | read-only |  |
| `values[].timestamp` | integer | read-only |  |
| `values[].value` | number | read-only |  |

```json
{
  "unit": "string",
  "values": [
    {
      "timestamp": 0,
      "value": 0
    }
  ]
}
```

### Example

```bash
curl -X GET \
  "https://api.eu.ovhcloud.com/1.0/xdsl/{serviceName}/lines/{number}/statistics" \
  -H "accept: application/json" \
  -H "authorization: Bearer $OVH_TOKEN"
```

```python
'''
First, install the latest release of Python wrapper: $ pip install ovh
'''
import json
import ovh

# Instantiate an OVH Client.
# You can generate new credentials with full access to your account on
# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
client = ovh.Client(
	endpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
	application_key='xxxxxxxxxx',    # Application Key
	application_secret='xxxxxxxxxx', # Application Secret
	consumer_key='xxxxxxxxxx',       # Consumer Key
)

result = client.get("/xdsl/{serviceName}/lines/{number}/statistics")

# Pretty print
print(json.dumps(result, indent=4))
```

```php
<?php
/**
 * First, download the latest release of PHP wrapper on github
 * And include this script into the folder with extracted files
 */
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

/**
 * Instantiate an OVH Client.
 * You can generate new credentials with full access to your account on
 * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)
 */
$ovh = new Api('xxxxxxxxxx',  // Application Key
               'xxxxxxxxxx',  // Application Secret
               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
               'xxxxxxxxxx'); // Consumer Key

$result = $ovh->get("/xdsl/{serviceName}/lines/{number}/statistics");

print_r($result);
?>
```
