# ChibiGeo > Flat-rate, privacy-first geocoding. Hard caps, no overage. - [ChibiGeo](/index.md) ## blog - [ChibiGeo blog](/blog.md): Notes on geocoding, self-hosting and running a flat-rate API: cost breakdowns, Photon internals and what we learn operating ChibiGeo from the EU. - [Authors](/blog/authors.md) - [Tags](/blog/tags.md): Every topic covered on the ChibiGeo blog — Photon, self-hosting, geocoding and infrastructure costs — with the posts filed under each one. - [One post tagged with "Costs"](/blog/tags/costs.md): Posts on what geocoding actually costs: server bills for self-hosting, per-request API pricing, and the arithmetic behind flat-rate plans. - [One post tagged with "Geocoding"](/blog/tags/geocoding.md): Posts on geocoding and reverse geocoding: turning addresses into coordinates and back, the APIs that do it, and how they price and limit the work. - [One post tagged with "Photon"](/blog/tags/photon.md): Posts about Photon: the open-source OpenStreetMap geocoder ChibiGeo runs, its public demo server, hardware requirements and self-hosting trade-offs. - [One post tagged with "Self-hosting"](/blog/tags/self-hosting.md): Posts on self-hosting geocoding infrastructure: what the hardware really costs, what upkeep it takes, and when a hosted endpoint is the better deal. - [What does it actually cost to self-host a planet Photon?](/blog/what-planet-photon-actually-costs.md): Photon needs a 95 GB index and 64 GB of RAM. Nobody turns that into a monthly bill — here is the arithmetic at real dedicated-server prices, and the verdict. ## contact - [Contact](/contact.md): How to reach ChibiGeo about the geocoding service, billing, your account or privacy, plus the company details for ZeitFlow UG in Berlin, Germany. ## impressum - [Impressum](/impressum.md): Legal disclosure for ChibiGeo under § 5 DDG: ZeitFlow UG (haftungsbeschränkt) in Berlin — address, management, register entry and contact details. ## privacy-policy - [ChibiGeo Privacy Policy](/privacy-policy.md): What personal data ChibiGeo processes, why, on what legal basis, and the rights you have under the GDPR. No selling, no renting, no tracking of end users. ## refund-policy - [Refund Policy](/refund-policy.md): How refunds work on ChibiGeo's monthly and annual plans, what the free plan covers, and how to cancel a subscription or ask for your money back. ## terms-and-conditions - [Terms and Conditions](/terms-and-conditions.md): The terms governing ChibiGeo accounts, API usage, plan limits, billing and cancellation, for the geocoding service operated by ZeitFlow UG in Berlin. ## docs - [API Documentation](/docs/api-doc.md): ChibiGeo's Photon-compatible geocoding and reverse geocoding API: base URL, authentication, request parameters and GeoJSON responses, with worked examples. - [About Photon](/docs/category/about-photon.md): Background on Photon geocoding: what the public photon.komoot.io server actually allows, and what running your own planet instance really costs. - [Comparisons](/docs/category/comparisons.md): How ChibiGeo compares with other geocoding APIs and engines — Nominatim, Geoapify, LocationIQ and OpenCage — on price, hosting, data and limits. - [Integration Guides](/docs/category/integration-guides.md): Step-by-step guides for pointing self-hosted apps — Dawarich, Traccar, Reitti, GeoPulse — at ChibiGeo's Photon-compatible geocoding endpoint. - [Photon vs Nominatim: which OSM geocoder should you use?](/docs/compare/photon-vs-nominatim.md): Photon and Nominatim are the two main open-source OpenStreetMap geocoders. How they differ in search behaviour, self-hosting cost and public-server limits. - [ChibiGeo vs Geoapify, LocationIQ & OpenCage](/docs/compare/vs-geoapify-locationiq-opencage.md): An honest comparison of hosted geocoding APIs: where ChibiGeo's flat-rate, EU-only endpoint fits, and where Geoapify, LocationIQ and OpenCage do better. - [How to set up geocoding for self-hosted Dawarich](/docs/guides/dawarich-self-hosted-geocoding.md): Point self-hosted Dawarich's reverse geocoding at ChibiGeo with three environment variables, instead of running your own 95 GB planet Photon instance. - [Hosted Photon geocoding for GeoPulse](/docs/guides/geopulse-geocoding.md): Point GeoPulse's reverse geocoding at ChibiGeo, a flat-rate EU-hosted Photon endpoint. Works with stock GeoPulse by carrying your key in the base URL. - [Hosted Photon geocoding for Reitti](/docs/guides/reitti-geocoding.md): Point Reitti's reverse geocoding at ChibiGeo, a flat-rate EU-hosted Photon endpoint. Works with stock Reitti by carrying your key in the base URL. - [Reverse geocoding for Traccar without Google](/docs/guides/traccar-reverse-geocoding.md): Turn GPS coordinates into street addresses in Traccar with ChibiGeo, a flat-rate EU-hosted Photon geocoder. No Google key, no per-request billing. - [Geo MCP](/docs/mcp/geo-mcp.md): Connect Codex, Claude Code, or Cursor to ChibiGeo's hosted Photon geocoder through two read-only MCP tools. - [photon.komoot.io rate limits (and what to do about them)](/docs/photon/komoot-io-rate-limits.md): The public photon.komoot.io server is throttled and unguaranteed. What its policy actually says, and your options when you need Photon geocoding you can trust. - [What it takes to self-host Photon](/docs/photon/self-hosting-photon.md): The honest cost of running your own planet Photon geocoder — disk, RAM, import time and upkeep — and the point where a hosted endpoint is the better trade. --- # Full Documentation Content ## [What does it actually cost to self-host a planet Photon?](/blog/what-planet-photon-actually-costs/.md) August 7, 2026 · 4 min read [Evgenii](https://chibigeo.com) ChibiGeo — ZeitFlow UG, Berlin The [ChibiGeo docs on self-hosting Photon](/docs/photon/self-hosting-photon/.md) tell you what the software needs: roughly **95 GB** for the planet index, and per Photon's own documentation **64 GB of RAM** for smooth operation. That is an accurate answer to a question nobody actually asked. What people want to know is what those numbers cost in euros every month, and whether it is worth it. So here is the arithmetic, with real prices you can check. **Tags:** * [Photon](/blog/tags/photon/.md "Posts about Photon: the open-source OpenStreetMap geocoder ChibiGeo runs, its public demo server, hardware requirements and self-hosting trade-offs.") * [Self-hosting](/blog/tags/self-hosting/.md "Posts on self-hosting geocoding infrastructure: what the hardware really costs, what upkeep it takes, and when a hosted endpoint is the better deal.") * [Geocoding](/blog/tags/geocoding/.md "Posts on geocoding and reverse geocoding: turning addresses into coordinates and back, the APIs that do it, and how they price and limit the work.") * [Costs](/blog/tags/costs/.md "Posts on what geocoding actually costs: server bills for self-hosting, per-request API pricing, and the arithmetic behind flat-rate plans.") [**Read more**](/blog/what-planet-photon-actually-costs/.md) --- # Authors * ## [Evgenii](https://chibigeo.com) 1 ChibiGeo — ZeitFlow UG, Berlin --- ## C[​](#C "Direct link to C") * [Costs1](/blog/tags/costs/.md "Posts on what geocoding actually costs: server bills for self-hosting, per-request API pricing, and the arithmetic behind flat-rate plans.") *** --- ## [What does it actually cost to self-host a planet Photon?](/blog/what-planet-photon-actually-costs/.md) August 7, 2026 · 4 min read [Evgenii](https://chibigeo.com) ChibiGeo — ZeitFlow UG, Berlin The [ChibiGeo docs on self-hosting Photon](/docs/photon/self-hosting-photon/.md) tell you what the software needs: roughly **95 GB** for the planet index, and per Photon's own documentation **64 GB of RAM** for smooth operation. That is an accurate answer to a question nobody actually asked. What people want to know is what those numbers cost in euros every month, and whether it is worth it. So here is the arithmetic, with real prices you can check. **Tags:** * [Photon](/blog/tags/photon/.md "Posts about Photon: the open-source OpenStreetMap geocoder ChibiGeo runs, its public demo server, hardware requirements and self-hosting trade-offs.") * [Self-hosting](/blog/tags/self-hosting/.md "Posts on self-hosting geocoding infrastructure: what the hardware really costs, what upkeep it takes, and when a hosted endpoint is the better deal.") * [Geocoding](/blog/tags/geocoding/.md "Posts on geocoding and reverse geocoding: turning addresses into coordinates and back, the APIs that do it, and how they price and limit the work.") * [Costs](/blog/tags/costs/.md "Posts on what geocoding actually costs: server bills for self-hosting, per-request API pricing, and the arithmetic behind flat-rate plans.") [**Read more**](/blog/what-planet-photon-actually-costs/.md) --- ## [What does it actually cost to self-host a planet Photon?](/blog/what-planet-photon-actually-costs/.md) August 7, 2026 · 4 min read [Evgenii](https://chibigeo.com) ChibiGeo — ZeitFlow UG, Berlin The [ChibiGeo docs on self-hosting Photon](/docs/photon/self-hosting-photon/.md) tell you what the software needs: roughly **95 GB** for the planet index, and per Photon's own documentation **64 GB of RAM** for smooth operation. That is an accurate answer to a question nobody actually asked. What people want to know is what those numbers cost in euros every month, and whether it is worth it. So here is the arithmetic, with real prices you can check. **Tags:** * [Photon](/blog/tags/photon/.md "Posts about Photon: the open-source OpenStreetMap geocoder ChibiGeo runs, its public demo server, hardware requirements and self-hosting trade-offs.") * [Self-hosting](/blog/tags/self-hosting/.md "Posts on self-hosting geocoding infrastructure: what the hardware really costs, what upkeep it takes, and when a hosted endpoint is the better deal.") * [Geocoding](/blog/tags/geocoding/.md "Posts on geocoding and reverse geocoding: turning addresses into coordinates and back, the APIs that do it, and how they price and limit the work.") * [Costs](/blog/tags/costs/.md "Posts on what geocoding actually costs: server bills for self-hosting, per-request API pricing, and the arithmetic behind flat-rate plans.") [**Read more**](/blog/what-planet-photon-actually-costs/.md) --- ## [What does it actually cost to self-host a planet Photon?](/blog/what-planet-photon-actually-costs/.md) August 7, 2026 · 4 min read [Evgenii](https://chibigeo.com) ChibiGeo — ZeitFlow UG, Berlin The [ChibiGeo docs on self-hosting Photon](/docs/photon/self-hosting-photon/.md) tell you what the software needs: roughly **95 GB** for the planet index, and per Photon's own documentation **64 GB of RAM** for smooth operation. That is an accurate answer to a question nobody actually asked. What people want to know is what those numbers cost in euros every month, and whether it is worth it. So here is the arithmetic, with real prices you can check. **Tags:** * [Photon](/blog/tags/photon/.md "Posts about Photon: the open-source OpenStreetMap geocoder ChibiGeo runs, its public demo server, hardware requirements and self-hosting trade-offs.") * [Self-hosting](/blog/tags/self-hosting/.md "Posts on self-hosting geocoding infrastructure: what the hardware really costs, what upkeep it takes, and when a hosted endpoint is the better deal.") * [Geocoding](/blog/tags/geocoding/.md "Posts on geocoding and reverse geocoding: turning addresses into coordinates and back, the APIs that do it, and how they price and limit the work.") * [Costs](/blog/tags/costs/.md "Posts on what geocoding actually costs: server bills for self-hosting, per-request API pricing, and the arithmetic behind flat-rate plans.") [**Read more**](/blog/what-planet-photon-actually-costs/.md) --- ## [What does it actually cost to self-host a planet Photon?](/blog/what-planet-photon-actually-costs/.md) August 7, 2026 · 4 min read [Evgenii](https://chibigeo.com) ChibiGeo — ZeitFlow UG, Berlin The [ChibiGeo docs on self-hosting Photon](/docs/photon/self-hosting-photon/.md) tell you what the software needs: roughly **95 GB** for the planet index, and per Photon's own documentation **64 GB of RAM** for smooth operation. That is an accurate answer to a question nobody actually asked. What people want to know is what those numbers cost in euros every month, and whether it is worth it. So here is the arithmetic, with real prices you can check. **Tags:** * [Photon](/blog/tags/photon/.md "Posts about Photon: the open-source OpenStreetMap geocoder ChibiGeo runs, its public demo server, hardware requirements and self-hosting trade-offs.") * [Self-hosting](/blog/tags/self-hosting/.md "Posts on self-hosting geocoding infrastructure: what the hardware really costs, what upkeep it takes, and when a hosted endpoint is the better deal.") * [Geocoding](/blog/tags/geocoding/.md "Posts on geocoding and reverse geocoding: turning addresses into coordinates and back, the APIs that do it, and how they price and limit the work.") * [Costs](/blog/tags/costs/.md "Posts on what geocoding actually costs: server bills for self-hosting, per-request API pricing, and the arithmetic behind flat-rate plans.") [**Read more**](/blog/what-planet-photon-actually-costs/.md) --- # What does it actually cost to self-host a planet Photon? August 7, 2026 · 4 min read [Evgenii](https://chibigeo.com) ChibiGeo — ZeitFlow UG, Berlin The [ChibiGeo docs on self-hosting Photon](/docs/photon/self-hosting-photon/.md) tell you what the software needs: roughly **95 GB** for the planet index, and per Photon's own documentation **64 GB of RAM** for smooth operation. That is an accurate answer to a question nobody actually asked. What people want to know is what those numbers cost in euros every month, and whether it is worth it. So here is the arithmetic, with real prices you can check. ## The cheapest box that actually fits[​](#the-cheapest-box-that-actually-fits "Direct link to The cheapest box that actually fits") The binding constraint is RAM, not disk. 95 GB of index fits on almost anything; 64 GB of memory does not. On [Hetzner](https://www.hetzner.com/dedicated-rootserver/), the cheapest dedicated servers that clear the bar look like this: | Server | RAM | Storage | Price/month | | ------ | -------------- | --------------- | ---------------- | | EX44 | 64 GB | 2 × 512 GB NVMe | **€44** | | AX42 | 64 GB | 2 × 512 GB NVMe | €49 | | SX65 | 64 GB DDR4 ECC | 2 × 1 TB NVMe | €104 + €39 setup | All excluding VAT, and some lines carry a one-time setup fee. Call it **€44/month** for the entry point, or a little over **€500 a year** before tax. That is the honest floor. You will see people running Photon on a 32 GB box, and it works — the index is memory-mapped, so the OS pages what it needs. It just gets slower under concurrency, and reverse-geocoding a large backlog is exactly the workload that punishes a small page cache. ## The costs that are not on the invoice[​](#the-costs-that-are-not-on-the-invoice "Direct link to The costs that are not on the invoice") The €44 is the part that is easy to count. The rest: **The initial import.** Building a planet index is measured in hours, not minutes, and it wants disk and CPU while it runs. You do this once, and then again every time you want fresher data. **Staying current.** OpenStreetMap does not hold still. An index built in January is January's world. Keeping it fresh means re-importing or running updates, and that is a recurring chore you own. **Being on call for yourself.** When the index gets corrupted, or the box runs out of inodes at an inconvenient moment, or Elasticsearch decides today is the day — that is yours. It is not hard. It is just never zero. None of this is an argument against self-hosting. It is an argument against pretending the cost is €44. ## The case for doing it anyway[​](#the-case-for-doing-it-anyway "Direct link to The case for doing it anyway") Self-hosting genuinely wins on three things, and they are not small ones. **No cap, ever.** Your own box does not meter you. If you are geocoding tens of millions of points, no subscription competes — the hardware amortises and then you are just paying for electricity someone else bought. **Nothing leaves your network.** Every hosted geocoder, ChibiGeo included, sees the coordinates you send it. If your threat model says your location history never touches another party's infrastructure, that is a real requirement and no amount of privacy-policy language substitutes for it. **No dependency.** Providers change pricing, get acquired, and shut down. A box in a rack does not. ## When the arithmetic goes the other way[​](#when-the-arithmetic-goes-the-other-way "Direct link to When the arithmetic goes the other way") The comparison only tips when your volume is low relative to the hardware. ChibiGeo's **Self-Hoster** plan is €9.99/month for 500,000 requests — roughly a fifth of the entry dedicated server, for what a personal location timeline actually consumes. **Builder** is €29/month for 500,000 general-purpose requests. For a personal Dawarich instance labelling your own GPS points, €44/month of dedicated hardware to run a planet index is a lot of machine for the job. For a company geocoding continuously at scale, it is obviously cheaper than any per-request API, and you should run your own. The dishonest version of this post would stop before that last paragraph. The useful version is: work out your monthly request volume first, then pick. If you land above a couple of million requests a month, buy the box — Photon is good software and [self-hosting it is well documented](/docs/photon/self-hosting-photon/.md). If you land below that, paying someone else to keep 64 GB of RAM warm is the cheaper trade. *** *Prices checked August 2026 from Hetzner's public pricing and quoted excluding VAT. Hardware pricing moves; the arithmetic is what matters, not the exact figure.* **Tags:** * [Photon](/blog/tags/photon/.md "Posts about Photon: the open-source OpenStreetMap geocoder ChibiGeo runs, its public demo server, hardware requirements and self-hosting trade-offs.") * [Self-hosting](/blog/tags/self-hosting/.md "Posts on self-hosting geocoding infrastructure: what the hardware really costs, what upkeep it takes, and when a hosted endpoint is the better deal.") * [Geocoding](/blog/tags/geocoding/.md "Posts on geocoding and reverse geocoding: turning addresses into coordinates and back, the APIs that do it, and how they price and limit the work.") * [Costs](/blog/tags/costs/.md "Posts on what geocoding actually costs: server bills for self-hosting, per-request API pricing, and the arithmetic behind flat-rate plans.") --- # Contact If you have a question about ChibiGeo — the geocoding service, billing, your account, or privacy — email us at . Your message goes directly to the small team operating the service in Berlin; there is no sales queue or outsourced support desk. ## Technical support[​](#technical-support "Direct link to Technical support") For an API problem, include the endpoint you called, the approximate time and time zone, the HTTP status, and a short description of what you expected. A minimal request that reproduces the problem is especially useful. If the response contains a request identifier, include that too. Never send your API key, password, session cookie, or a complete location history. Replace the key with `REDACTED`, and reduce coordinates or addresses to the smallest example needed to explain the issue. The [API documentation](/docs/api-doc/.md) lists the supported parameters and response formats, and the live service check is available at [app.chibigeo.com/v1/photon/status](https://app.chibigeo.com/v1/photon/status). ## Accounts, plans, and billing[​](#accounts-plans-and-billing "Direct link to Accounts, plans, and billing") For an account question, write from the email address attached to the account when possible. Tell us which plan you use and what you were trying to change, but do not include a password or API key. For a billing or refund question, include the plan, charge date, and Stripe receipt or invoice reference. ChibiGeo's first-payment guarantee is explained in the [refund policy](/refund-policy/.md); subscription terms and cancellation details are in the [terms and conditions](/terms-and-conditions/.md). ## Privacy and legal requests[​](#privacy-and-legal-requests "Direct link to Privacy and legal requests") Use the same contact address for access, correction, deletion, or objection requests under the GDPR. Say which right you want to exercise and which account the request concerns. We may need to verify that you control the account before acting, but we will not ask you to send a password or API key. How ChibiGeo processes account, billing, and API traffic data is described in the [privacy policy](/privacy-policy/.md). Company registration and management details are listed in the [Impressum](/impressum/.md). --- # Impressum Information pursuant to § 5 DDG (Digitale-Dienste-Gesetz). **Operator of ChibiGeo:** ZeitFlow UG (haftungsbeschränkt)
Kolonnenstraße 8
10827 Berlin
Germany **Vertreten durch / Managing Director:**
Evgenii Burmakin **Handelsregister:**
Registergericht: Amtsgericht Charlottenburg
Registernummer: HRB 273957 **VAT ID (USt-IdNr. per § 27a UStG):** DE455264194 **Contact:** E-Mail: ## Consumer dispute resolution / Verbraucherstreitbeilegung[​](#consumer-dispute-resolution--verbraucherstreitbeilegung "Direct link to Consumer dispute resolution / Verbraucherstreitbeilegung") The European Commission provides a platform for online dispute resolution (ODR): . Our e-mail address is given above. We are not obligated and not willing to participate in dispute resolution proceedings before a consumer arbitration board (Verbraucherschlichtungsstelle). --- # ChibiGeo Privacy Policy We take your privacy seriously. We collect only the personal data necessary to provide our service, and we never sell or rent your data to anyone. This policy explains what personal data we process, why, on what legal basis, and the rights you have under the EU General Data Protection Regulation (GDPR). ## Who is responsible (Controller)[​](#who-is-responsible-controller "Direct link to Who is responsible (Controller)") ZeitFlow UG (haftungsbeschränkt) Kolonnenstraße 8, 10827 Berlin, Germany E-Mail: See our [Impressum](/impressum/.md) for full company details. ## Scope[​](#scope "Direct link to Scope") This policy applies to the ChibiGeo geocoding API, including Geo MCP, and the account dashboard at app.chibigeo.com, operated by ZeitFlow UG (haftungsbeschränkt) ("we", "us"). ChibiGeo is a hosted service; we do not offer an iOS app or a self-hosted edition. ## What data we process[​](#what-data-we-process "Direct link to What data we process") ### Account data[​](#account-data "Direct link to Account data") Collected when you register and used to operate your account. * Email address * Password (stored only as a salted hash — we never see your plaintext password) * User ID and account status * API keys (stored hashed; we record the key prefix and the time it was last used) * Account settings **Legal basis:** Art. 6(1)(b) GDPR — performance of the contract. ### Billing data[​](#billing-data "Direct link to Billing data") If you subscribe to a paid plan, payment is handled by our third-party payment processor (Stripe). We do not receive or store your full card details; we receive the information needed to manage your subscription (e.g. plan, status, invoices, billing country). **Legal basis:** Art. 6(1)(b) GDPR — performance of the contract; Art. 6(1)(c) — legal obligations (e.g. tax/invoicing). ### Geocoding queries[​](#geocoding-queries "Direct link to Geocoding queries") When you call the API, the coordinates or search terms you send are processed transiently to return a result. **We do not store the contents of your geocoding queries.** We do keep aggregate request counts per account to enforce plan limits. **Legal basis:** Art. 6(1)(b) GDPR — performance of the contract. ### Technical logs and metrics[​](#technical-logs-and-metrics "Direct link to Technical logs and metrics") * Server and error logs (may include IP address and request metadata), retained for a maximum of 30 days and used for security and debugging. Error traces may be sent to a bug-tracking service (e.g. Sentry). * Anonymous, aggregated usage metrics (e.g. total request volume). These are not used to track or profile individual users, and we do not use cross-site or advertising trackers. **Legal basis:** Art. 6(1)(f) GDPR — our legitimate interest in operating, securing, and improving the service. ## Where data is stored[​](#where-data-is-stored "Direct link to Where data is stored") All data is transmitted over HTTPS and stored on our infrastructure within the EU, including encrypted database storage and backups. The one exception is billing: our payment processor, Stripe, may process and transfer payment data to the United States under EU Standard Contractual Clauses and/or the EU–US Data Privacy Framework. Apart from that, we do not transfer personal data outside the EU/EEA. ## Recipients and processors[​](#recipients-and-processors "Direct link to Recipients and processors") We share data only with processors acting on our instructions and only as needed to run the service — for example our EU hosting provider, our payment processor (for paid plans), and our error-tracking provider. We do not sell, rent, or trade personal data. ## Data retention[​](#data-retention "Direct link to Data retention") * **Account data:** kept while your account is active. On account deletion (by you in the dashboard or on request), it is removed from live systems promptly and purged from backups within 30 days. * **Logs:** maximum 30 days. * **Geocoding query contents:** not stored. * **Billing records:** retained as required by statutory tax/commercial-law obligations. ## Your rights[​](#your-rights "Direct link to Your rights") Under the GDPR you have the right to: access your data (Art. 15), rectification (Art. 16), erasure (Art. 17), restriction of processing (Art. 18), data portability (Art. 20), and to object to processing based on legitimate interests (Art. 21). Where processing relies on consent, you may withdraw it at any time. To exercise any of these, email . You also have the right to lodge a complaint with a supervisory authority. Our competent authority is the **Berliner Beauftragte für Datenschutz und Informationsfreiheit** (Berlin Commissioner for Data Protection and Freedom of Information). ## Children[​](#children "Direct link to Children") ChibiGeo is intended for users aged 18 and over and is not directed at children. We do not knowingly collect personal data from anyone under 18. If you believe a minor has provided personal data, contact us and we will remove it. ## Security[​](#security "Direct link to Security") We take reasonable technical and organizational measures to protect your data, including encryption in transit and at rest and access controls. ## Changes to this policy[​](#changes-to-this-policy "Direct link to Changes to this policy") We may update this policy from time to time. Material changes will be communicated, and the "last updated" date below will be revised. ## Contact[​](#contact "Direct link to Contact") Questions about privacy? Email . ## Last updated[​](#last-updated "Direct link to Last updated") | When | What | | ---------- | ------------------------------------------------------------- | | 2026-09-05 | Clarified that the policy also covers Geo MCP | | 2026-06-16 | Rewritten for ChibiGeo; added GDPR rights, billing, retention | | 2025-08-22 | Initial version | --- # Refund Policy Effective Date: 2026-06-16 ## 1. Plans and billing[​](#1-plans-and-billing "Direct link to 1. Plans and billing") ChibiGeo offers a free plan and paid plans. Paid plans are billed either monthly or annually, depending on the billing cycle you choose, and renew automatically at the end of each cycle. There is nothing to refund on the free plan. ## 2. 30-day money-back guarantee[​](#2-30-day-money-back-guarantee "Direct link to 2. 30-day money-back guarantee") When you first subscribe to any paid plan, you have **30 days** to request a full refund — one email, no questions asked. Email and we'll refund that first payment. ## 3. Statutory right of withdrawal (EU consumers)[​](#3-statutory-right-of-withdrawal-eu-consumers "Direct link to 3. Statutory right of withdrawal (EU consumers)") If you are a consumer in the EU, you also have a statutory 14-day right of withdrawal for distance contracts. This right is independent of, and additional to, the 30-day guarantee above. See our [Terms and Conditions](/terms-and-conditions/.md) for details. ## 4. Cancellation[​](#4-cancellation "Direct link to 4. Cancellation") You can cancel at any time from your account dashboard. Cancellation takes effect at the end of the current billing cycle, and you keep access until then. ## 5. Renewals[​](#5-renewals "Direct link to 5. Renewals") Renewal charges (after your first subscription period) are not covered by the 30-day guarantee. To avoid a renewal charge, cancel before the cycle renews. Your statutory consumer rights are unaffected, and we will always honor refunds required by applicable law. ## 6. Contact for refund requests[​](#6-contact-for-refund-requests "Direct link to 6. Contact for refund requests") For any billing or refund question, contact . --- # Terms and Conditions ## 0. General terms[​](#0-general-terms "Direct link to 0. General terms") You need an account to use ChibiGeo. You must be at least 18 years of age to use ChibiGeo. We reserve the right to change the service or any of its functionalities at any time. Your use of the service does not imply any form of partnership or joint venture. ## 1. Introduction[​](#1-introduction "Direct link to 1. Introduction") ChibiGeo is operated by ZeitFlow UG (haftungsbeschränkt), a company registered in Germany (see [Impressum](/impressum/.md)). These Terms & Conditions govern your use of the service. By accessing or using ChibiGeo, you agree to these terms. ## 2. Plans and subscriptions[​](#2-plans-and-subscriptions "Direct link to 2. Plans and subscriptions") ChibiGeo offers a free plan and paid plans. Current plans, request limits, and prices are listed at [chibigeo.com/#pricing](/index.md#pricing). * The **free plan** has no charge and a daily request limit (currently 2,500 requests per day), which resets every day at 00:00 UTC. * **Paid plans** are billed either monthly or annually, depending on the billing cycle you choose at checkout, and renew automatically at the end of each cycle. Each paid plan has a hard monthly request cap. * You can cancel at any time from your account dashboard. Cancellation takes effect at the end of the current billing cycle; you keep access until then. * When you switch between paid plans, the change takes effect immediately and the price difference is prorated by our payment processor. * Requests beyond your plan's cap are rejected (HTTP 429) until the cap resets — there is no metered billing or overage charge. ## 3. Right of withdrawal (consumers)[​](#3-right-of-withdrawal-consumers "Direct link to 3. Right of withdrawal (consumers)") If you are a consumer in the EU, you have a statutory right to withdraw from the contract within 14 days. Because ChibiGeo is a digital service supplied immediately, by subscribing you expressly request that we begin performance during the withdrawal period and acknowledge the corresponding statutory consequences. Separately, we offer a 30-day money-back guarantee on your first paid subscription — see our [Refund Policy](/refund-policy/.md). ## 4. User responsibilities[​](#4-user-responsibilities "Direct link to 4. User responsibilities") Users must provide accurate information during registration. Users must not misuse the service, attempt unauthorized access, exceed technical limits by circumventing them, or engage in illegal activities. ## 5. Abuse[​](#5-abuse "Direct link to 5. Abuse") We reserve the right to suspend or cancel the account of any user we, at our sole discretion, deem to be abusing the service. ## 6. Service availability[​](#6-service-availability "Direct link to 6. Service availability") ChibiGeo is provided "as is" without a warranty of uninterrupted service. We aim to maintain reliable access and will communicate significant changes in advance. If we ever discontinue the service, we will give reasonable notice. ## 7. Liability disclaimer[​](#7-liability-disclaimer "Direct link to 7. Liability disclaimer") We cannot guarantee uninterrupted availability and are not responsible for losses caused by factors beyond our control, such as third-party failures or force majeure. To the extent permitted by law, ChibiGeo is not liable for indirect, incidental, or consequential damages arising from use of the service. Statutory liability that cannot be excluded (e.g. for intent, gross negligence, or under product-liability law) remains unaffected. ## 8. Governing law and jurisdiction[​](#8-governing-law-and-jurisdiction "Direct link to 8. Governing law and jurisdiction") These terms are governed by the laws of the Federal Republic of Germany, without prejudice to mandatory consumer-protection rules of your country of residence. The EU online dispute resolution platform is available at . ## 9. Changes to the terms[​](#9-changes-to-the-terms "Direct link to 9. Changes to the terms") We reserve the right to update these terms and will notify users of material changes. ## Contact[​](#contact "Direct link to Contact") Questions? Email . ## Last updated[​](#last-updated "Direct link to Last updated") | When | What | | ---------- | ------------------------------------------------------------------------------- | | 2026-06-22 | Free plan moved to a daily cap; clarified prorated plan switches | | 2026-06-16 | Updated for free + monthly/annual plans; added withdrawal right & governing law | | 2025-08-22 | Initial version | --- # API Documentation ChibiGeo is a geocoding and reverse geocoding API based on OpenStreetMap data, built on top of [Photon](https://github.com/komoot/photon). It converts addresses into geographic coordinates (latitude and longitude) and vice versa, and is **Photon-compatible** — most Photon clients work by simply pointing them at ChibiGeo. * **Base URL:** `https://app.chibigeo.com/v1/photon` * **Format:** every endpoint returns GeoJSON (`FeatureCollection`). ## Features[​](#features "Direct link to Features") * **Geocoding** — convert an address or place name into geographic coordinates. * **Reverse geocoding** — convert geographic coordinates into a human-readable place. ## Authentication[​](#authentication "Direct link to Authentication") Every geocoding request must include your API key. You can pass it in either of two headers: ``` X-Api-Key: YOUR_API_KEY ``` ``` Authorization: Bearer YOUR_API_KEY ``` If both are present, `X-Api-Key` takes precedence. The `/status` endpoint is public and needs no key. ## Geocoding[​](#geocoding "Direct link to Geocoding") Convert a human-readable address or place name into geographic coordinates. ``` GET https://app.chibigeo.com/v1/photon/api ``` | Parameter | Required | Description | | ----------------------------- | -------- | -------------------------------------------------------------------- | | `q` | yes | The search query (address or place name). | | `limit` | no | Maximum number of results. | | `lang` | no | Language for the results (e.g. `en`, `de`). | | `lat`, `lon` | no | Bias results toward this location. | | `zoom`, `location_bias_scale` | no | Tune how strongly the location bias is applied. | | `bbox` | no | Restrict results to a bounding box (`minLon,minLat,maxLon,maxLat`). | | `countrycode` | no | Restrict results to one ISO 3166-1 alpha-2 country code (e.g. `DE`). | | `layer` | no | Restrict to a feature layer (e.g. `house`, `street`, `city`). | | `osm_tag` | no | Filter by OSM tag (e.g. `tourism:attraction`). | | `dedupe` | no | Deduplicate results. | ### Example Request[​](#example-request "Direct link to Example Request") ``` curl 'https://app.chibigeo.com/v1/photon/api?q=Brandenburger+Tor,+Berlin&limit=1' \ --header 'X-Api-Key: YOUR_API_KEY' ``` ### Example Response[​](#example-response "Direct link to Example Response") ``` { "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "osm_type": "W", "osm_id": 518071791, "osm_key": "tourism", "osm_value": "attraction", "type": "house", "housenumber": "1", "name": "Brandenburger Tor", "street": "Pariser Platz", "locality": "Friedrich-Wilhelm-Stadt", "district": "Mitte", "city": "Berlin", "country": "Deutschland", "postcode": "10117", "countrycode": "DE", "extent": [13.3775798, 52.5164328, 13.3778251, 52.516117] }, "geometry": { "type": "Point", "coordinates": [13.3777034, 52.5162699] } } ] } ``` ## Reverse Geocoding[​](#reverse-geocoding "Direct link to Reverse Geocoding") Convert geographic coordinates into a human-readable place. ``` GET https://app.chibigeo.com/v1/photon/reverse ``` | Parameter | Required | Description | | --------- | -------- | ------------------------------------------------------------- | | `lat` | yes | Latitude. | | `lon` | yes | Longitude. | | `limit` | no | Maximum number of results. | | `lang` | no | Language for the results (e.g. `en`, `de`). | | `radius` | no | Search radius. | | `layer` | no | Restrict to a feature layer (e.g. `house`, `street`, `city`). | | `osm_tag` | no | Filter by OSM tag. | | `dedupe` | no | Deduplicate results. | ### Example Request[​](#example-request-1 "Direct link to Example Request") ``` curl 'https://app.chibigeo.com/v1/photon/reverse?lat=52.5162&lon=13.3778' \ --header 'X-Api-Key: YOUR_API_KEY' ``` ### Example Response[​](#example-response-1 "Direct link to Example Response") ``` { "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "osm_type": "W", "osm_id": 518071791, "osm_key": "tourism", "osm_value": "attraction", "name": "Brandenburger Tor", "housenumber": "1", "street": "Pariser Platz", "district": "Mitte", "city": "Berlin", "postcode": "10117", "country": "Deutschland", "countrycode": "DE" }, "geometry": { "type": "Point", "coordinates": [13.3777034, 52.5162699] } } ] } ``` ## Status[​](#status "Direct link to Status") A public health check — no API key required. ``` curl 'https://app.chibigeo.com/v1/photon/status' ``` ``` { "import_date": "2025-11-02T00:01:55Z", "status": "Ok" } ``` ## Errors[​](#errors "Direct link to Errors") Errors are returned as JSON with an `error` field and the matching HTTP status code. | Status | `error` | Meaning | | ------ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------- | | `401` | `missing_api_key` | No API key was provided in the request headers. | | `401` | `invalid_api_key` | The API key was not recognized. | | `429` | `limit_exceeded` | You've hit your plan's request cap. The free plan resets daily at 00:00 UTC; paid plans reset at the start of next month. | | `503` | `upstream_unavailable` | The geocoding backend is temporarily unavailable. | | `504` | `upstream_timeout` | The geocoding backend took too long to respond. | --- ## [📄️komoot.io rate limits](/docs/photon/komoot-io-rate-limits/.md) [The public photon.komoot.io server is throttled and unguaranteed. What its policy actually says, and your options when you need Photon geocoding you can trust.](/docs/photon/komoot-io-rate-limits/.md) --- ## [📄️vs Geoapify / LocationIQ / OpenCage](/docs/compare/vs-geoapify-locationiq-opencage/.md) [An honest comparison of hosted geocoding APIs: where ChibiGeo's flat-rate, EU-only endpoint fits, and where Geoapify, LocationIQ and OpenCage do better.](/docs/compare/vs-geoapify-locationiq-opencage/.md) --- ## [📄️Traccar](/docs/guides/traccar-reverse-geocoding/.md) [Turn GPS coordinates into street addresses in Traccar with ChibiGeo, a flat-rate EU-hosted Photon geocoder. No Google key, no per-request billing.](/docs/guides/traccar-reverse-geocoding/.md) --- # Photon vs Nominatim: which OSM geocoder should you use? Both [Photon](https://github.com/komoot/photon) and [Nominatim](https://nominatim.org) are open-source geocoders built on OpenStreetMap data, and both do forward and reverse geocoding. They're often presented as competitors, but they're closer to complementary — Photon's search index is actually derived from Nominatim's data. The right pick depends on what kind of search you're doing and how much hardware you want to run. ## What each is good at[​](#what-each-is-good-at "Direct link to What each is good at") **Photon** is built for **fast, typo-tolerant, search-as-you-type** geocoding. It's OpenSearch-based and shines at autocomplete and fuzzy matching — the "start typing and get instant suggestions" experience. Reverse geocoding is fast and lightweight. **Nominatim** is the **authoritative, structured** geocoder — the same engine behind the OSM website's search. It excels at precise, structured address queries and detailed address breakdowns. It's less forgiving of typos and not designed for type-ahead, but it's the reference for correctness. | | Photon | Nominatim | | ----------------- | ---------------------------------------- | ---------------------------------------- | | Best at | Autocomplete, fuzzy/typo-tolerant search | Structured, authoritative address lookup | | Underlying tech | OpenSearch | PostgreSQL / PostGIS | | Data source | Derived from Nominatim/OSM | OSM planet, direct | | Reverse geocoding | Fast, light | Detailed, structured | ## The self-hosting cost gap[​](#the-self-hosting-cost-gap "Direct link to The self-hosting cost gap") This is where the practical decision usually gets made. Numbers are from each project's own documentation (2026): | | Photon | Nominatim | | ---------------------- | --------------------------- | ------------------------------------- | | **Disk (full planet)** | \~95 GB (prebuilt index) | **at least 1 TB** working space | | **RAM** | 64 GB recommended | **128 GB** strongly recommended | | **Setup** | Download + unpack two files | Full OSM planet import into Postgres | | **Import time** | Minutes to unpack | A long import, even on a good machine | | **Storage type** | SSD strongly recommended | NVMe essential | Photon is dramatically lighter to run because you download a **prebuilt index** rather than importing the raw planet. Nominatim's full-planet import is a serious undertaking — over a terabyte of fast disk and 128 GB-class RAM. ## The public-server limits (if you're not self-hosting)[​](#the-public-server-limits-if-youre-not-self-hosting "Direct link to The public-server limits (if you're not self-hosting)") Neither public instance is built for production load: * **nominatim.openstreetmap.org:** absolute maximum **1 request/second**, no bulk use. Notably, "periodic requests from apps are considered bulk geocoding and are strongly discouraged," and access can be withdrawn without notice. * **photon.komoot.io:** "reasonable" use only; "extensive usage will be throttled or completely banned," with no availability guarantee. See [photon.komoot.io rate limits](/docs/photon/komoot-io-rate-limits/.md). For anything beyond hobby traffic, both point you to running your own instance — or using a hosted one. ## How to choose[​](#how-to-choose "Direct link to How to choose") * **Autocomplete / type-ahead search** → Photon. * **Precise structured address lookup, correctness-first** → Nominatim. * **Reverse geocoding for a tracking/history app** (Traccar, Dawarich, Reitti) → Photon — it's what those apps integrate with, and it's far cheaper to run. * **You want Photon's behavior without the 64 GB box** → a hosted Photon like [ChibiGeo](https://app.chibigeo.com/users/register): the same API, flat-rate and EU-hosted, with a hard cap. Swap the base URL, add a key, done. * [What it takes to self-host Photon](/docs/photon/self-hosting-photon/.md) * [Use hosted Photon with Traccar](/docs/guides/traccar-reverse-geocoding/.md) --- # ChibiGeo vs Geoapify, LocationIQ & OpenCage There are plenty of hosted geocoding APIs. This page is an honest look at where ChibiGeo fits among the well-known ones — and, just as importantly, where it doesn't. If you need routing, isochrones, or a places database, the bigger platforms below do more than ChibiGeo does. If you're a self-hoster who wants a **flat-rate, Photon-compatible, EU-hosted reverse geocoder that drops in with no code changes**, that's ChibiGeo's lane. *Pricing below is as observed in 2026 and drifts — check each vendor's current page before deciding.* ## At a glance[​](#at-a-glance "Direct link to At a glance") | | ChibiGeo | Geoapify | LocationIQ | OpenCage | | -------------------- | ------------------------------------- | ---------------------------------- | ------------------------- | ------------------------------ | | **Engine / data** | Photon (OSM) | Own OSM-based stack | OSM / Nominatim-based | Aggregator (many sources) | | **Photon drop-in** | ✅ Native | ❌ | ❌ | ❌ | | **Free tier** | 2,500/day (non-commercial) | 3,000/day (limited commercial) | 5,000/day (with backlink) | Trial only | | **Entry paid** | €9.99/mo Self-Hoster · €29/mo Builder | $59/mo (10k/day) | Paid tiers | \~€0.15 / 1,000 | | **Billing model** | Flat rate, hard cap, **no overage** | Per-day credits | Per day | Per day, usage-billed | | **HQ / hosting** | EU-only | Germany (EU) | Unwired Labs (global) | UK | | **Beyond geocoding** | POIs, routing, transit | Routing, isochrones, places, tiles | Routing, maps, balance | Geocoding only, ethical stance | ## Where ChibiGeo is the right choice[​](#where-chibigeo-is-the-right-choice "Direct link to Where ChibiGeo is the right choice") * **You run a Photon client.** Traccar, Dawarich, Reitti and others already speak Photon. With ChibiGeo you change a base URL and add a key — no adapter, no response reshaping. None of the others are Photon-compatible; you'd rewrite your integration. * **You want a predictable bill.** ChibiGeo is flat-rate with a hard cap and no overage charges — hit the cap and requests pause (`429`), they don't quietly run up an invoice. Per-request and per-credit models can surprise you. * **EU data residency is non-negotiable.** ChibiGeo is EU-only and treats coordinates as transient query data, not a stored profile. ## Where the others win[​](#where-the-others-win "Direct link to Where the others win") * **Geoapify** is a full location platform — routing, isochrones, places, map tiles — with a credit model and dedicated-server options. If you need more than geocoding, it's a strong one-stop shop. * **LocationIQ** has the most generous free tier (5,000/day) if you're fine adding a "Search by LocationIQ" backlink, plus routing and maps. * **OpenCage** aggregates many geocoders behind one API and has a well-earned reputation for privacy and ethics. If you want broad worldwide coverage from mixed sources rather than pure OSM, it's excellent. ## The honest summary[​](#the-honest-summary "Direct link to The honest summary") ChibiGeo isn't trying to out-feature Geoapify or out-free LocationIQ. It's the **flat-rate, Photon-compatible, EU-hosted** option — the one that turns an existing Photon integration into a reliable hosted endpoint without touching your code or risking an overage bill. If that's your situation, it's the cleanest swap. If you need a broad location platform, one of the others will serve you better, and that's fine. * [Set it up with Traccar](/docs/guides/traccar-reverse-geocoding/.md) * [Set it up with Dawarich](/docs/guides/dawarich-self-hosted-geocoding/.md) --- # How to set up geocoding for self-hosted Dawarich **Short answer:** add three environment variables to Dawarich's `.env`, then restart the containers. ``` PHOTON_API_HOST=app.chibigeo.com/v1/photon PHOTON_API_KEY=ck_your_key_here PHOTON_API_USE_HTTPS=true ``` [Dawarich](https://dawarich.app) turns location history into a private map of everywhere you've been. To label those places with real addresses and detect visits, Dawarich reverse-geocodes its points through [Photon](https://github.com/komoot/photon). Self-hosting that Photon instance means running a full planet index: about **95 GB of SSD**, and per Photon's own documentation **64 GB of RAM** for smooth operation. ChibiGeo runs a planet Photon so a self-hosted Dawarich can point at it instead, at a flat monthly rate with no overage. note **Dawarich Cloud users do not need this.** Geocoding is already included. This guide is only for people running Dawarich on their own hardware. ## What does a geocoding key for Dawarich cost?[​](#what-does-a-geocoding-key-for-dawarich-cost "Direct link to What does a geocoding key for Dawarich cost?") ChibiGeo's **Self-Hoster** plan costs **€9.99/mo** and is built for supported self-hosted apps including Dawarich — enough headroom to geocode years of history and keep tracking afterwards — 500,000 requests per month. ChibiGeo's free **Hobby** plan allows **2,500 requests per day**, which is enough to evaluate the integration but not to backfill a long timeline. Create a key at [app.chibigeo.com](https://app.chibigeo.com/users/register); keys are prefixed `ck_`. ## How do I point self-hosted Dawarich at a hosted Photon geocoder?[​](#how-do-i-point-self-hosted-dawarich-at-a-hosted-photon-geocoder "Direct link to How do I point self-hosted Dawarich at a hosted Photon geocoder?") Add three environment variables to the Dawarich `.env` file, or to the `environment:` block of `docker-compose.yml`, then restart the Dawarich containers so they pick up the new environment. ``` PHOTON_API_HOST=app.chibigeo.com/v1/photon PHOTON_API_KEY=ck_your_key_here PHOTON_API_USE_HTTPS=true ``` | Variable | Value | Why | | ---------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | `PHOTON_API_HOST` | `app.chibigeo.com/v1/photon` | The host **including** the `/v1/photon` path prefix — Dawarich's geocoder interpolates it verbatim onto `/api` and `/reverse` | | `PHOTON_API_KEY` | your `ck_…` key | Sent as `X-Api-Key`; authenticates every geocode request | | `PHOTON_API_USE_HTTPS` | `true` | ChibiGeo is HTTPS-only | ## How do I verify Dawarich is geocoding through ChibiGeo?[​](#how-do-i-verify-dawarich-is-geocoding-through-chibigeo "Direct link to How do I verify Dawarich is geocoding through ChibiGeo?") From the Dawarich host, call both ChibiGeo endpoints directly with the API key. Each should return a GeoJSON `FeatureCollection` whose `properties` are populated with name, city and country. ``` # Forward geocode curl -H "X-Api-Key: ck_your_key_here" \ "https://app.chibigeo.com/v1/photon/api?q=Brandenburg%20Gate&limit=1" # Reverse geocode (the shape Dawarich's visit detection uses) curl -H "X-Api-Key: ck_your_key_here" \ "https://app.chibigeo.com/v1/photon/reverse?lat=52.516&lon=13.377&limit=10&radius=1" ``` Then, inside Dawarich, trigger reverse-geocoding for a point or run a visit-detection pass. Places should come back with names instead of blanks. ## Why are my Dawarich places still unnamed?[​](#why-are-my-dawarich-places-still-unnamed "Direct link to Why are my Dawarich places still unnamed?") Three causes account for nearly every failed setup. | Symptom | Cause | Fix | | ------------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | | Places stay unnamed | Wrong host path or key | Confirm `PHOTON_API_HOST` includes the `/v1/photon` prefix; re-check the key | | Geocoding silently skips points | Request cap reached — ChibiGeo returns `429`, rescued by Dawarich's fetcher | Check usage in the ChibiGeo dashboard; raise the plan if needed | | `401` in the Dawarich logs | Key missing or revoked | Ensure `PHOTON_API_KEY` is set and current | ## Is a hosted geocoder a privacy trade-off?[​](#is-a-hosted-geocoder-a-privacy-trade-off "Direct link to Is a hosted geocoder a privacy trade-off?") ChibiGeo is EU-hosted and treats submitted coordinates as transient query data rather than a stored profile. Keeping geocoding entirely in-house remains an option — ChibiGeo is the convenience path, not a lock-in. See [what it takes to self-host Photon](/docs/photon/self-hosting-photon/.md) for the honest hardware numbers. ## FAQ[​](#faq "Direct link to FAQ") **Do Dawarich Cloud users need a ChibiGeo key?** No. Dawarich Cloud includes geocoding. A ChibiGeo key is only needed when running Dawarich on your own hardware. **What hardware does a self-hosted planet Photon need?** About 95 GB of SSD for the search index, and per Photon's own documentation 64 GB of RAM for smooth operation. **Does `PHOTON_API_HOST` include the path prefix?** Yes. Set `PHOTON_API_HOST=app.chibigeo.com/v1/photon`, including the `/v1/photon` prefix. Dawarich's geocoder interpolates the value verbatim onto `/api` and `/reverse`. **What happens when the ChibiGeo request cap is reached?** ChibiGeo returns HTTP `429` and Dawarich's fetcher rescues it, so geocoding is skipped silently rather than crashing. Usage is visible in the ChibiGeo dashboard. --- # Hosted Photon geocoding for GeoPulse [GeoPulse](https://github.com/tess1o/geopulse) is a self-hosted, privacy-first location timeline platform with built-in support for [Photon](https://github.com/komoot/photon) reverse geocoding. ChibiGeo is a hosted Photon endpoint — flat-rate, EU-only, hard-capped — that GeoPulse's Photon provider talks to natively. GeoPulse's Photon provider has no separate API-key field, so you carry your ChibiGeo key **in the base URL** as a path segment. No GeoPulse changes needed. ## Prerequisites[​](#prerequisites "Direct link to Prerequisites") * A running GeoPulse instance. * A ChibiGeo API key (`ck_…`). The **Self-Hoster** plan (€9.99/mo) covers supported self-hosted apps like GeoPulse. Get one at [app.chibigeo.com](https://app.chibigeo.com/users/register). ## Configuration[​](#configuration "Direct link to Configuration") Set GeoPulse's geocoding environment variables (in your `.env` or the `geopulse-backend` service's `environment:` block): ``` GEOPULSE_GEOCODING_PRIMARY_PROVIDER=photon GEOPULSE_GEOCODING_PHOTON_ENABLED=true GEOPULSE_GEOCODING_PHOTON_URL=https://app.chibigeo.com/v1/photon/ck_your_key_here ``` | Variable | Value | Why | | ------------------------------------- | ----------------------------------------------------- | --------------------------------------------------- | | `GEOPULSE_GEOCODING_PRIMARY_PROVIDER` | `photon` | Use Photon (ChibiGeo) as the geocoder | | `GEOPULSE_GEOCODING_PHOTON_ENABLED` | `true` | Enable the Photon provider | | `GEOPULSE_GEOCODING_PHOTON_URL` | `https://app.chibigeo.com/v1/photon/ck_your_key_here` | Base URL **with your key as the last path segment** | The **key is part of the base URL**. GeoPulse appends `/reverse` (or `/api`) to it, so it sends: ``` GET https://app.chibigeo.com/v1/photon/ck_your_key_here/reverse?lon=…&lat=… ``` ChibiGeo reads the key from the path, authenticates, and returns the address. Restart the `geopulse-backend` container to apply the change. You can also set these under **Admin → Settings → Geocoding** if you prefer the UI over environment variables. ## Verifying it works[​](#verifying-it-works "Direct link to Verifying it works") Confirm the endpoint from a shell first: ``` curl "https://app.chibigeo.com/v1/photon/ck_your_key_here/reverse?lon=13.377&lat=52.516" ``` A GeoJSON `FeatureCollection` with populated `properties` (name, city, country) means the key and URL are right. In GeoPulse, once significant places are detected they'll be reverse-geocoded through ChibiGeo; you can re-run geocoding from the **Reverse Geocoding Management** page. ## Troubleshooting[​](#troubleshooting "Direct link to Troubleshooting") | Symptom | Cause | Fix | | --------------------- | ------------------------- | ----------------------------------------------------------------------------------- | | `401 invalid_api_key` | Wrong key in the base URL | Re-copy the key; ensure the URL ends with `/v1/photon/` | | `401 missing_api_key` | Key segment missing | `GEOPULSE_GEOCODING_PHOTON_URL` must be `…/v1/photon/`, not just `…/v1/photon` | | `429` | Monthly cap reached | ChibiGeo hard-caps rather than billing overage — raise the plan | | Still using Nominatim | Provider not switched | Set `GEOPULSE_GEOCODING_PRIMARY_PROVIDER=photon` and restart | ## Why ChibiGeo[​](#why-chibigeo "Direct link to Why ChibiGeo") * **vs `photon.komoot.io`:** a real cap and rate limit you can rely on, EU-only hosting, a status page. See [photon.komoot.io rate limits](/docs/photon/komoot-io-rate-limits/.md). * **vs self-hosting Photon:** no \~95 GB planet index, no 64 GB RAM. See [what it takes to self-host Photon](/docs/photon/self-hosting-photon/.md). --- # Hosted Photon geocoding for Reitti [Reitti](https://github.com/dedicatedcode/reitti) is a self-hosted location history and timeline app with first-class support for [Photon](https://github.com/komoot/photon). ChibiGeo is a hosted Photon endpoint — flat-rate, EU-only, hard-capped — that Reitti's Photon provider talks to natively. Reitti's Photon service doesn't have a separate API-key field, so you carry your ChibiGeo key **in the base URL** as a path segment. That's all it takes — no Reitti changes, no patched build. ## Prerequisites[​](#prerequisites "Direct link to Prerequisites") * A running Reitti instance. * A ChibiGeo API key (`ck_…`). The **Self-Hoster** plan (€9.99/mo) covers supported self-hosted apps like Reitti. Get one at [app.chibigeo.com](https://app.chibigeo.com/users/register). ## Configuration[​](#configuration "Direct link to Configuration") In Reitti: **Settings → Geocoding → Add service**, choose type **Photon**, and set: | Field | Value | | --------------------------------------- | ----------------------------------------------------- | | **Service Name** | `ChibiGeo` | | **URL / Base URL** | `https://app.chibigeo.com/v1/photon/ck_your_key_here` | | **Limit** (optional) | `10` | | **Search Distance / radius** (optional) | `1` | Note the **key is part of the base URL**. Reitti builds each request as `{base_url}/reverse?lon={lng}&lat={lat}&layer=house&layer=locality`, so with the key in the path it sends: ``` GET https://app.chibigeo.com/v1/photon/ck_your_key_here/reverse?lon=…&lat=…&layer=house&layer=locality ``` ChibiGeo reads the key from the path, authenticates, and returns the address. Every parameter Reitti sends (`lon`, `lat`, `layer`, `radius`, `limit`) is on ChibiGeo's allowlist. ## Verifying it works[​](#verifying-it-works "Direct link to Verifying it works") Use the geocoding service's **Test** button in Reitti — it calls the same path. Or check from a shell: ``` curl "https://app.chibigeo.com/v1/photon/ck_your_key_here/reverse?lon=13.377&lat=52.516&layer=house&layer=locality&limit=10" ``` You should get a GeoJSON `FeatureCollection` with populated `properties` (name, city, country). Then run a geocode pass over your places in Reitti. ## Troubleshooting[​](#troubleshooting "Direct link to Troubleshooting") | Symptom | Cause | Fix | | --------------------- | ----------------------------------- | ------------------------------------------------------------------- | | `401 invalid_api_key` | Wrong key in the base URL | Re-copy the key; ensure the base URL is `…/v1/photon/` | | `401 missing_api_key` | Key segment missing | The base URL must include `/v1/photon/`, not just `/v1/photon` | | `429` | Monthly cap reached | ChibiGeo hard-caps rather than billing overage — raise the plan | | Places stay unnamed | Photon provider not primary/enabled | Enable the service and run a geocode pass | ## Why ChibiGeo[​](#why-chibigeo "Direct link to Why ChibiGeo") * **vs `photon.komoot.io`:** a real cap and rate limit you can rely on, EU-only hosting, a status page. See [photon.komoot.io rate limits](/docs/photon/komoot-io-rate-limits/.md). * **vs self-hosting Photon:** no \~95 GB planet index, no 64 GB RAM. See [what it takes to self-host Photon](/docs/photon/self-hosting-photon/.md). --- # Reverse geocoding for Traccar without Google Traccar shows raw latitude/longitude on positions until you configure a reverse geocoder. The built-in options either send every position to Google/HERE (a privacy and cost problem) or point at the shared `photon.komoot.io` instance, which is fair-use only and has no uptime guarantee. ChibiGeo is a hosted [Photon](https://github.com/komoot/photon) endpoint: flat-rate, EU-only, with a hard monthly cap and **no overage billing**. Traccar already speaks Photon's format, so wiring it up is a few config lines — no code, no plugin, no surprise invoice. ## Prerequisites[​](#prerequisites "Direct link to Prerequisites") * A running Traccar server (self-hosted). * A ChibiGeo API key. The **Self-Hoster** plan (€9.99/mo) is built for exactly this — supported self-hosted apps like Traccar. Grab a key at [app.chibigeo.com](https://app.chibigeo.com/users/register). ## Configuration[​](#configuration "Direct link to Configuration") Edit your `conf/traccar.xml` and add these entries inside the `` block: ``` true geocodejson https://app.chibigeo.com/v1/photon/reverse ck_your_key_here en ``` What each line does: | Key | Value | Why | | ------------------- | -------------------------------------------- | ------------------------------------------------------------------------------- | | `geocoder.type` | `geocodejson` | Selects Traccar's `GeocodeJsonGeocoder`, which parses Photon's GeoJSON response | | `geocoder.url` | `https://app.chibigeo.com/v1/photon/reverse` | ChibiGeo's Photon-compatible reverse endpoint | | `geocoder.key` | your `ck_…` key | Traccar sends this as `&key=`; ChibiGeo authenticates the request from it | | `geocoder.language` | `en` (or `de`, `fr`, …) | Language for returned place names | Restart Traccar. New positions will now be reverse-geocoded to addresses. ## Optional tuning[​](#optional-tuning "Direct link to Optional tuning") Traccar caches results and can skip geocoding for stationary positions: ``` 10000 false false false ``` `geocoder.cacheSize` is the single biggest lever on your quota — a device that sits in one place all day resolves to one cached address, not thousands of lookups. ## Verifying it works[​](#verifying-it-works "Direct link to Verifying it works") Send a test request with the same shape Traccar uses: ``` curl "https://app.chibigeo.com/v1/photon/reverse?lat=52.516&lon=13.377&key=ck_your_key_here" ``` You should get a GeoJSON `FeatureCollection` back with `properties.name`, `properties.street`, `properties.city`, and `properties.country`. In the Traccar UI, open a device's position — the address column now shows a street address instead of coordinates. ## Troubleshooting[​](#troubleshooting "Direct link to Troubleshooting") | Symptom | Cause | Fix | | ------------------------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------- | | Addresses still show as coordinates | Geocoder not enabled or cached miss | Confirm `geocoder.enable=true`; restart; move the device | | `401 invalid_api_key` in Traccar logs | Wrong or revoked key | Re-copy the key from your dashboard | | `429 Too Many Requests` | Monthly cap reached | ChibiGeo hard-caps rather than billing overage — raise `geocoder.cacheSize` or upgrade the plan | | Wrong language | `geocoder.language` unset | Set it to your ISO language code | ## Why ChibiGeo over the alternatives[​](#why-chibigeo-over-the-alternatives "Direct link to Why ChibiGeo over the alternatives") * **vs Google/HERE:** no per-request billing surprises, no sending fleet positions to an ad company, EU data residency. * **vs `photon.komoot.io`:** a real cap and rate limit you can rely on, plus a status page — the public komoot instance is best-effort and will throttle a fleet without warning. See [photon.komoot.io rate limits](/docs/photon/komoot-io-rate-limits/.md). * **vs self-hosting Photon:** no \~95 GB planet index on SSD, no 64 GB RAM budget, no multi-hour import. A key works in two minutes. See [what it takes to self-host Photon](/docs/photon/self-hosting-photon/.md). --- # Geo MCP Geo MCP gives coding agents two read-only geocoding tools backed by Photon and OpenStreetMap: * `search_places` finds addresses, settlements, streets, and named features. * `reverse_geocode` finds the nearest place for a latitude and longitude. The hosted Streamable HTTP endpoint is: ``` https://app.chibigeo.com/mcp ``` It uses your existing ChibiGeo account, plan, quota, and `ck_…` API key. Tool discovery is public; a lookup requires the key and consumes one normal ChibiGeo request. Geo MCP does not provide routing, POI discovery, maps, batch requests, or an embedded LLM. ## Create a suitable key[​](#create-a-suitable-key "Direct link to Create a suitable key") Create a dedicated key in the ChibiGeo dashboard. A server-side MCP client normally sends no browser `Origin`, so do not add an Origin allowlist to this key. Fixed-IP allowlists are suitable only when the MCP client has a stable, known outbound IP. Put the key in your environment instead of committing it: ``` export CHIBIGEO_API_KEY='ck_your_key_here' ``` ## Codex[​](#codex "Direct link to Codex") Current Codex releases can read a bearer token from an environment variable: ``` codex mcp add chibigeo \ --url https://app.chibigeo.com/mcp \ --bearer-token-env-var CHIBIGEO_API_KEY ``` Verify with `codex mcp get chibigeo`. ## Claude Code[​](#claude-code "Direct link to Claude Code") Add this project-level `.mcp.json` (or use the equivalent user-level config): ``` { "mcpServers": { "chibigeo": { "type": "http", "url": "https://app.chibigeo.com/mcp", "headers": { "Authorization": "Bearer ${CHIBIGEO_API_KEY}" } } } } ``` Claude Code expands the environment variable when it reads the configuration. Use `/mcp` or `claude mcp get chibigeo` to verify the connection. ## Cursor[​](#cursor "Direct link to Cursor") Add this to `.cursor/mcp.json` for one project or `~/.cursor/mcp.json` globally: ``` { "mcpServers": { "chibigeo": { "url": "https://app.chibigeo.com/mcp", "headers": { "Authorization": "Bearer ${env:CHIBIGEO_API_KEY}" } } } } ``` Cursor resolves `${env:CHIBIGEO_API_KEY}` from the environment. Enable the server under **Customize → MCP** and inspect **MCP Logs** if it does not connect. ## Tool contracts[​](#tool-contracts "Direct link to Tool contracts") ### `search_places`[​](#search_places "Direct link to search_places") `query` is required and limited to 256 characters. Optional inputs are `language`, `limit` (1–10, default 5), `focus`, `bounding_box`, one `country_code`, and one Photon `place_type` (`house`, `street`, `locality`, `district`, `city`, `county`, `state`, `country`, or `other`). The result contains `places` in Photon rank order. Each Place uses named latitude/longitude and optional label, address, bounds, kind, and OSM source fields. No match is a successful result with `places: []`. ### `reverse_geocode`[​](#reverse_geocode "Direct link to reverse_geocode") `latitude` and `longitude` are required. Optional inputs are `language` and `radius_km` from 0 to 100. It requests one result. No match is a successful result with `place: null`. Both results include `© OpenStreetMap contributors` and the OpenStreetMap copyright URL. Geo MCP never returns raw Photon GeoJSON, arbitrary `extra` fields, or an invented confidence score. ## Errors and privacy[​](#errors-and-privacy "Direct link to Errors and privacy") Expected failures are returned with stable codes such as `missing_api_key`, `invalid_api_key`, `key_restricted`, `rate_limited`, `quota_exceeded`, `subscription_past_due`, `upstream_timeout`, and `upstream_unavailable`. Account and quota details remain in the ChibiGeo dashboard. Search text, coordinates, and geocoding results are processed transiently and are not stored or logged. The adapter does not cache or retry lookups. API keys must be sent only in `Authorization: Bearer …` or `X-Api-Key`; URL credentials are not accepted by Geo MCP. Geo MCP supports MCP revisions `2026-07-28` and `2025-11-25`. OAuth and official ChatGPT custom-app support are not part of this beta. --- # photon.komoot.io rate limits (and what to do about them) If you're pointing an app at `https://photon.komoot.io`, you're using komoot's **demo server**. It's generous, but it is explicitly best-effort — and if your project grows, you'll hit its limits at the worst possible time. ## What the policy actually says[​](#what-the-policy-actually-says "Direct link to What the policy actually says") Straight from Photon's own documentation, the demo server terms are: > You are welcome to use the API for your project as long as the number of requests stay in a reasonable limit. Extensive usage will be throttled or completely banned. We do not give guarantees for availability and reserve the right to implement changes without notice. Three things to notice: 1. **There is no published number.** "Reasonable" is undefined, which means you can't design around it — you find the ceiling by hitting it. 2. **The penalty is a ban, not a soft cap.** "Throttled or completely banned" means a busy day can take your geocoding offline entirely. 3. **No availability guarantee.** It's a demo. It can change or go down with no notice, and your app inherits that. komoot themselves point heavier users elsewhere: > If you have a larger number of requests to make, please consider setting up your own private instance. ## When this bites you[​](#when-this-bites-you "Direct link to When this bites you") * A **fleet or tracking app** (e.g. Traccar) reverse-geocoding every position — hundreds of devices reporting every few seconds add up fast. * A **location-history import** (e.g. Dawarich, Reitti) geocoding years of points in a batch — exactly the "extensive usage" that gets throttled. * Any app that launches, gets some users, and quietly starts failing geocoding under load with no error you can act on. ## Your options[​](#your-options "Direct link to Your options") | Option | Cost | Effort | Reliability | | ----------------------------- | ------------------ | -------------------------------------------- | ------------------------------------------- | | Keep using `photon.komoot.io` | Free | None | None — best-effort, bannable | | Self-host Photon | Hardware | High — 95 GB SSD, 64 GB RAM, import + upkeep | You own it | | Hosted Photon (ChibiGeo) | Flat from €9.99/mo | Minutes | Hard cap + rate limit you can design around | Self-hosting is the right call if you have the hardware and want full control — see [what it takes to self-host Photon](/docs/photon/self-hosting-photon/.md) for the honest numbers. If you'd rather not run 64 GB of RAM for a geocoder, ChibiGeo gives you the same Photon API with a **defined, flat-rate cap** (no overage billing), a real rate limit, a status page, and EU-only hosting — a drop-in swap for the komoot demo URL. Your app doesn't change; only the base URL and a key do. * [Traccar setup](/docs/guides/traccar-reverse-geocoding/.md) * [Dawarich setup](/docs/guides/dawarich-self-hosted-geocoding/.md) --- # What it takes to self-host Photon [Photon](https://github.com/komoot/photon) is open source, and self-hosting it is genuinely "download two files and start the server." But the two files are big, and the server that runs them comfortably is not small. Here are the real numbers — from Photon's own documentation — so you can decide with your eyes open. ## The hardware bill[​](#the-hardware-bill "Direct link to The hardware bill") | Resource | Requirement | Notes | | -------------- | ----------------- | ------------------------------------------------------------------------------------------- | | **Disk** | \~95 GB (2026) | Planet database. Grows \~10%/year. **SSD strongly recommended, NVMe better.** | | **RAM** | 64 GB recommended | For smooth operation. Less is possible with a tuned heap (`-Xmx…`), but watch for swapping. | | **Java** | 21+ | Required runtime. | | **OpenSearch** | 3.x | Only if you run against an external DB instead of the embedded server. | That 64 GB RAM line is the one that catches people. A geocoder is usually a supporting service, not the main event — dedicating a 64 GB box (or a big chunk of one) to it is a real allocation, especially on a homelab where RAM is the scarce resource. ## The time bill[​](#the-time-bill "Direct link to The time bill") * **Download:** the planet index is a multi-tens-of-GB `.tar.bz2`. On a home connection that's a long download before you've done anything. * **Extract:** decompressing and untarring \~95 GB takes a while and needs the disk headroom to hold both the archive and the extracted index during the process. * **Updates:** the index is a point-in-time snapshot of OpenStreetMap. To stay current you re-download and re-unpack the new version periodically — it's not a live feed. That's a recurring maintenance chore, not a one-time setup. ## When self-hosting is the right call[​](#when-self-hosting-is-the-right-call "Direct link to When self-hosting is the right call") * You already run a server with **spare 64 GB-class RAM** and NVMe headroom. * You want **zero external dependencies** — the coordinates never leave your hardware. * You enjoy the upkeep, or you're geocoding at a volume where any hosted plan would cost more than the box. If that's you: go for it. It's a clean, well-documented open-source tool. ## When a hosted endpoint wins[​](#when-a-hosted-endpoint-wins "Direct link to When a hosted endpoint wins") * You want geocoding to be a **two-minute setup**, not a hardware project. * 64 GB of RAM for a supporting service doesn't fit your budget or your box. * You'd rather not own the download-and-reimport update chore. [ChibiGeo](https://app.chibigeo.com/users/register) runs a planet Photon for you and exposes the same API. You swap your base URL, add a key, and you're done — flat-rate, with a hard cap and no overage, a real rate limit, and EU-only hosting. The **Self-Hoster** plan is €9.99/mo. It's the convenience trade, not a lock-in: because it's the same Photon API, moving to your own instance later is just changing the URL back. * [Set it up with Traccar](/docs/guides/traccar-reverse-geocoding/.md) * [Set it up with Dawarich](/docs/guides/dawarich-self-hosted-geocoding/.md) ---