# Account — PapaProxy.net API reference

Page: https://papaproxy.net/developers/reference/account.php
Last updated: November 9, 2026
Base URL: `https://papaproxy.net/account_new`. Authentication and conventions: https://papaproxy.net/developers/reference/

### Get your profile

`GET /api/v1/customer/me`

- Access: API key required · scope `customer:read`

Your account profile.

Request examples:

cURL:

```bash
curl -X GET "https://papaproxy.net/account_new/api/v1/customer/me" \
  -H "Authorization: Bearer $PAPAPROXY_API_KEY"
```

Python:

```python
import os

import requests

resp = requests.get(
    "https://papaproxy.net/account_new/api/v1/customer/me",
    headers={"Authorization": f"Bearer {os.environ['PAPAPROXY_API_KEY']}"},
    timeout=30,
)
resp.raise_for_status()
print(resp.json())
```

Node.js:

```javascript
const resp = await fetch("https://papaproxy.net/account_new/api/v1/customer/me", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.PAPAPROXY_API_KEY}`,
  },
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
console.log(await resp.json());
```

PHP:

```php
<?php
$ch = curl_init('https://papaproxy.net/account_new/api/v1/customer/me');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . getenv('PAPAPROXY_API_KEY'),
    ],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
var_dump($status, json_decode($response, true));
```

Go:

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, err := http.NewRequest("GET", "https://papaproxy.net/account_new/api/v1/customer/me", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("PAPAPROXY_API_KEY"))
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	data, _ := io.ReadAll(resp.Body)
	fmt.Println(resp.Status, string(data))
}
```

Responses:

- `200` — Your profile.

Example response:

```json
{
  "customer": {
    "id": "8218fbc6-d67b-52fd-a639-cca399215d31",
    "email": "you@example.com",
    "name": "Alex Morgan",
    "phone": null,
    "is_verified": true,
    "kyc_status": null,
    "created_at": "2026-08-25T10:44:28.118221+00:00",
    "locale": "ru",
    "has_password": true,
    "oauth_provider": null,
    "account_type": "personal",
    "company_name": null,
    "address_line1": null,
    "address_line2": null,
    "city": null,
    "state": null,
    "postcode": null,
    "country": "US",
    "tax_id": null
  }
}
```

| Field | Type | Required | Description |
|---|---|---|---|
| `customer` | object | yes | Your account profile. |
| `customer.id` | string (uuid) | yes | Unique ID. |
| `customer.email` | string | yes | Account email address. |
| `customer.name` | string, nullable | yes |  |
| `customer.phone` | string, nullable | yes | Phone number, if set. |
| `customer.is_verified` | boolean | yes | Whether the email address is verified. |
| `customer.kyc_status` | string, nullable | yes |  |
| `customer.created_at` | string (date-time) | yes | When it was created (ISO 8601, UTC). |
| `customer.locale` | string, nullable | no |  |
| `customer.has_password` | boolean | no | Default: `true` |
| `customer.oauth_provider` | string, nullable | no | Sign-in provider used for the account, if any. |
| `customer.account_type` | string | no | Default: `"personal"` |
| `customer.company_name` | string, nullable | no |  |
| `customer.address_line1` | string, nullable | no |  |
| `customer.address_line2` | string, nullable | no |  |
| `customer.city` | string, nullable | no |  |
| `customer.state` | string, nullable | no |  |
| `customer.postcode` | string, nullable | no |  |
| `customer.country` | string, nullable | no | Country from your profile, if set. |
| `customer.tax_id` | string, nullable | no |  |
| `customer.partner_status` | string, nullable | no | Status of your affiliate partner profile, if any. |

- `401` — The API key is missing, malformed, revoked, or expired, or the account is inactive.

  Example:

  ```json
  {"detail": "Invalid or revoked API key."}
  ```

- `403` — The API key lacks scope `customer:read`.

  Example:

  ```json
  {"detail": "API key is missing required scope: customer:read"}
  ```

- `429` — Too many requests: the per-account limit is 60 requests per minute, shared by all keys and the MCP server. Retry with exponential backoff.

  Example:

  ```json
  {"detail": "Too Many Requests"}
  ```


### Update your profile

`PATCH /api/v1/customer/me`

- Access: API key required · scope `customer:write`

Update your name or phone number. Only `name` and `phone` are accepted; any other field, including `email` and `locale`, returns `422`.

Request body (JSON):

