# Partners API

## Get Partners

Retrieve customer/vendor list.

**Endpoint:** `POST https://api.quick.myquickapp.com/crm/partners`

### Request Headers

```
Authorization: Bearer {api_key}
Content-Type: application/json
language: en
```

### Request Body - Simple List

```json
{
  "org_id": "12345"
}
```

### Response

```json
{
  "statusCode": 200,
  "headers": {
    "Access-Control-Allow-Origin": "*",
    "Access-Control-Allow-Headers": "*",
    "Access-Control-Allow-Methods": "GET,POST,OPTIONS"
  },
  "body": {
    "partners": [
      {
        "id": 917013,
        "orgid": 12345,
        "partnername": "Customer Name",
        "display_name": "Customer Name",
        "partner_type": "customer",
        "email": "customer@example.com",
        "phone": "+27123456789",
        "address": "123 Main Street, City, Country",
        "tax_number": "1234567890",
        "credit_limit": 5000.00,
        "balance": 2500.00,
        "currency": "ZAR",
        "created_at": "2024-01-15T10:30:00",
        "updated_at": "2024-03-10T10:00:00"
      }
    ],
    "pagination": {
      "page_number": 1,
      "page_size": 25,
      "total_items": 1,
      "total_pages": 1,
      "has_next": false,
      "has_previous": false
    }
  }
}
```

### Request Body - With Filters

```json
{
  "org_id": "12345",
  "partner_type": "customer",
  "search": "John",
  "page_size": 25,
  "page_number": 1
}
```

---

## Create Partner

Create a new customer/vendor.

**Endpoint:** `POST https://api.quick.myquickapp.com/crm/editpatner`

### Request Headers

```
Authorization: Bearer {api_key}
Content-Type: application/json
language: en
```

### Request Body - Customer

```json
{
  "org_id": "12345",
  "userid": "123",
  "action": "create",
  "partner_type": "customer",
  "partnername": "New Customer",
  "display_name": "New Customer",
  "email": "customer@example.com",
  "phone": "+27123456789",
  "address": "123 Main Street, City, Country",
  "tax_number": "1234567890",
  "credit_limit": 5000.00,
  "currency": "ZAR",
  "payment_terms": "Net 30",
  "contact_person": "John Doe",
  "notes": "Preferred customer"
}
```

### Response

```json
{
  "statusCode": 200,
  "headers": {...},
  "body": {
    "message": "Partner created successfully",
    "partner": {
      "id": 917020,
      "orgid": 12345,
      "partnername": "New Customer",
      "display_name": "New Customer",
      "partner_type": "customer",
      "email": "customer@example.com",
      "phone": "+27123456789",
      "address": "123 Main Street, City, Country",
      "tax_number": "1234567890",
      "credit_limit": 5000.00,
      "balance": 0.00,
      "currency": "ZAR",
      "payment_terms": "Net 30",
      "contact_person": "John Doe",
      "created_at": "2024-03-10T11:00:00"
    }
  }
}
```

### Request Body - Vendor

```json
{
  "org_id": "12345",
  "userid": "123",
  "action": "create",
  "partner_type": "vendor",
  "partnername": "New Vendor",
  "display_name": "New Vendor",
  "email": "vendor@example.com",
  "phone": "+27987654321",
  "address": "456 Vendor Street, City, Country",
  "tax_number": "0987654321",
  "currency": "ZAR",
  "payment_terms": "Net 30",
  "contact_person": "Jane Smith"
}
```

### Response

```json
{
  "statusCode": 200,
  "headers": {...},
  "body": {
    "message": "Partner created successfully",
    "partner": {
      "id": 917021,
      "orgid": 12345,
      "partnername": "New Vendor",
      "display_name": "New Vendor",
      "partner_type": "vendor",
      "email": "vendor@example.com",
      "phone": "+27987654321",
      "address": "456 Vendor Street, City, Country",
      "tax_number": "0987654321",
      "balance": 0.00,
      "currency": "ZAR",
      "payment_terms": "Net 30",
      "contact_person": "Jane Smith",
      "created_at": "2024-03-10T11:30:00"
    }
  }
}
```

---

## Edit Partner

Update an existing partner.

