openapi: 3.0.3 info: title: Tekmetric Appointments Shops API description: Tekmetric is a cloud-based auto repair shop management platform. Its REST API is partner-gated - access requires requesting credentials at api.tekmetric.com and Tekmetric's approval (reported at roughly 2-3 weeks); there is no self-serve signup or public API reference. The endpoints, parameters, and response envelope documented here are sourced from beetlebugorg/tekmetric-mcp, an independent open-source client that holds approved credentials and calls the live API - not from an official Tekmetric API reference document. Only read (GET) endpoints are documented because that is all the reference client implements; write endpoints may exist but are not evidenced in any public source. version: v1 contact: name: Tekmetric url: https://www.tekmetric.com/ x-source-note: Endpoint shapes confirmed via github.com/beetlebugorg/tekmetric-mcp (pkg/tekmetric/*.go), an unofficial, independently maintained client, not an official Tekmetric-published specification. servers: - url: https://shop.tekmetric.com/api/v1 description: Production - url: https://sandbox.tekmetric.com/api/v1 description: Sandbox security: - oauth2: [] tags: - name: Shops description: Shop locations, hours, labor rates, and settings. paths: /oauth/token: post: operationId: getAccessToken tags: - Shops summary: Obtain an OAuth 2.0 access token description: Exchanges an approved Client ID/Secret (sent as HTTP Basic auth) for a bearer access token via the client_credentials grant. The token's scope field lists the space-separated shop IDs the client may access. security: [] requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object required: - grant_type properties: grant_type: type: string enum: - client_credentials responses: '200': description: Access token issued. content: application/json: schema: $ref: '#/components/schemas/TokenResponse' '401': $ref: '#/components/responses/Unauthorized' /shops: get: operationId: listShops tags: - Shops summary: List authorized shops description: Lists the shop records the authenticated OAuth client is scoped to. responses: '200': description: A list of shops. content: application/json: schema: type: array items: $ref: '#/components/schemas/Shop' '401': $ref: '#/components/responses/Unauthorized' /shops/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getShop tags: - Shops summary: Get a shop description: Retrieves a single shop's hours, labor rates, and settings by ID. responses: '200': description: The requested shop. content: application/json: schema: $ref: '#/components/schemas/Shop' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: schemas: Shop: type: object properties: id: type: integer name: type: string address: $ref: '#/components/schemas/Address' phone: type: string timezone: type: string TokenResponse: type: object properties: access_token: type: string token_type: type: string example: Bearer expires_in: type: integer description: Reported token lifetime in seconds. Per third-party accounts, tokens remain valid until explicitly revoked by Tekmetric regardless of this value. scope: type: string description: Space-separated shop IDs the client is authorized for. Address: type: object properties: id: type: integer address1: type: string address2: type: string city: type: string state: type: string zip: type: string streetAddress: type: string fullAddress: type: string parameters: Id: name: id in: path required: true description: The numeric ID of the resource. schema: type: integer responses: NotFound: description: The requested resource was not found. Unauthorized: description: Missing, invalid, or revoked access token. securitySchemes: oauth2: type: oauth2 description: OAuth 2.0 client credentials grant. Requires an approved Client ID/Secret issued by Tekmetric after a manual request-access review (reported at roughly 2-3 weeks). flows: clientCredentials: tokenUrl: https://shop.tekmetric.com/api/v1/oauth/token scopes: {}