Loading...
Documentation
BetaREST over HTTPS with JSON, an OpenAPI 3.1 contract and a source for every value. Base URL: https://api.enlapa.de
Get started
POST /v1/profile returns every field of a preset for one point, each with its source. The example queries Cologne Cathedral and caps the call at EUR 0.02.
# Set your key once (console → API keys):
export ENLAPA_API_KEY="${ENLAPA_API_KEY:-YOUR_KEY_HERE}"
curl -sS https://api.enlapa.de/v1/profile \
-H "X-API-Key: $ENLAPA_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"subject":{"kind":"point","longitude":6.9583,"latitude":50.9413},"preset":"general","max_cost_micros":20000}'Prefer to click? Run the same call in the Playground.
The catalogue lists every field with the states it covers, its basis and its licence. Browse the data catalogue
curl -sS "https://api.enlapa.de/v1/catalog/fields?preset=pv_freiflaeche"Get started
Every data operation needs the header X-API-Key: enlapa_…. Keys carry the scope data:read, last at most 365 days and can be rotated in your account with a grace period, so running clients keep working during the switch.
Data operations do not accept browser requests (no CORS). That is deliberate: a key in a web page is readable by anyone who opens it. Call the API from your backend, a job or an agent runtime.
The account itself (keys, usage, credit) is managed with a short-lived session, sent as Authorization: Bearer. A key can read the account but not manage it.
Concepts
Illustrative excerpt of a profile answer
{
"envelope_version": "dapi-2",
"fields": {
"gemeinde_name": {
"value": "Köln",
"unit": null,
"status": "ok",
"source": {
"id": "bkg_verwaltungsgrenzen",
"name": "Verwaltungsgrenzen Kreise + Gemeinden (BKG VG25)",
"publisher": "GeoBasis-DE / BKG (VG25), CC BY 4.0",
"url": "https://gdz.bkg.bund.de/index.php/default/verwaltungsgebiete-1-25-000-stand-31-12-vg25.html"
},
"licence": {
"id": "CC-BY-4.0",
"url": "https://creativecommons.org/licenses/by/4.0/"
},
"attribution": "© GeoBasis-DE / BKG (VG25), CC BY 4.0",
"basis": "official_register",
"vintage": "2024",
"fetched_at": "2026-10-01T03:12:44Z",
"refresh_cycle": "annual",
"support": "point_sample",
"resolution_m": null,
"derivation": null,
"reason": null,
"retryable": null
},
"naturschutzgebiet_inside": {
"value": null,
"unit": null,
"status": "absent",
"source": {
"id": "bfn_naturschutzgebiete",
"name": "Naturschutzgebiete (BfN)",
"publisher": "Bundesamt für Naturschutz (BfN)",
"url": "https://geodienste.bfn.de/ogc/wfs/schutzgebiet"
},
"licence": {
"id": "GeoNutzV",
"url": "https://www.gesetze-im-internet.de/geonutzv/"
},
"attribution": "© BfN",
"basis": "official_register",
"vintage": null,
"fetched_at": "2026-09-12T02:40:03Z",
"refresh_cycle": "monthly",
"support": "point_sample",
"resolution_m": null,
"derivation": null,
"reason": null,
"retryable": null
}
},
"not_covered": [
{
"field": "naturdenkmal_inside",
"reason": "outside_coverage"
}
]
}
| ok | A value with source, licence, fetch time, basis and spatial support. |
| absent | The source covers the place and has nothing there, e.g. no nature reserve at the point. That is a finding, not an error. |
| not_covered | No usable source for this place or criterion (another state, not licensable, stale). Comes with a reason and no substitute value. |
| failed | The source exists, but the lookup just failed. retryable says whether a retry can help. |
Where there is no data, the answer says so: the field is listed under not_covered with a reason (outside_coverage, not_licensable, stale, needs_area, …). Nothing is estimated. A call is charged only if it returns at least one value; not_covered, errors and refusals are free.
Concepts
official_registerFrom an official register or official geodata (e.g. ALKIS, BKG, state services).
Reliability: Solid. The responsible authority's statement still prevails; check the vintage.
plan_in_forceFrom a development, land-use or regional plan in force.
Reliability: Reflects the plan. Does not replace the plan text or the municipality's statement.
plan_draftFrom a draft plan. It is not in force and may change.
Reliability: Provisional. Shows where planning is heading.
operator_publication_nonbindingFrom a non-binding publication by an operator, such as a grid operator.
Reliability: For orientation. Only the operator's answer to your request is binding.
osm_communityFrom OpenStreetMap, maintained by volunteers (ODbL).
Reliability: Often good, but not officially checked. Gaps and currency vary by region.
modelCalculated by ENLAPA or a third party, e.g. yield estimates, noise levels or straight-line distances.
Reliability: An estimate, not a measurement. Use it to screen and compare, not as evidence.
llm_extracted_draftRead from documents by a language model, e.g. council decisions.
Reliability: Unreviewed draft; may be wrong or incomplete. Always check the source.
| basis | Meaning | Reliability |
|---|---|---|
Officialofficial_register | From an official register or official geodata (e.g. ALKIS, BKG, state services). | Solid. The responsible authority's statement still prevails; check the vintage. |
Plan in forceplan_in_force | From a development, land-use or regional plan in force. | Reflects the plan. Does not replace the plan text or the municipality's statement. |
Draft planplan_draft | From a draft plan. It is not in force and may change. | Provisional. Shows where planning is heading. |
Operator publicationoperator_publication_nonbinding | From a non-binding publication by an operator, such as a grid operator. | For orientation. Only the operator's answer to your request is binding. |
OpenStreetMaposm_community | From OpenStreetMap, maintained by volunteers (ODbL). | Often good, but not officially checked. Gaps and currency vary by region. |
Modelmodel | Calculated by ENLAPA or a third party, e.g. yield estimates, noise levels or straight-line distances. | An estimate, not a measurement. Use it to screen and compare, not as evidence. |
AI extract (draft)llm_extracted_draft | Read from documents by a language model, e.g. council decisions. | Unreviewed draft; may be wrong or incomplete. Always check the source. |
Concepts
General
general · 245 fields
Environment
environment · 147 fields
Water and flood
water_flood · 25 fields
Planning law
planning_law · 97 fields
Infrastructure
infrastructure · 187 fields
Due diligence
due_diligence · 617 fields
Residential
residential · 581 fields
Commercial and logistics
commercial_logistics · 327 fields
Data centre
data_center · 304 fields
Ground-mounted PV
pv_freiflaeche · 201 fields
Agri-PV
agri_pv · 158 fields
Battery storage
bess · 149 fields
Operations
Operations
| Code | HTTP | Retry | Meaning and remedy (English, from the API) |
|---|---|---|---|
| ACCOUNT_CAP_ABOVE_CEILING | 403 | no | The requested monthly spending cap exceeds the operator ceiling.Choose a cap at or below the operator ceiling, or contact support. |
| ACCOUNT_KEY_NOT_ROTATABLE | 409 | no | The key is revoked, expired or has an invalid product scope.Create a new data:read key through the account session. |
| ACCOUNT_MISMATCH | 409 | no | This request was made for another account than the one this session is signed in to (the account guard header names another account).Reload the console: another tab switched the account. Nothing was changed. |
| ACCOUNT_NOT_CLOSABLE | 403 | no | This account cannot be closed from the console.Contact support. |
| ACCOUNT_NOT_FOUND | 404 | no | No Data API account belongs to this sign-in.Sign up with POST /v1/signup/cognito, or use the access link sent to the account's contact address. |
| ACCOUNT_PAUSED | 403 | no | The customer has paused data requests for this account.Resume requests through the account limits operation using an account session. |
| ACCOUNT_SESSION_INVALID | 401 | no | The account session or access link is missing, expired, used or revoked.Request a new account access link and exchange it for a session. |
| ACCOUNT_SESSION_REQUIRED | 403 | no | This operation requires an account session.Use the session from the e-mailed account access link; an API key cannot manage the account. |
| ACCOUNT_SUSPENDED | 403 | no | The API account is suspended (for example after a refund or a payment dispute left its balance negative, or by an administrator). No operation answers until it is reactivated.Contact support; resending the request does not help. |
| API_KEY_INVALID | 401 | no | The X-API-Key presented is unknown, expired or revoked.Check that the whole key was sent; a revoked or expired key has to be replaced by a new one. |
| API_KEY_MISSING | 401 | no | No X-API-Key header was sent.Send the account's API key in the X-API-Key header. Keys belong on a server, never in a browser. |
| API_KEY_SCOPE_INVALID | 403 | no | The key is valid but was not issued for the data API (it does not carry exactly the data:read scope), for example a DataHub or a personal MCP key.Send the account's data API key; a key issued for another product does not open this API. |
| BILLING_CUSTOMER_MISSING | 409 | no | This account has no billing record yet (no top-up and no plan so far).Top up the balance or start a plan first; the billing portal opens after the first payment. |
| BILLING_PORTAL_UNAVAILABLE | 503 | yes | The billing portal is not available right now.Top-ups, invoices and the plan are in the console; try the portal again later. |
| BILLING_PROVIDER_UNAVAILABLE | 503 | yes | The payment provider did not answer. Nothing was changed.Try again in a moment. |
| BILLING_UNAVAILABLE | 503 | yes | The payment provider is temporarily unavailable, or the account's billing record needs support.Try again later; contact support if it persists. |
| BODY_TOO_LARGE | 413 | no | The request body is larger than the service accepts (its Content-Length is above the limit). Nothing ran and nothing was charged.Send a smaller body: a simpler geometry or fewer items per request. |
| BUSINESS_DECLARATION_REQUIRED | 422 | no | Signing up requires the declaration that you act as a business (§ 14 BGB).Confirm the business declaration and send the request again. |
| CATALOG_LOGIN_REQUIRED | 401 | no | This part of the catalogue (a filter, a search or a dataset's detail) is served after login only.Send an API key (X-API-Key) from a server, or call it from the console with the account session (Authorization: Bearer). Without a credential the catalogue lists dataset names, categories and counts. |
| CLOSE_CONFIRMATION_MISMATCH | 422 | no | The confirmation does not match the organisation name.Type the organisation name exactly as the console shows it. |
| COGNITO_EMAIL_UNVERIFIED | 403 | no | The e-mail address of this sign-in is not verified.Verify the e-mail address in the sign-in dialog, then sign in again. |
| COGNITO_LOGIN_UNAVAILABLE | 503 | yes | Signing in with the console sign-in is not available right now.Use the e-mailed account access link, or try again after Retry-After. |
| COGNITO_TOKEN_INVALID | 401 | no | The sign-in token is invalid, expired, already used or not issued for the Data API console.Sign in again and send the fresh ID token once. |
| CONCURRENCY_LIMIT | 429 | yes | Too many operations of this kind are already running, for this account or across the service. Nothing ran.Send the request again after Retry-After, and run fewer of these operations in parallel. |
| CONCURRENCY_UNAVAILABLE | 503 | yes | The service cannot count the operations running right now, so the request is refused rather than run without that limit. Nothing ran.Send the request again after Retry-After; nothing about the request itself is wrong. |
| DAILY_LIMIT | 429 | no | The account reached one of its daily ceilings (spend, units, rows or search runs); a daily spending ceiling counts the calls still running too and resets at midnight, Europe/Berlin time. Nothing ran and nothing was charged.Wait until the ceiling resets (Retry-After gives the seconds when known), or ask support to raise it. |
| DEMO_BUSY | 429 | yes | The free live test is at its overall limit right now. Nothing ran.Wait for Retry-After, or create an account and call the API with your own key. |
| DEMO_DISABLED | 503 | yes | The free live test is switched off right now. Nothing ran.Try again later, or create an account and call the API with your own key. |
| DEMO_OPERATION_NOT_OFFERED | 404 | no | The free live test offers only profile, distances and area-check, for one point in Germany.Create an account and call every operation with your own key (see the documentation). |
| DEMO_ORIGIN_REFUSED | 403 | no | The free live test answers only the company website and clients that send no browser Origin.Use the playground on the company website, or create an account and call the API with your own key. |
| DEMO_OUTSIDE_GERMANY | 422 | no | The free live test answers points in Germany only.Pick a point in Germany, or create an account for the full coverage. |
| DEMO_RATE_LIMITED | 429 | yes | The free live test allows a few calls per minute and per day from one network. Nothing ran.Wait for Retry-After, or create an account and call the API with your own key. |
| DEMO_UNAVAILABLE | 503 | yes | The free live test cannot answer right now. Nothing was charged.Try again in a moment, or create an account and call the API with your own key. |
| GEOCODE_BATCH_REFUSED | 422 | no | The geocode request carried more than one address (a list, or several addresses separated by line breaks, ';' or '|'). Batch and bulk geocoding are not offered. Nothing ran and nothing was counted.Send one address per request, and keep each answer instead of geocoding the same address again. |
| GEOCODE_NOT_AN_ADDRESS | 422 | no | The geocode query carries coordinates (decimal or degree notation). Geocode resolves addresses and place names; looking up the place at a coordinate is not offered. Nothing ran and nothing was counted.Send a postal address or a place name; a coordinate you already have needs no geocoding. |
| GEOCODE_THROTTLED | 429 | yes | The geocoder's shared request budget is used up for this moment (it serves one request per second for the whole service, interactive use first). Nothing ran and nothing was counted.Send the request again after Retry-After, one address per call; an answer you already have does not need a second call. |
| GEOCODE_UPSTREAM_UNAVAILABLE | 503 | yes | The geocoding service behind this operation timed out, was unreachable or answered with an error. Nothing was counted.Send the request again after Retry-After; nothing about the request itself is wrong. |
| GEOMETRY_TOO_LARGE | 422 | no | The polygon's area is larger than the operation accepts (GET /v1/prices states the limit as area_tiers.max_ha). Nothing ran and nothing was charged.Split the area into smaller polygons and check each of them on its own. |
| IDEMPOTENCY_CONFLICT | 409 | no | The Idempotency-Key was already used by this account for a request with a different operation or body. Nothing ran and nothing was charged.Send a new request with a fresh key; reuse a key only to repeat the identical request. |
| IDEMPOTENCY_IN_FLIGHT | 409 | yes | A request with the same Idempotency-Key is still being processed. Nothing ran a second time and nothing was charged twice.Send the identical request again (after Retry-After when given); once the first one has finished it returns that stored answer. |
| INSUFFICIENT_CREDIT | 402 | no | The account's prepaid balance, after its free allowance, does not cover the price of this call. Nothing ran and nothing was charged.Top up the account, or ask for less; the unit prices are listed at GET /v1/prices. |
| INTERNAL_ERROR | 500 | no | The operation broke on our side; nothing more is said about it (the detail of an internal fault is not a caller's to read). Nothing was charged.Report it with the request id if it persists; it is not known to be transient, so do not resend it in a loop. |
| LOCATOR_AMBIGUOUS | 422 | no | The address resolves to several similarly ranked candidates in different municipalities. Nothing was charged.Choose a candidate point or send a more specific address with a new Idempotency-Key. |
| LOCATOR_NO_MATCH | 422 | no | No usable point was found for the address. Nothing was evaluated or charged.Correct the address or send a known point with a new Idempotency-Key; never substitute an estimate. |
| MAX_COST_EXCEEDED | 402 | no | The price of this call is above the max_cost_micros ceiling the request set. Nothing ran and nothing was charged.Raise max_cost_micros to at least the price (GET /v1/prices), or ask for less. |
| MAX_COST_REQUIRED | 422 | no | A playground call needs a cost ceiling (body.max_cost_micros): a positive integer of micro-euros.Set max_cost_micros in the request body (null is no ceiling). |
| METHOD_NOT_ALLOWED | 405 | no | The path exists but does not accept this HTTP method.Use the method the API description (GET /v1/openapi.json) lists for that path. |
| MONTHLY_LIMIT | 429 | no | The account reached its monthly spending ceiling: the price of this call, with this calendar month's spend (Europe/Berlin) and the calls still running, would exceed it. Calls inside the free allowance still answer. Nothing ran and nothing was charged.Wait until the ceiling resets on the first of the month (Retry-After gives the seconds when that is less than a day away; detail names the date), or ask support to raise it. |
| NETWORK_RATE_LIMIT | 429 | yes | The request rate from this request's network address (IP) is above its ceiling, counted over five minutes for all keys and accounts behind that address together. Nothing ran and nothing was charged.Send the request again after Retry-After and spread calls instead of bursting them; if several integrations share one outgoing address, ask support to review the ceiling. |
| NOT_FOUND | 404 | no | Nothing exists under this path or id for this account.Check the path against GET /v1/openapi.json, and take ids from an earlier answer. |
| NOT_LICENSABLE | 422 | no | A source this answer needs is not cleared for redistribution through the API for this territory, or its clearance was withdrawn (a stored answer is then not replayed either). This is a licensing fact, not missing data and not a fault; nothing was charged.Do not resend it. Ask for other fields or another operation; GET /v1/sources states what each source may be used for. |
| NO_DATA | 404 | no | The platform holds no data for this location. This is an ABSENCE of data, not a measurement of zero, and it is never charged.Report the gap; never substitute an estimate. |
| ONBOARDING_COMPLETED | 409 | no | Agent setup is already complete for this account.Send {"again": true} to set up another agent with a new key. |
| OPERATION_NOT_IN_PLAYGROUND | 422 | no | This operation cannot run in the console playground.Call it with an API key from your own code (see the documentation). |
| OPERATION_NOT_PRICED | 422 | no | This operation has no published Data API price and cannot execute.Use a currently published operation; this capability is not available for paid publication yet. |
| OPERATION_TIMEOUT | 504 | no | The operation ran past its time limit and was stopped, on the database as well.Ask for less (a smaller area, fewer rows or fields); the identical request is likely to run out of time again. |
| OPERATION_WITHDRAWN | 503 | no | This operation is withdrawn for all accounts while the rest of the data API keeps answering. Nothing ran and nothing was charged.Use another operation for now; the catalog (GET /v1/catalog) lists the operation as withdrawn until it is back. Resending the same request will not succeed while it is withdrawn. |
| PAID_CREDIT_REQUIRED | 402 | no | The call contains pass-through units (such as Bavarian parcels: an external fee is paid per unit), and the account's topped-up credit does not cover them; the welcome credit never does, and a billing-exempt account is never served them. Nothing ran and nothing was charged.Top up the account (any top-up counts), then send the request again; GET /v1/prices marks the pass_through units. A parcel search can leave Bavaria out (include_bavaria false). |
| PLAN_ALREADY_ACTIVE | 409 | no | The account already has a monthly plan subscription.Switch it with POST /v1/account/plan/switch or cancel it with POST /v1/account/plan/cancel. |
| PLAN_INVALID | 422 | no | Only the monthly plans build and growth can be chosen here.Choose build or growth; Enterprise is contracted separately. |
| PLAN_NOT_CANCELLING | 409 | no | The subscription has no pending cancellation to undo.Nothing to do; GET /v1/account shows the plan and its next renewal. |
| PLAN_NOT_FOUND | 404 | no | The account has no monthly plan subscription that is still billing.Start one with POST /v1/account/plan. A plan just paid for may take a minute to appear. |
| PLAN_UNCHANGED | 409 | no | The subscription already renews as this plan.Choose the other plan, or resume a pending cancellation with POST /v1/account/plan/resume. |
| PLAYGROUND_DISABLED | 503 | yes | The console playground is switched off right now.Call the API with your own key, or try again later. |
| PLAYGROUND_RATE_LIMITED | 429 | yes | The console playground's per-account limit (per minute or per day) is reached. Nothing ran.Wait for Retry-After, or call the API with your own key. |
| RATE_LIMITER_UNAVAILABLE | 503 | yes | The rate limiter's backend is down, so the request is refused rather than run unmetered.Send the request again after Retry-After; nothing about the request itself is wrong. |
| RATE_LIMIT_EXCEEDED | 429 | yes | The per-minute request ceiling of this key or of the account is reached.Send the request again after Retry-After, and spread calls instead of bursting them. |
| REQUEST_REJECTED | 400 | no | The request was refused for a reason no more specific code covers; detail says why.Correct the request as detail describes; resending it unchanged gives the same answer. |
| SEARCH_TOO_BROAD | 422 | no | The parcel search is larger than an interactive call may run (the engine would queue it). Nothing was charged.Queue it as a durable run (POST /v1/parcels/search/runs, free; its pages are charged as usual), or narrow the search: a smaller area or more filters. |
| SERVICE_PAUSED | 503 | yes | The data API is paused for all accounts (maintenance or an incident). Nothing ran and nothing was charged.Send the request again after Retry-After; nothing about the request or the account is wrong. |
| SESSION_TRANSPORT_UNAVAILABLE | 422 | no | The session cookie is not available here (or the request did not come from the console).Send session_transport 'bearer' and keep the session token in memory. |
| SIGNUP_ACCOUNT_EXISTS | 409 | no | This sign-in or e-mail address already has a Data API account.Sign in with POST /v1/account/session/cognito, or use the e-mailed account access link. |
| SIGNUP_CAPTCHA_FAILED | 403 | no | The signup captcha was not verified.Solve a fresh captcha and submit again. |
| SIGNUP_DISPOSABLE_DOMAIN | 422 | no | Disposable email domains cannot receive free API accounts.Use a company email address. |
| SIGNUP_DOMAIN_LIMIT | 409 | no | The email domain has reached its free-account limit.Contact support for another account. |
| SIGNUP_RATE_LIMITED | 429 | no | The network or email domain has reached its signup request limit.Wait for Retry-After before requesting signup again. |
| SIGNUP_TERMS_MISMATCH | 409 | no | The accepted terms do not match the current terms.Read the current terms and submit their version and SHA-256 digest. |
| SIGNUP_TOKEN_CONSUMED | 409 | no | The verification token was already consumed. The key cannot be shown again.Use the key saved at verification or contact support for key recovery by rotation. |
| SIGNUP_TOKEN_EXPIRED | 410 | no | The verification token has expired.Request a new signup link. |
| SIGNUP_TOKEN_INVALID | 400 | no | The verification token is invalid or its attempt limit was reached.Request a new signup link. |
| SIGNUP_UNAVAILABLE | 503 | yes | Email verification is temporarily unavailable.Try again after Retry-After. |
| SUBSCRIPTION_NOT_ACTIVE | 409 | no | The plan cannot be switched while its first payment is pending or an invoice is unpaid.Wait until the payment is confirmed, or pay the open invoice (Stripe sent it by e-mail); cancelling stays possible. |
| TENANT_INACTIVE | 403 | no | The account behind this key is deactivated.Contact support; no operation answers until the account is active again. |
| TOPUP_ABOVE_MAXIMUM | 422 | no | The top-up amount exceeds the maximum per payment.Choose a smaller top-up amount. |
| TOPUP_AMOUNT_INVALID | 422 | no | The top-up amount must be a positive whole number of euros, within the catalog bounds.Choose an amount within the limits in GET /v1/prices. |
| TOPUP_BELOW_MINIMUM | 422 | no | The top-up amount is below the catalog minimum.Choose at least the minimum in GET /v1/prices. |
| TOPUP_NOT_CONFIGURED | 503 | yes | Account top-ups are temporarily unavailable.Contact support or try again later. |
| TOPUP_UNAVAILABLE | 503 | yes | The payment provider is temporarily unavailable.Try again later. |
| VALIDATION_ERROR | 422 | no | The request does not match the operation's schema (a missing or malformed header, a wrong type, an unknown member). detail names each position, never the value sent.Correct the named positions; the schema of every operation is in GET /v1/openapi.json. |
| VAT_ID_UNUSABLE | 422 | no | This VAT ID cannot be put on invoices (its country prefix or format is not supported). Nothing was changed.Check the VAT ID; the previous one stays on your invoices. |
Operations
Requests are limited per key, per account and per network address. Some operations also have daily caps (units, rows delivered, parcel searches). Every answer reports the tightest window in X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Over a limit the API returns 429 with Retry-After, and the call is free.
A new key currently allows 20 requests per minute. Need more? Get in touch.
Geocoding takes one address per call and is not for bulk or grid lookups. Request bodies are size-limited; send a Content-Length.
Agents
Endpoint (Streamable HTTP): https://api.enlapa.de/v1/mcp, header X-API-Key.
# Set your key once (console → API keys):
export ENLAPA_API_KEY="${ENLAPA_API_KEY:-YOUR_KEY_HERE}"
claude mcp add --transport http enlapa-data https://api.enlapa.de/v1/mcp \
--header "X-API-Key: $ENLAPA_API_KEY"Use the MCP only in clients that keep the key on your machine or server. A tool call costs the same as the REST call behind it. Pass an idempotency_key so a retried call is never charged twice.
Reference
/v1/catalogWhat the data API answers: operations, layers, field and source counts (keyless; detail after login)/v1/catalog/fieldsThe field catalog of POST /v1/profile, filterable by category, territory and preset (after login)/v1/catalog/datasetsSearch datasets in the shared category tree (keyless browsing; search and detail after login)/v1/catalog/layers/{layer_id}One dataset: its fields, distance layers, sources and Länder (after login)/v1/coverageWhat is answerable in which Land, per category (keyless) and per layer and distance layer (after login)/v1/sourcesEvery source behind the catalog: publisher, licence, attribution, vintage, last pull (after login)/v1/pricesThe current price list (net EUR, integer micros) (keyless)/v1/profileProfile a location: many measured values with their provenance, in one callbillable/v1/profile/batchProfile 1–25 subjects synchronously with one field selectionbillable/v1/area-checkFlächencheck of a point, a Flurstück or a polygonbillable/v1/parcels/lookupLook up the Flurstück at a coordinate or under a Flurstückskennzeichenbillable/v1/parcels/searchRun an interactive parcel search; page 1 comes with the runbillable/v1/parcels/search/{run_id}/pages/{page_no}One page of a search run (charged once per page with at least one row; re-fetches are free)billable/v1/parcels/search/runsQueue a parcel search as a durable run (free; pages are charged when fetched)billable/v1/parcels/search/runs/{run_id}The status of a queued search run (free; optionally waits for it to finish)/v1/parcels/search/runs/{run_id}/cancelCancel a queued or running search run (free; a finished run is left unchanged)/v1/parcels/search/runs/{run_id}/artifactA succeeded run's persisted rows as one CSV (not priced yet: refused, free)/v1/parcels/search/fieldsDiscover accepted parcel-search criteria (keyless, free)/v1/geocodeGeocode one German addressbillable/v1/distancesStraight-line distance to the nearest feature per layerbillable/v1/distances/matrixStraight-line distances between caller-supplied origins and destinationsbillable/v1/operations/{request_id}Replay a retained operation after checking its rights (free)/v1/field-requestsRequest missing data and receive a synchronous disposition (free)/v1/field-requests/{id}Read your stored data request and disposition (free)/v1/signupSignup/v1/signup/verifyVerify Signup/v1/signup/cognitoCognito Signup/v1/account/access-linkRequest Account Access/v1/account/sessionGet Session Info/v1/account/sessionExchange Account Access/v1/account/sessionLogout Account/v1/account/session/cognitoExchange Cognito Sign In/v1/accountGet Account/v1/account/usageGet Account Usage/v1/account/transactionsGet Account Transactions/v1/account/keysGet Account Keys/v1/account/keysCreate Account Key/v1/account/keys/{key_id}/rotateRotate Account Key/v1/account/keys/{key_id}Revoke Account Key/v1/account/limitsPut Account Limits/v1/account/topupTopup Account/v1/account/planStart Account Plan/v1/account/plan/switchSwitch Account Plan/v1/account/plan/cancelCancel Account Plan/v1/account/plan/resumeResume Account Plan/v1/account/onboardingGet Onboarding/v1/account/onboardingStart Onboarding/v1/account/onboarding/skipSkip Onboarding/v1/account/playground/callsPlayground Call/v1/account/usage/summaryGet Usage Summary/v1/account/invoicesGet Invoices/v1/account/invoices/{invoice_id}/downloadDownload Invoice/v1/account/billing-portalOpen Billing Portal/v1/account/organizationPut Organization/v1/account/closeClose Account/v1/jobsQueue up to 500 profile or area-check subjects/v1/jobs/{job_id}Get Job/v1/jobs/{job_id}/artifacts/{format}Stream the completed job's CSV or GeoJSON, with provenance and attribution/v1/features/queryTyped rows or aggregates of reviewed shared datasets (protected areas, water/flood, soils, heritage, planning, Gemeinden)billable