# Google Merchant Routing Reference

**App name:** `google-merchant`
**Base URL proxied:** `merchantapi.googleapis.com`

## API Path Pattern

```
/google-merchant/{sub-api}/{version}/accounts/{accountId}/{resource}
```

The Merchant API uses sub-APIs: `products`, `accounts`, `datasources`, `reports`, `promotions`, `inventories`, `notifications`, `conversions`

**Important:** The v1 API requires one-time developer registration per Merchant Center account. Complete the registration steps below before using any endpoints.

## Developer Registration

Before using v1 endpoints, you must complete a one-time registration:

### Step 1: Get Your Account ID

**Option A: Try fetching via API first**

Try listing accounts using the v1beta endpoint. If this works, you can get your account ID automatically:

```bash
GET /google-merchant/accounts/v1beta/accounts
```

Response (if successful):
```json
{
  "accounts": [
    {"accountId": "[REDACTED_PHONE]", "accountName": "My Store"}
  ]
}
```

**Option B: From Merchant Center UI (if Option A fails)**

If the v1beta endpoint is unavailable or returns an error:

1. Log in to [Google Merchant Center](https://merchants.google.com/)
2. Your account ID is in the URL: `https://merchants.google.com/mc/overview?a=YOUR_ACCOUNT_ID`

For example, if your URL is `https://merchants.google.com/mc/overview?a=[REDACTED_PHONE]`, your account ID is `[REDACTED_PHONE]`.

### Step 2: Register for API Access

```bash
POST /google-merchant/accounts/v1/accounts/{accountId}/developerRegistration:registerGcp
Content-Type: application/json

{
  "developerEmail": "[REDACTED_EMAIL]"
}
```

Replace `{accountId}` with your account ID from Step 1, and use the email associated with your Google account.

**Response:**
```json
{
  "name": "accounts/[REDACTED_PHONE]/developerRegistration",
  "gcpIds": ["..."]
}
```

### Step 3: Verify Registration

After registration, test that v1 endpoints work:

```bash
GET /google-merchant/accounts/v1/accounts/{accountId}
```

**Note:** Registration only needs to be done once per Merchant Center account. After successful registration, all v1 endpoints will work for that account.

## Common Endpoints

### List Accounts
```bash
GET /google-merchant/accounts/v1/accounts
```

### List Products
```bash
GET /google-merchant/products/v1/accounts/{accountId}/products
```

### Get Product
```bash
GET /google-merchant/products/v1/accounts/{accountId}/products/{productId}
```

Product ID format: `contentLanguage~feedLabel~offerId` (e.g., `en~US~sku123`)

### Insert Product Input
```bash
POST /google-merchant/products/v1/accounts/{accountId}/productInputs:insert?dataSource=accounts/{accountId}/dataSources/{dataSourceId}
Content-Type: application/json

{
  "offerId": "sku123",
  "contentLanguage": "en",
  "feedLabel": "US",
  "productAttributes": {
    "title": "Product Title",
    "link": "https://example.com/product",
    "imageLink": "https://example.com/image.jpg",
    "availability": "in_stock",
    "price": {"amountMicros": "19990000", "currencyCode": "USD"}
  }
}
```

### Delete Product Input
```bash
DELETE /google-merchant/products/v1/accounts/{accountId}/productInputs/{productId}?dataSource=accounts/{accountId}/dataSources/{dataSourceId}
```

### List Data Sources
```bash
GET /google-merchant/datasources/v1/accounts/{accountId}/dataSources
```

### Search Reports
```bash
POST /google-merchant/reports/v1/accounts/{accountId}/reports:search
Content-Type: application/json

{
  "query": "SELECT id, offer_id, title FROM product_view LIMIT 10"
}
```

Note: The `product_view` table requires the `id` field in SELECT clause.

### List Promotions
```bash
GET /google-merchant/promotions/v1/accounts/{accountId}/promotions
```

Note: Requires Promotions program enrollment.

### Get Account
```bash
GET /google-merchant/accounts/v1/accounts/{accountId}
```

### List Regional Inventories
```bash
GET /google-merchant/inventories/v1/accounts/{accountId}/products/{productId}/regionalInventories
```

### List Local Inventories
```bash
GET /google-merchant/inventories/v1/accounts/{accountId}/products/{productId}/localInventories
```

Note: Local inventories only work for products with LOCAL channel.

## Notes

- **Developer registration required** - Complete registration before using v1 endpoints
- Authentication is automatic - the router injects the OAuth token
- Account ID is your Merchant Center numeric ID (visible in MC URL)
- Product IDs use format `contentLanguage~feedLabel~offerId`
- Monetary values use micros (divide by 1,000,000)
- Products can only be inserted in data sources with `input: "API"` type
- Uses token-based pagination with `pageSize` and `pageToken`
- Promotions require account enrollment in Promotions program
- Local inventories only work for LOCAL channel products

## Resources

- [Merchant API Overview](https://developers.google.com/merchant/api/overview)
- [Merchant API Reference](https://developers.google.com/merchant/api/reference/rest)
- [Products Guide](https://developers.google.com/merchant/api/guides/products/overview)
- [Reports Guide](https://developers.google.com/merchant/api/guides/reports)