# Localnord developer resources

> **Summary**: how to integrate with **Localnord**, the white-label Google Business Profile platform for agencies. Three integration surfaces: an **MCP server** for AI agents, a **REST API v1** for custom tooling, and **outbound webhooks** for events. This file is public and machine-readable; the live documentation in the Localnord dashboard is authoritative.

- Product site: https://www.localnord.io
- Application: https://app.localnord.io
- Developer page: https://www.localnord.io/en/developers
- MCP manifest: https://www.localnord.io/.well-known/mcp.json

---

## 1. Localnord MCP server (for AI agents)

The Localnord MCP server lets an AI agent (Claude, Claude Code, or any MCP client) drive Google Business Profile work directly: list an agency portfolio, audit a listing, draft and publish Google Posts, reply to reviews, run rank scans, generate white-label reports.

| Item | Value |
|---|---|
| Endpoint | `https://app.localnord.io/api/mcp/mcp` |
| Transport | Streamable HTTP |
| Authentication | OAuth 2.1, dynamic client registration |
| Protected resource metadata | `https://app.localnord.io/.well-known/oauth-protected-resource` |
| Discovery manifest | `https://www.localnord.io/.well-known/mcp.json` |
| Account required | Yes, a Localnord account (7-day free trial) |

An unauthenticated call returns `401` with a `WWW-Authenticate: Bearer` header pointing at the protected resource metadata, which is the normal start of the OAuth flow for MCP clients.

### Tool families

| Family | What the tools do |
|---|---|
| `listings` | List, audit, sync and update Google Business Profile listings |
| `reviews` | Read reviews, generate and publish replies, run review campaigns |
| `publications` | Draft, schedule and publish Google Posts, photos and videos |
| `rankings` | Local rank tracking, keyword analysis, competitor benchmarks |
| `prospecting` | Search and enrich prospects, run white-label audits, marketplace leads |
| `reporting` | White-label PDF reports, client portal access, agency statistics |
| `account` | Credits, quotas, invoices, team members, organization branding |

All identifiers are Localnord UUIDs. Start from the listing-listing tool to obtain them; never guess an id.

---

## 2. REST API v1

| Item | Value |
|---|---|
| Base URL | `https://app.localnord.io/api/v1` |
| Format | JSON (gallery uploads use `multipart/form-data`) |
| Authentication | `Authorization: Bearer lnk_…` (organization-scoped API key, created in the dashboard) |
| Rate limit | 10,000 requests per day per key |
| Rate limit headers | `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` |

An API key is shown once at creation and stored hashed. Every request is filtered by the key's `organization_id`: a key can never read another organization's data. Revoked keys return `403`.

### Response envelope

```json
{ "data": [], "pagination": { "page": 1, "per_page": 50, "total": 134, "total_pages": 3 } }
```

Lists accept `?page=<n>&per_page=<n>` with `per_page` between 1 and 100 (default 50). Errors always return `{ "error": "<message>" }`.

### Status codes

| Code | Meaning |
|---|---|
| `400` | Invalid body or parameter |
| `401` | Missing or unknown API key |
| `402` | Not enough credits (audits, campaigns) |
| `403` | Revoked key, or listing paused |
| `404` | Not found, or outside your organization |
| `409` | State conflict (already published, already answered) |
| `422` | Business validation failed |
| `429` | Rate limit or quota exceeded |
| `5xx` | Server or upstream provider error |

### Endpoint groups

- Account and analytics
- Listings
- Content: publications, photos, videos
- Reviews and review campaigns
- Audits and reports
- Leads and prospecting
- Automations and webhooks

---

## 3. Webhooks

Subscribe an HTTPS endpoint to Localnord events. Up to 20 webhooks per organization. When a signing secret is configured, each delivery carries `X-Webhook-Signature: HMAC-SHA256(body, secret)`.

| Event | Fired when |
|---|---|
| `review.created` | A new review is detected |
| `publication.published` | A Google Post is published |
| `ranking.completed` | A rank scan finishes |
| `game.played` | A review-collection game is played |
| `lead_magnet.lead` | A lead magnet captures a lead |

---

## 4. Content negotiation on localnord.io

Every page of https://www.localnord.io is available as Markdown: send `Accept: text/markdown` and the same URL returns `text/markdown; charset=utf-8` with `Vary: Accept`. Unsupported media types return `406`.

```bash
curl -H "Accept: text/markdown" https://www.localnord.io/en/pricing
```

Other machine-readable entry points:

| URL | Content |
|---|---|
| https://www.localnord.io/llms.txt | AI index of the site |
| https://www.localnord.io/sitemap.xml | Full sitemap |
| https://www.localnord.io/kb/README.md | Public knowledge base index |
| https://www.localnord.io/mcp | MCP manifest (JSON when negotiated) |

---

## 5. Support

Technical questions: **contact@localnord.io**. Product questions and access to the dashboard where API keys are created: https://app.localnord.io.

*This file lists public integration facts. The dashboard documentation is authoritative for endpoint-level details.*
