Teya Stores API
The Stores API from Teya — 3 operation(s) for stores.
The Stores API from Teya — 3 operation(s) for stores.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/teya-stores-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: POSLink Stores API
description: Handles messaging between the ePOS software and terminal.
contact:
name: Poslink Service
url: https://teyaglobal.atlassian.net/wiki/spaces/CE/pages/5993563200/Integration+Guide
email: poslink@teya.com
version: '1.2'
servers:
- url: https://api.teya.com
description: Production Server
- url: https://api.teya.xyz
description: Staging Server
security:
- authorisation: []
tags:
- name: Stores
paths:
/poslink/v1/stores/{store_id}/configs/{config_key}:
put:
tags:
- Stores
summary: Set a terminal configuration for a store
description: Sets a configuration value for the store. The value applies to all terminals in the store. Valid values depend on the config_key - for example, PAT_ENABLED accepts true or false; other values return 400. Calling this endpoint again with the same value has no additional effect.
operationId: updateTerminalConfig
parameters:
- name: store_id
in: path
description: The store the configuration applies to
required: true
schema:
type: string
format: uuid
example: f04fe1ce-e7bd-4c5b-b873-b156643c0bc3
- name: config_key
in: path
description: The configuration key to set
required: true
schema:
type: string
example: PAT_ENABLED
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateTerminalConfigRequest'
required: true
responses:
'200':
description: Configuration updated
content:
application/json:
schema:
$ref: '#/components/schemas/TerminalConfigItem'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: BAD_REQUEST
description: Bad Request
'401':
description: Lacks valid authentication credentials for the requested resource
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: UNAUTHORIZED
description: Unauthorized
'403':
description: The server understands the request but refuses to authorize it
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: FORBIDDEN
description: Forbidden
'408':
description: Request timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: REQUEST_TIMEOUT
description: Request timeout
'429':
description: Too many requests in a given amount of time
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: TOO_MANY_REQUESTS
description: Too Many Requests
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: INTERNAL_SERVER_ERROR
description: Internal Server Error
x-kong-plugin-rate-limiting-pre-auth:
config:
second: 2
policy: redis
limit_by: ip
/poslink/v1/stores:
get:
tags:
- Stores
summary: Retrieve a list of stores
description: '### No Permission Required - This is an endpoint that does not require permission
---
Retrieves all stores for a given merchant.
**Required Scopes (one of the following):**
- `stores/id/terminals` (returned via the register API: `POST /poslink/v1/epos/register`)
- `default_access` (deprecated, will be removed in the future; included for backward compatibility with existing integrations)'
operationId: getStores
responses:
'200':
description: Stores data successfully retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/RetrieveStoreResponse'
examples:
Main_Store:
description: Main_Store
value:
stores:
- id: f04fe1ce-e7bd-4c5b-b873-b156643c0bc3
name: Mari Sucos - Main Store
address:
city: Porto
country: PT
street_address_line_1: Rua da boavista 531
street_address_line_2: Towns
zipcode: 4050-104
- id: 34a735b9-58a6-4622-af5f-054e6d87e22d
name: Mari Sucos - Fast Express
address:
city: Lisboa
country: PT
street_address_line_1: Avenida dos almirantes 112
street_address_line_2: ''
zipcode: 4098-104
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: BAD_REQUEST
description: Bad Request
'401':
description: Lacks valid authentication credentials for the requested resource
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: UNAUTHORIZED
description: Unauthorized
'403':
description: The server understands the request but refuses to authorize it
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: FORBIDDEN
description: Forbidden
'408':
description: Request timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: REQUEST_TIMEOUT
description: Request timeout
'429':
description: Too many requests in a given amount of time
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: TOO_MANY_REQUESTS
description: Too Many Requests
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: INTERNAL_SERVER_ERROR
description: Internal Server Error
x-permission-set:
no-permission: true
description: This is an endpoint that does not require permission
x-kong-plugin-scope-authorisation:
config:
required_scopes:
- stores/id/terminals
- default_access
enabled: true
/poslink/v1/stores/{store_id}/terminals/{terminal_id}/configs:
get:
tags:
- Stores
summary: Retrieve configurations for a terminal scoped to a store
description: Returns all configurations for the store. The terminal_id is recorded so future configuration updates can be pushed to this terminal.
operationId: getTerminalConfigs
parameters:
- name: store_id
in: path
description: The store the terminal belongs to
required: true
schema:
type: string
format: uuid
example: f04fe1ce-e7bd-4c5b-b873-b156643c0bc3
- name: terminal_id
in: path
description: The terminal whose configurations are being fetched
required: true
schema:
type: string
example: term-001
responses:
'200':
description: Configurations retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/TerminalConfigsResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: BAD_REQUEST
description: Bad Request
'401':
description: Lacks valid authentication credentials for the requested resource
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: UNAUTHORIZED
description: Unauthorized
'403':
description: The server understands the request but refuses to authorize it
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: FORBIDDEN
description: Forbidden
'408':
description: Request timeout
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: REQUEST_TIMEOUT
description: Request timeout
'429':
description: Too many requests in a given amount of time
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: TOO_MANY_REQUESTS
description: Too Many Requests
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponse'
example:
code: INTERNAL_SERVER_ERROR
description: Internal Server Error
components:
schemas:
ExceptionResponse:
type: object
example:
code: BAD_REQUEST
description: Bad Request
properties:
code:
type: string
format: enum
description: Error code
example: BAD_REQUEST
description:
type: string
description: Error description
example: Bad Request
invalid_params:
type: array
description: List of invalid request parameters. Populated for validation failures (400 / 422); omitted otherwise.
items:
$ref: '#/components/schemas/InvalidParams'
title: ExceptionResponse
RetrieveStoreResponse:
type: object
example:
stores:
- id: f04fe1ce-e7bd-4c5b-b873-b156643c0bc3
name: Mari Sucos - Main Store
address:
city: Porto
country: PT
street_address_line_1: Rua da boavista 531
street_address_line_2: Towns
zipcode: 4050-104
- id: 34a735b9-58a6-4622-af5f-054e6d87e22d
name: Mari Sucos - Fast Express
address:
city: Lisboa
country: PT
street_address_line_1: Avenida dos almirantes 112
street_address_line_2: ''
zipcode: 4098-104
properties:
stores:
type: array
items:
$ref: '#/components/schemas/Store'
title: RetrieveStoreResponse
Store:
type: object
example:
id: f04fe1ce-e7bd-4c5b-b873-b156643c0bc3
name: Mari Sucos - Main Store
address:
city: Porto
country: PT
street_address_line_1: Rua da boavista 531
street_address_line_2: Towns
zipcode: 4050-104
properties:
id:
type: string
description: The store identifier
example: f04fe1ce-e7bd-4c5b-b873-b156643c0bc3
name:
type: string
description: The name of the store
example: Mari Sucos - Main Store
address:
$ref: '#/components/schemas/Address'
description: The address of the store
company_id:
type: string
description: The company identifier
example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
writeOnly: true
title: Store
TerminalConfigItem:
type: object
properties:
config_key:
type: string
description: The configuration key
example: PAT_ENABLED
title: Configuration Key
value:
type: string
description: The configuration value
example: 'true'
title: Configuration Value
updated_at:
type: string
format: date-time
description: Timestamp of the last update to this entry, in ISO 8601 format
example: '2026-05-20T10:00:00Z'
title: Updated At
title: Configuration Item
Address:
type: object
example:
address:
city: Porto
country: PT
street_address_line_1: Rua da boavista 531
street_address_line_2: Towns
zipcode: 4050-104
properties:
city:
type: string
description: Name of the city where the store is located
example: Porto
country:
type: string
format: ISO 3166
description: Name of the country where the store is located. Must be a valid ISO 3166 code.
example: PT
street_address_line_1:
type: string
description: Street address of the store
example: Rua da boavista 531
street_address_line_2:
type: string
description: Street address of the store
example: Towns
zipcode:
type: string
description: Zip code of the store
example: 4050-104
title: Address
UpdateTerminalConfigRequest:
type: object
properties:
value:
type: string
description: The value for the given configuration key. Accepted values depend on the key. For example, PAT_ENABLED accepts true or false; any other value results in a 400 response.
example: 'true'
title: Configuration Value
title: Update Configuration Request
TerminalConfigsResponse:
type: object
properties:
configs:
type: array
description: Configurations applicable to the terminal
items:
$ref: '#/components/schemas/TerminalConfigItem'
title: Configurations
title: Configuration Response
InvalidParams:
type: object
description: A single failed parameter from a 4xx validation response.
example:
path: requested_amount.amount
reason: Amount exceeds the tab's remaining balance
properties:
path:
type: string
description: Dot-notation path to the offending field on the request body, in snake_case.
example: requested_amount.amount
reason:
type: string
description: Human-readable explanation of why the parameter was rejected.
example: Amount exceeds the tab's remaining balance
required:
- path
- reason
title: InvalidParams
securitySchemes:
authorisation:
type: oauth2
description: 'Given a valid access token, you can now use a Bearer Token to authenticate your requests.
To do so you have to preface your access token with Bearer and send it in the HTTP Authorization header.
It should look something like this: `Authorization: Bearer <ACCESS_TOKEN>`
'
flows:
authorizationCode:
authorizationUrl: https://id.teya.com/oauth/v2/oauth-authorize
tokenUrl: https://id.teya.com/oauth/v2/oauth-token
scopes: {}
x-teya-variables:
production:
rps-payment-request: 15
rps-payment-request: '1'
staging:
rps-payment-request: 15