# Clients

Create and manage logical clients to group fax numbers and organize inbound faxes.

## List Clients

GET `/clients` — Returns all clients configured for your account.

#### cURL

```bash
curl -s -H "Authorization: Bearer sk_test_..." "https://api.medsender.com/api/v2/clients" | jq
```

#### Node

```javascript
const API_BASE='https://api.medsender.com/api/v2';
const API_KEY='sk_test_...';
const res=await fetch(`${API_BASE}/clients`,{headers:{Authorization:`Bearer ${API_KEY}`}});
console.log(await res.json());
```

#### TypeScript

```typescript
const API_BASE: string='https://api.medsender.com/api/v2';
const API_KEY: string='sk_test_...';
const res = await fetch(`${API_BASE}/clients`,{ headers:{ Authorization: `Bearer ${API_KEY}` }});
console.log(await res.json());
```

#### Python

```python
import requests
API_BASE='https://api.medsender.com/api/v2'
API_KEY='sk_test_...'
r=requests.get(f"{API_BASE}/clients", headers={'Authorization':f'Bearer {API_KEY}'})
print(r.json())
```

#### Ruby

```ruby
require 'net/http'
require 'uri'
uri = URI.parse('https://api.medsender.com/api/v2/clients')
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer sk_test_...'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true){|http| http.request(request)}
puts res.body
```

#### PHP

```php
<?php
$ch = curl_init();
curl_setopt_array($ch, [
  CURLOPT_URL => 'https://api.medsender.com/api/v2/clients',
  CURLOPT_HTTPHEADER => ['Authorization: Bearer sk_test_...'],
  CURLOPT_RETURNTRANSFER => true
]);
$res = curl_exec($ch);
echo $res;
```

#### Java

```java
import java.net.http.*;
import java.net.URI;
public class ClientsList {
  public static void main(String[] args) throws Exception {
    var client = HttpClient.newHttpClient();
    var req = HttpRequest.newBuilder()
      .uri(URI.create("https://api.medsender.com/api/v2/clients"))
      .header("Authorization","Bearer sk_test_...")
      .build();
    var res = client.send(req, HttpResponse.BodyHandlers.ofString());
    System.out.println(res.body());
  }
}
```

#### C#

```csharp
using System;
using System.Net.Http;
var url = "https://api.medsender.com/api/v2/clients";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization","Bearer sk_test_...");
var res = await client.GetAsync(url);
Console.WriteLine(await res.Content.ReadAsStringAsync());
```

Response

```json
{
  "clients": [
    {
      "client_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "name": "Example Clinic",
      "fax_numbers": [
        {
          "id": "8ec64100-b049-42d0-955b-6fc97ec53361",
          "number": "+15550100001"
        }
      ]
    }
  ]
}
```

Response Fields

| Field | Description |
| --- | --- |
| client_id | Unique identifier (UUID) for this client |
| name | Client display name |
| fax_numbers | Array of fax numbers assigned to this client, each with `id` and `number` |

## Get Client

GET `/clients/:client_id` — Retrieves details for a specific client.

#### cURL

```bash
curl -s -H "Authorization: Bearer sk_test_..." "https://api.medsender.com/api/v2/clients/REPLACE_CLIENT_ID" | jq
```

#### Node

```javascript
const API_BASE='https://api.medsender.com/api/v2';
const API_KEY='sk_test_...';
const id='REPLACE_CLIENT_ID';
const res=await fetch(`${API_BASE}/clients/${id}`,{headers:{Authorization:`Bearer ${API_KEY}`}});
console.log(await res.json());
```

#### TypeScript

```typescript
const API_BASE: string='https://api.medsender.com/api/v2';
const API_KEY: string='sk_test_...';
const id: string='REPLACE_CLIENT_ID';
const res = await fetch(`${API_BASE}/clients/${id}`,{ headers:{ Authorization: `Bearer ${API_KEY}` }});
console.log(await res.json());
```

#### Python

```python
import requests
API_BASE='https://api.medsender.com/api/v2'
API_KEY='sk_test_...'
id='REPLACE_CLIENT_ID'
r=requests.get(f"{API_BASE}/clients/{id}", headers={'Authorization':f'Bearer {API_KEY}'})
print(r.json())
```

#### Ruby

```ruby
require 'net/http'
require 'uri'
id='REPLACE_CLIENT_ID'
uri = URI.parse("https://api.medsender.com/api/v2/clients/#{id}")
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer sk_test_...'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true){|http| http.request(request)}
puts res.body
```

#### PHP

```php
<?php
$ch = curl_init();
$id = 'REPLACE_CLIENT_ID';
curl_setopt_array($ch, [
  CURLOPT_URL => 'https://api.medsender.com/api/v2/clients/' . $id,
  CURLOPT_HTTPHEADER => ['Authorization: Bearer sk_test_...'],
  CURLOPT_RETURNTRANSFER => true
]);
$res = curl_exec($ch);
echo $res;
```

