
# Letzshop Development Documentation

## Introduction

Welcome to the Letzshop Development page. Here you’ll find details on:

- GraphQL API
- Authentication
- Playground
- Deprecations
- Order management
- Event system
- Data structures [1](https://letzshop.lu/en/dev)

---

## GraphQL API

Utilizing this API, you can retrieve and modify data on products, vendors, and shipments. Letzshop uses GraphQL, allowing for precise queries.  

**Endpoint**:  
http://letzshop.lu/graphql
Replace YOUR_API_ACCESS_KEY with your actual key or remove the Authorization header for public data.

## Authentication

Some data is public (e.g., vendor description and product prices).
For protected operations (e.g., orders or vouchers), an API key is required.

Request one via your account manager or email: support@letzshop.lu


Include the key:


Authorization: Bearer YOUR_API_ACCESS_KEY

---

## Playground

- Access the interactive GraphQL Playground via the Letzshop website.  
- It provides live docs, auto-complete (CTRL + Space), and run-time testing.  
- **Caution**: You're working on production—mutations like confirming orders are real. [1](https://letzshop.lu/en/dev)

---

## Deprecations

The following GraphQL fields will be removed soon:

| Type    | Field               | Replacement                      |
|---------|---------------------|----------------------------------|
| Event   | latitude, longitude | `#lat`, `#lng`                   |
| Greco   | weight              | `packages.weight`               |
| Product | ageRestriction      | `_age_restriction` (int)         |
| Taxon   | identifier          | `slug`                           |
| User    | billAddress, shipAddress | on `orders` instead         |
| Vendor  | facebookLink, instagramLink, twitterLink, youtubeLink | `social_media_links` |
| Vendor  | owner               | `representative`                |
| Vendor  | permalink           | `slug`                           | [1](https://letzshop.lu/en/dev)

---

## Order Management via API

Using the API, you can:

- Fetch unconfirmed orders  
- Confirm or reject them  
- Set tracking numbers  
- Handle returns  

All of this requires at least "shop manager" API key access. Multi-vendor management is supported if rights allow. [1](https://letzshop.lu/en/dev)

### 1. Retrieve Unconfirmed Shipments

**Query:**
```graphql
query {
  shipments(state: unconfirmed) {
    nodes {
      id
      inventoryUnits {
        id
        state
      }
    }
  }
}
``` [1](https://letzshop.lu/en/dev)

---

### 2. Confirm/Reject Inventory Units

Use inventoryUnit IDs to confirm or reject:

```graphql
mutation {
  confirmInventoryUnits(input: {
    inventoryUnits: [
      { inventoryUnitId: "ID1", isAvailable: true },
      { inventoryUnitId: "ID2", isAvailable: false },
      { inventoryUnitId: "ID3", isAvailable: false }
    ]
  }) {
    inventoryUnits {
      id
      state
    }
    errors {
      id
      code
      message
    }
  }
}
``` [1](https://letzshop.lu/en/dev)

---

### 3. Handle Customer Returns

Use only after receiving returned items:

```graphql
mutation {
  returnInventoryUnits(input: {
    inventoryUnits: [
      { inventoryUnitId: "ID1" },
      { inventoryUnitId: "ID2" }
    ]
  }) {
    inventoryUnits {
      id
      state
    }
    errors {
      id
      code
    }
  }
}
``` [1](https://letzshop.lu/en/dev)

---

### 4. Set Shipment Tracking Number

Include shipping provider and tracking code:

```graphql
mutation {
  setShipmentTracking(input: {
    shipmentId: "SHIPMENT_ID",
    code: "TRACK123",
    provider: THE_SHIPPING_PROVIDER
  }) {
    shipment {
      tracking {
        code
        provider
      }
    }
    errors {
      code
      message
    }
  }
}
``` [1](https://letzshop.lu/en/dev)

---

## Event System

Subscribe by contacting support@letzshop.lu. Events are delivered via an SNS-like message structure:

```json
{
  "Type": "Notification",
  "MessageId": "XXX",
  "TopicArn": "arn:aws:sns:eu-central-1:XXX:events",
  "Message": "{\"id\":\"XXX\",\"type\":\"XXX\",\"payload\":{...}}",
  "Timestamp": "2019-01-01T00:00:00.000Z",
  "SignatureVersion": "1",
  "Signature": "XXX",
  "SigningCertURL": "...",
  "UnsubscribeURL": "..."
}
``` [1](https://letzshop.lu/en/dev)

### Message Payload

Each event includes:

- `id`
- `type` (e.g., ShipmentConfirmed, UserCreated…)
- `payload` (object-specific data) [1](https://letzshop.lu/en/dev)

---

## Event Types & Payload Structure

A variety of event types are supported. Common ones include:

- `ShipmentConfirmed`, `ShipmentRefundCreated`  
- `UserAnonymized`, `UserCreated`, `UserDestroyed`, `UserUpdated`  
- `VariantWithPriceCrossedCreated`, `...Updated`  
- `VendorCategoryCreated`, `Destroyed`, `Updated`  
- `VendorCreated`, `Destroyed`, `Updated`

Exact payload structure varies per event type. [1](https://letzshop.lu/en/dev)

---

## Conclusion

This Markdown file captures all information from the Letzshop development page, formatted for use in your documentation or GitHub.