**Endpoint:** `POST https://api.quick.myquickapp.com/crm/editpatner`

### Request Headers

```
Authorization: Bearer {api_key}
Content-Type: application/json
language: en
```

### Request Body

```json
{
  "org_id": "12345",
  "userid": "123",
  "action": "edit",
  "partner_id": 917013,
  "partnername": "Updated Customer Name",
  "display_name": "Updated Customer Name",
  "email": "updated@example.com",
  "phone": "+27111222333",
  "address": "789 Updated Street, City, Country",
  "tax_number": "1122334455",
  "credit_limit": 10000.00,
  "payment_terms": "Net 60",
  "contact_person": "Updated Contact",
  "notes": "Updated notes"
}
```

### Response

```json
{
  "statusCode": 200,
  "headers": {...},
  "body": {
    "message": "Partner updated successfully",
    "partner": {
      "id": 917013,
      "orgid": 12345,
      "partnername": "Updated Customer Name",
      "display_name": "Updated Customer Name",
      "email": "updated@example.com",
      "phone": "+27111222333",
      "address": "789 Updated Street, City, Country",
      "tax_number": "1122334455",
      "credit_limit": 10000.00,
      "payment_terms": "Net 60",
      "contact_person": "Updated Contact",
      "updated_at": "2024-03-10T12:00:00"
    }
  }
}
```

---

## Get Partner Balance

Get partner balance and transaction history.

**Endpoint:** `POST https://api.quick.myquickapp.com/crm/partners`

### Request Body

```json
{
  "org_id": "12345",
  "partner_id": 917013,
  "include_transactions": true
}
```

### Response

```json
{
  "statusCode": 200,
  "headers": {...},
  "body": {
    "partner": {
      "id": 917013,
      "partnername": "Updated Customer Name",
      "display_name": "Updated Customer Name",
      "email": "updated@example.com",
      "phone": "+27111222333",
      "balance": 2500.00,
      "credit_limit": 10000.00,
      "available_credit": 7500.00,
      "currency": "ZAR"
    },
    "transactions": [
      {
        "id": 50001,
        "type": "invoice",
        "document_number": "INV-2024-0001",
        "date": "2024-03-10",
        "amount": 1150.00,
        "paid": 0.00,
        "due": 1150.00
      },
      {
        "id": 50002,
        "type": "payment",
        "document_number": "PAY-001",
        "date": "2024-03-15",
        "amount": 500.00,
        "paid": 500.00,
        "due": 0.00
      }
    ]
  }
}
```

---

## Delete Partner

Delete a partner (soft delete).

**Endpoint:** `POST https://api.quick.myquickapp.com/crm/editpatner`

### Request Headers

```
Authorization: Bearer {api_key}
Content-Type: application/json
language: en
```

### Request Body

```json
{
  "org_id": "12345",
  "userid": "123",
  "action": "delete",
  "partner_id": 917020
}
```

### Response

```json
{
  "statusCode": 200,
  "headers": {...},
  "body": {
    "message": "Partner deleted successfully"
  }
}
```

---

## Partner Types

| Type | Description |
|------|-------------|
| `customer` | Customer (buying from you) |
| `vendor` | Vendor (selling to you) |
| `both` | Both customer and vendor |

---

## Partner Fields

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `partnername` | string | Yes | Partner's name |
| `display_name` | string | No | Display name (defaults to partnername) |
| `partner_type` | string | Yes | `customer`, `vendor`, or `both` |
| `email` | string | No | Email address |
| `phone` | string | No | Phone number |
| `address` | string | No | Full address |
| `tax_number` | string | No | Tax/VAT number |
| `credit_limit` | decimal | No | Credit limit |
| `currency` | string | No | Currency code (e.g., `ZAR`, `USD`) |
| `payment_terms` | string | No | Payment terms (e.g., `Net 30`) |
| `contact_person` | string | No | Primary contact name |
| `notes` | string | No | Additional notes |

---

## Search Partners

### Search by Name

```json
{
  "org_id": "12345",
  "search": "John"
}
```

### Search by Email

```json
{
  "org_id": "12345",
  "search": "example.com"
}
```

### Search by Phone

```json
{
  "org_id": "12345",
  "search": "12345"
}
```
