---
title: "What a shop STATES about its own policies, each fact with the date it was last checked and where it was read: return window in days (returns_days), free return label, tracking offered, payment methods, buyer-protection seal, plus the shipping statement (destinations, stated delivery time, free-shipping threshold). Use it for questions such as \"how long can I return something at this shop?\". These are shop-level statements, NOT offers and NOT quotes: no carrier, no shipping price. Every fact in `policies` is an object with `collected`: when true it carries value, checked_at and source (policy_page = read from the shop, llm_gap_resolution = model-derived, say so when relaying); when false it carries a reason and means OpenShopGraph holds no checked value — a gap in the data, NOT a statement that the shop has no such policy. A fact whose value and check date are stored but whose source is unknown is also reported as collected:false (reason no_source): a value without a source is never shown. Pass country (ISO 3166-1 alpha-2, e.g. \"DE\") to get a ships_to verdict derived from the stated destination list — \"unknown\" is a real answer there. Relay checked_at alongside any figure so a stale claim is not read as current. `get_shipping_policy` is the earlier name of this tool and returns the same answer."
method: POST
path: "/tool/get_shop_policies"
---

# What a shop STATES about its own policies, each fact with the date it was last checked and where it was read: return window in days (returns_days), free return label, tracking offered, payment methods, buyer-protection seal, plus the shipping statement (destinations, stated delivery time, free-shipping threshold). Use it for questions such as "how long can I return something at this shop?". These are shop-level statements, NOT offers and NOT quotes: no carrier, no shipping price. Every fact in \`policies\` is an object with \`collected\`: when true it carries value, checked_at and source (policy_page = read from the shop, llm_gap_resolution = model-derived, say so when relaying); when false it carries a reason and means OpenShopGraph holds no checked value — a gap in the data, NOT a statement that the shop has no such policy. A fact whose value and check date are stored but whose source is unknown is also reported as collected:false (reason no_source): a value without a source is never shown. Pass country (ISO 3166-1 alpha-2, e.g. "DE") to get a ships_to verdict derived from the stated destination list — "unknown" is a real answer there. Relay checked_at alongside any figure so a stale claim is not read as current. \`get_shipping_policy\` is the earlier name of this tool and returns the same answer.

`POST /tool/get_shop_policies`

## Request

- Base URL: `https://api.openshopgraph.com`
- URL: `https://api.openshopgraph.com/tool/get_shop_policies`
- Auth: one of:
  - none
  - API key in header `x-api-token`

## Request body

- object
  - `shop_domain` string, required: Shop domain, e.g. "otto.de". An internal OpenShopGraph shop id is accepted here as well. The older field name `shop_id_or_domain` still works on every tool and means exactly the same thing.
  - `country` string

## Response `200`

OK

## Other responses

- `400`: invalid input
- `404`: not found

---

[API](https://skmtc.dev/openshopgraph/apis/openshopgraph-mcp-server.md) · [All operations](https://skmtc.dev/openshopgraph/apis/openshopgraph-mcp-server/llms.txt) · [OpenAPI document](https://skmtc.dev/openshopgraph/apis/openshopgraph-mcp-server/revisions/5a5ef86dcc0a?raw)