| Field | Type | Required | Description |
|---|---|---|---|
| `name` | string, nullable | no | Max length: 255 |
| `phone` | string, nullable | no | Phone number, if set. · Max length: 30 |

Request examples:

cURL:

```bash
curl -X PATCH "https://papaproxy.net/account_new/api/v1/customer/me" \
  -H "Authorization: Bearer $PAPAPROXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "ACME Ops"}'
```

Python:

```python
import os

import requests

resp = requests.patch(
    "https://papaproxy.net/account_new/api/v1/customer/me",
    headers={"Authorization": f"Bearer {os.environ['PAPAPROXY_API_KEY']}"},
    json={
        "name": "ACME Ops"
    },
    timeout=30,
)
resp.raise_for_status()
print(resp.json())
```

Node.js:

```javascript
const resp = await fetch("https://papaproxy.net/account_new/api/v1/customer/me", {
  method: "PATCH",
  headers: {
    Authorization: `Bearer ${process.env.PAPAPROXY_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "name": "ACME Ops"
  }),
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
console.log(await resp.json());
```

PHP:

```php
<?php
$ch = curl_init('https://papaproxy.net/account_new/api/v1/customer/me');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'PATCH',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . getenv('PAPAPROXY_API_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'name' => 'ACME Ops'
    ]),
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
var_dump($status, json_decode($response, true));
```

Go:

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"strings"
)

func main() {
	req, err := http.NewRequest("PATCH", "https://papaproxy.net/account_new/api/v1/customer/me", strings.NewReader(`{"name": "ACME Ops"}`))
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("PAPAPROXY_API_KEY"))
	req.Header.Set("Content-Type", "application/json")
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	data, _ := io.ReadAll(resp.Body)
	fmt.Println(resp.Status, string(data))
}
```

Responses:

- `200` — Full profile of the currently authenticated customer.

Example response:

```json
{
  "customer": {
    "id": "8218fbc6-d67b-52fd-a639-cca399215d31",
    "email": "you@example.com",
    "name": "Alex Morgan",
    "phone": null,
    "is_verified": true,
    "kyc_status": null,
    "created_at": "2026-08-25T10:44:28.118221+00:00",
    "locale": "ru",
    "has_password": true,
    "oauth_provider": null,
    "account_type": "personal",
    "company_name": null,
    "address_line1": null,
    "address_line2": null,
    "city": null,
    "state": null,
    "postcode": null,
    "country": "US",
    "tax_id": null
  }
}
```

| Field | Type | Required | Description |
|---|---|---|---|
| `customer` | object | yes | Your account profile. |
| `customer.id` | string (uuid) | yes | Unique ID. |
| `customer.email` | string | yes | Account email address. |
| `customer.name` | string, nullable | yes |  |
| `customer.phone` | string, nullable | yes | Phone number, if set. |
| `customer.is_verified` | boolean | yes | Whether the email address is verified. |
| `customer.kyc_status` | string, nullable | yes |  |
| `customer.created_at` | string (date-time) | yes | When it was created (ISO 8601, UTC). |
| `customer.locale` | string, nullable | no |  |
| `customer.has_password` | boolean | no | Default: `true` |
| `customer.oauth_provider` | string, nullable | no | Sign-in provider used for the account, if any. |
| `customer.account_type` | string | no | Default: `"personal"` |
| `customer.company_name` | string, nullable | no |  |
| `customer.address_line1` | string, nullable | no |  |
| `customer.address_line2` | string, nullable | no |  |
| `customer.city` | string, nullable | no |  |
| `customer.state` | string, nullable | no |  |
| `customer.postcode` | string, nullable | no |  |
| `customer.country` | string, nullable | no | Country from your profile, if set. |
| `customer.tax_id` | string, nullable | no |  |
| `customer.partner_status` | string, nullable | no | Status of your affiliate partner profile, if any. |

- `401` — The API key is missing, malformed, revoked, or expired, or the account is inactive.

  Example:

  ```json
  {"detail": "Invalid or revoked API key."}
  ```

- `403` — The API key lacks scope `customer:write`.

  Example:

  ```json
  {"detail": "API key is missing required scope: customer:write"}
  ```

- `422` — Validation error: a field is missing or has the wrong type or value.

  Example:

  ```json
  {"detail": "Validation error"}
  ```

- `429` — Too many requests: the per-account limit is 60 requests per minute, shared by all keys and the MCP server. Retry with exponential backoff.

  Example:

  ```json
  {"detail": "Too Many Requests"}
  ```

