---
title: "POST /sites/{siteId}/matchers"
method: POST
path: "/sites/{siteId}/matchers"
tags: ["Sites"]
---

# POST /sites/{siteId}/matchers

`POST /sites/{siteId}/matchers`

## Path parameters

- `siteId` string, required

## Request body

- SiteMatcherCreateRequest
  - `kind` 'supply_point' | 'meter_number' | 'account_number' | 'location_text', required
  - `value` string, required

## Response `201`

Created matcher

- SiteMatcherResponse
  - `data` SiteMatcher, required
    - `createdAt` string, date-time, required
    - `id` string, required — smat_ + 32 hex
    - `kind` 'supply_point' | 'meter_number' | 'account_number' | 'location_text', required
    - `siteId` string, required
    - `value` string, required — The normalized value

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `409` — MATCHER_EXISTS: the organization already has a matcher of this kind and normalized value; SITE_ARCHIVED: an archived site takes no matchers

## Changes

- **2026-10-02** `766c2a40e369` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/greentally/apis/esgai-api/changes/sites/:siteId/matchers/post.md)

---

[API](https://skmtc.dev/greentally/apis/esgai-api.md) · [All operations](https://skmtc.dev/greentally/apis/esgai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/greentally/apis/esgai-api/revisions/4189686230ca?raw)