#### Java

```java
import java.net.http.*;
import java.net.URI;
public class ClientsGet {
  public static void main(String[] args) throws Exception {
    var id = "REPLACE_CLIENT_ID";
    var client = HttpClient.newHttpClient();
    var req = HttpRequest.newBuilder()
      .uri(URI.create("https://api.medsender.com/api/v2/clients/" + id))
      .header("Authorization","Bearer sk_test_...")
      .build();
    var res = client.send(req, HttpResponse.BodyHandlers.ofString());
    System.out.println(res.body());
  }
}
```

#### C#

```csharp
using System;
using System.Net.Http;
var id = "REPLACE_CLIENT_ID";
var url = "https://api.medsender.com/api/v2/clients/" + id;
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization","Bearer sk_test_...");
var res = await client.GetAsync(url);
Console.WriteLine(await res.Content.ReadAsStringAsync());
```

Response

```json
{
  "client": {
    "client_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "Example Clinic",
    "fax_numbers": [
      {
        "id": "8ec64100-b049-42d0-955b-6fc97ec53361",
        "number": "+15550100001"
      }
    ]
  }
}
```

## Create Client

POST `/clients` — Creates a new client with the specified name.

Request Parameters (JSON body)

| Parameter | Required | Description |
| --- | --- | --- |
| client.name | Yes | Display name for the client |
| client.fax_number_id | No | ID of a fax number to assign to this client |

#### cURL

```bash
export API_BASE="https://api.medsender.com/api/v2"
export API_KEY="sk_test_..."

curl -s -X POST -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"client":{"name":"Clinics West","fax_number_id":null}}' \
  "$API_BASE/clients" | jq
```

#### Node

```javascript
const API_BASE='https://api.medsender.com/api/v2';
const API_KEY='sk_test_...';
const res=await fetch(`${API_BASE}/clients`,{method:'POST',headers:{Authorization:`Bearer ${API_KEY}`,'Content-Type':'application/json'},body:JSON.stringify({client:{name:'Clinics West',fax_number_id:null}})});
console.log(await res.json());
```

#### TypeScript

```typescript
const API_BASE: string='https://api.medsender.com/api/v2';
const API_KEY: string='sk_test_...';
const body = { client:{ name:'Clinics West', fax_number_id:null } };
const res = await fetch(`${API_BASE}/clients`,{ method:'POST', headers:{ Authorization: `Bearer ${API_KEY}`, 'Content-Type':'application/json' }, body: JSON.stringify(body) });
console.log(await res.json());
```

#### Python

```python
import requests, json
API_BASE='https://api.medsender.com/api/v2'
API_KEY='sk_test_...'
r=requests.post(f"{API_BASE}/clients", headers={'Authorization':f'Bearer {API_KEY}','Content-Type':'application/json'}, data=json.dumps({'client':{'name':'Clinics West','fax_number_id':None}}))
print(r.json())
```

#### Ruby

```ruby
require 'net/http'
require 'uri'
require 'json'
uri = URI.parse('https://api.medsender.com/api/v2/clients')
request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer sk_test_...'
request['Content-Type'] = 'application/json'
request.body = { client: { name: 'Clinics West', fax_number_id: nil } }.to_json
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true){|http| http.request(request)}
puts res.body
```

#### PHP

```php
<?php
$ch = curl_init();
$body = json_encode(['client' => ['name' => 'Clinics West', 'fax_number_id' => null]]);
curl_setopt_array($ch, [
  CURLOPT_URL => 'https://api.medsender.com/api/v2/clients',
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => ['Authorization: Bearer sk_test_...', 'Content-Type: application/json'],
  CURLOPT_POSTFIELDS => $body,
  CURLOPT_RETURNTRANSFER => true
]);
$res = curl_exec($ch);
echo $res;
```

#### Java

```java
import java.net.http.*;
import java.net.URI;
public class ClientsCreate {
  public static void main(String[] args) throws Exception {
    var client = HttpClient.newHttpClient();
    var body = "{\"client\":{\"name\":\"Clinics West\",\"fax_number_id\":null}}";
    var req = HttpRequest.newBuilder()
      .uri(URI.create("https://api.medsender.com/api/v2/clients"))
      .header("Authorization","Bearer sk_test_...")
      .header("Content-Type","application/json")
      .POST(HttpRequest.BodyPublishers.ofString(body))
      .build();
    var res = client.send(req, HttpResponse.BodyHandlers.ofString());
    System.out.println(res.body());
  }
}
```

#### C#

```csharp
using System;
using System.Net.Http;
using System.Text;
var url = "https://api.medsender.com/api/v2/clients";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization","Bearer sk_test_...");
var content = new StringContent("{\"client\":{\"name\":\"Clinics West\",\"fax_number_id\":null}}", Encoding.UTF8, "application/json");
var res = await client.PostAsync(url, content);
Console.WriteLine(await res.Content.ReadAsStringAsync());
```

