Lokki · OpenAPI Overlay 1.0.0
API Evangelist enhancements — Lokki External API
9 actions
9 updates
update
extends
../openapi/lokki-external-api-openapi.json
Generated by API Evangelist
Written by API Evangelist tooling for Lokki's API. It is a proposal applied on top of the contract, not a document Lokki publishes.
What the actions change
responsesx-state-dependent-fieldscontactx-documentationx-llms-txtx-agent-skillx-deprecation-guidex-status-page
Targets 9
$.info
$.servers
$.components.securitySchemes
$.components.securitySchemes['x-access-token']
$.paths['/v2/external/stores'].get
$.paths['/v2/external/stores/{slug}/items'].get
$.paths['/v2/external/stores/{slug}/items/{itemId}'].get
$.components.schemas.Deprecated_External_Store
$
OpenAPI Overlay
overlay: 1.0.0
info:
title: API Evangelist enhancements — Lokki External API
version: 1.0.0
extends: ../openapi/lokki-external-api-openapi.json
x-provenance:
generated: '2026-08-17'
method: generated
source: >-
Enhancements API Evangelist derived for the Lokki External API from the published documentation at
docs.getlokki.com, Lokki's own Agent Skill, and live probes of
https://prod.api.eu-west-3.lokki.rent on 2026-08-17. The original specification, fetched verbatim
from https://docs.getlokki.com/api-reference/openapi.json, is never mutated — every change lives
here as an Overlay 1.0.0 action.
actions:
- target: $.info
description: Add contact, documentation and license context the published spec omits (it declares only a bare license name "MIT", with no url and no contact block).
update:
contact:
name: Lokki API partnerships
url: https://docs.getlokki.com/api-reference/authentication
x-documentation: https://docs.getlokki.com/api-reference/getting-started
x-llms-txt: https://docs.getlokki.com/llms.txt
x-agent-skill: https://docs.getlokki.com/.well-known/agent-skills/lokki/skill.md
x-deprecation-guide: https://docs.getlokki.com/api-reference/stores/deprecations
x-status-page: https://status.getlokki.com/
- target: $.servers
description: >-
Name the two environments. The published spec lists staging.api.eu-west-3.lokki.rent and
prod.api.eu-west-3.getlokki.com with no descriptions; the documentation names the production host as
prod.api.eu-west-3.lokki.rent. Both production hosts resolve and both are Lokki-owned domains, so
the overlay records all three rather than choosing for the provider.
update:
- url: https://prod.api.eu-west-3.lokki.rent
description: Production — the host named in the documentation, the authentication example and the Agent Skill.
- url: https://prod.api.eu-west-3.getlokki.com
description: Production — the host named in the published spec's servers[] block. Same product, Lokki-owned domain, but not the host the docs tell partners to call.
- url: https://staging.api.eu-west-3.lokki.rent
description: Staging — test data. Requires a lokki_sk_test_ key; production keys are rejected.
- target: $.components.securitySchemes
description: >-
Record the header discrepancy. The spec declares x-access-token; the documentation, the
getting-started page and Lokki's Agent Skill all specify x-api-key, and the Skill lists the wrong
header name as a known cause of 401. Do NOT silently rewrite the provider's scheme — add the
documented one alongside and flag it.
update:
x-api-key:
type: apiKey
in: header
name: x-api-key
description: >-
The Access Token header specified by https://docs.getlokki.com/api-reference/authentication.
Keys are environment-bound (lokki_sk_test_ for staging, lokki_sk_live_ for production) and are
issued by a Lokki representative. Scoped at domain, action and route level; a key missing the
required scope returns 403.
- target: $.components.securitySchemes['x-access-token']
description: Annotate the spec's own scheme with what it appears to be.
update:
x-note: >-
Declared in the published partner spec, and also the header the internal Dashboard API uses for
its JWT. The partner documentation specifies x-api-key instead. See
authentication/lokki-authentication.yml.
- target: $.paths['/v2/external/stores'].get
description: Add the missing error responses. The published spec declares only a 200 on all seven operations; 401, 403, 404 and 429 are all reachable.
update:
responses:
'401':
description: No access token, an invalid token, or the token sent under the wrong header name.
'403':
description: 'The token lacks the domain/action/route scope for this endpoint. Observed body: {"statusCode":403,"message":"Forbidden resource","error":"Forbidden"}.'
'429':
description: Rate limit exhausted. Undocumented; the API host emits x-ratelimit-limit / x-ratelimit-remaining / x-ratelimit-reset.
- target: $.paths['/v2/external/stores/{slug}/items'].get
description: Record that from/to change the MEANING of pricing and stock, not just their values, and add the missing error responses.
update:
x-state-dependent-fields:
pricing.basis: LOWEST_PRICE without from/to, RANGE_COMPUTED with them.
pricing.price: '"Starting from" (lowest available) without from/to; computed for the window with them.'
stock.availableQuantity: Maximum theoretical stock without from/to; real availability for the window with them.
responses:
'401':
description: No access token, an invalid token, or the token sent under the wrong header name.
'403':
description: The token lacks the domain/action/route scope for this endpoint.
'404':
description: Unknown store slug. Resolve the slug from GET /v2/external/stores first.
- target: $.paths['/v2/external/stores/{slug}/items/{itemId}'].get
description: Same state-dependent pricing/stock semantics on the single-item read.
update:
x-state-dependent-fields:
pricing.basis: LOWEST_PRICE without from/to, RANGE_COMPUTED with them.
stock.availableQuantity: Maximum theoretical stock without from/to; real availability for the window with them.
responses:
'401':
description: No access token, an invalid token, or the token sent under the wrong header name.
'403':
description: The token lacks the domain/action/route scope for this endpoint.
'404':
description: Unknown store slug or item id.
- target: $.components.schemas.Deprecated_External_Store
description: >-
Point the 21 deprecated flat properties at their modular replacements, so a code generator or agent
reading only the spec can migrate without reading the prose guide.
update:
x-migration-guide: https://docs.getlokki.com/api-reference/stores/deprecations
x-field-mapping:
name: profile.name
logoURL: branding.logoURL
bannerURL: branding.banners.urls
verticales: profile.verticales
address: geo.location.address
lat: geo.location.point.lat
lng: geo.location.point.lng
addressComponents: geo.location.components
googleRating: reviews.google.rating
googleReviewsNb: reviews.google.total
currency: pricing.currency
- target: $
description: Record the cross-cutting runtime semantics the specification cannot express, as links to the repository artifacts that hold them.
update:
x-conventions: ../conventions/lokki-conventions.yml
x-error-catalog: ../errors/lokki-problem-types.yml
x-rate-limits: ../rate-limits/lokki-rate-limits.yml
x-lifecycle: ../lifecycle/lokki-lifecycle.yml
x-data-model: ../data-model/lokki-data-model.yml
x-sandbox: ../sandbox/lokki-sandbox.yml
x-authentication: ../authentication/lokki-authentication.yml