Response

```json
{
  "client": {
    "client_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "name": "Clinics West",
    "fax_numbers": []
  }
}
```

## Update Client

PATCH `/clients/:client_id` — Updates an existing client.

#### cURL

```bash
export API_BASE="https://api.medsender.com/api/v2"
export API_KEY="sk_test_..."

curl -s -X PATCH -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"client":{"name":"Clinics West — Updated"}}' \
  "$API_BASE/clients/REPLACE_CLIENT_ID" | jq
```

#### Node

```javascript
const API_BASE='https://api.medsender.com/api/v2';
const API_KEY='sk_test_...';
const res=await fetch(`${API_BASE}/clients/REPLACE_CLIENT_ID`,{method:'PATCH',headers:{Authorization:`Bearer ${API_KEY}`,'Content-Type':'application/json'},body:JSON.stringify({client:{name:'Clinics West — Updated'}})});
console.log(await res.json());
```

#### TypeScript

```typescript
const API_BASE: string='https://api.medsender.com/api/v2';
const API_KEY: string='sk_test_...';
const cid: string='REPLACE_CLIENT_ID';
const body = { client:{ name:'Clinics West — Updated' } };
const res = await fetch(`${API_BASE}/clients/${cid}`,{ method:'PATCH', headers:{ Authorization: `Bearer ${API_KEY}`, 'Content-Type':'application/json' }, body: JSON.stringify(body) });
console.log(await res.json());
```

#### Python

```python
import requests, json
API_BASE='https://api.medsender.com/api/v2'
API_KEY='sk_test_...'
cid='REPLACE_CLIENT_ID'
r=requests.patch(f"{API_BASE}/clients/{cid}", headers={'Authorization':f'Bearer {API_KEY}','Content-Type':'application/json'}, data=json.dumps({'client':{'name':'Clinics West — Updated'}}))
print(r.json())
```

#### Ruby

```ruby
require 'net/http'
require 'uri'
require 'json'
cid='REPLACE_CLIENT_ID'
uri = URI.parse("https://api.medsender.com/api/v2/clients/#{cid}")
request = Net::HTTP::Patch.new(uri)
request['Authorization'] = 'Bearer sk_test_...'
request['Content-Type'] = 'application/json'
request.body = { client: { name: 'Clinics West — Updated' } }.to_json
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true){|http| http.request(request)}
puts res.body
```

#### PHP

```php
<?php
$ch = curl_init();
$cid = 'REPLACE_CLIENT_ID';
$body = json_encode(['client' => ['name' => 'Clinics West — Updated']]);
curl_setopt_array($ch, [
  CURLOPT_URL => 'https://api.medsender.com/api/v2/clients/' . $cid,
  CURLOPT_CUSTOMREQUEST => 'PATCH',
  CURLOPT_HTTPHEADER => ['Authorization: Bearer sk_test_...', 'Content-Type: application/json'],
  CURLOPT_POSTFIELDS => $body,
  CURLOPT_RETURNTRANSFER => true
]);
$res = curl_exec($ch);
echo $res;
```

#### Java

```java
import java.net.http.*;
import java.net.URI;
public class ClientsUpdate {
  public static void main(String[] args) throws Exception {
    var cid = "REPLACE_CLIENT_ID";
    var client = HttpClient.newHttpClient();
    var body = "{\"client\":{\"name\":\"Clinics West — Updated\"}}";
    var req = HttpRequest.newBuilder()
      .uri(URI.create("https://api.medsender.com/api/v2/clients/" + cid))
      .header("Authorization","Bearer sk_test_...")
      .header("Content-Type","application/json")
      .method("PATCH", HttpRequest.BodyPublishers.ofString(body))
      .build();
    var res = client.send(req, HttpResponse.BodyHandlers.ofString());
    System.out.println(res.body());
  }
}
```

#### C#

```csharp
using System;
using System.Net.Http;
using System.Text;
var cid = "REPLACE_CLIENT_ID";
var url = "https://api.medsender.com/api/v2/clients/" + cid;
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization","Bearer sk_test_...");
var content = new StringContent("{\"client\":{\"name\":\"Clinics West — Updated\"}}", Encoding.UTF8, "application/json");
var res = await client.SendAsync(new HttpRequestMessage(new HttpMethod("PATCH"), url){ Content = content });
Console.WriteLine(await res.Content.ReadAsStringAsync());
```

Response

```json
{
  "client": {
    "client_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "Clinics West — Updated",
    "fax_numbers": [
      {
        "id": "8ec64100-b049-42d0-955b-6fc97ec53361",
        "number": "+15550100001"
      }
    ]
  }
}
```
