openapi: 3.0.3 info: title: Repsly Web Clients Products API description: 'The Repsly Web API (v3) is a REST interface for exchanging data with the Repsly retail execution and field sales platform. It is designed for ERP/CRM integration: import (POST) moves clients and products into Repsly, and export (GET) pulls clients, client notes, visits, retail audits, purchase orders, document types, products, pricelists, forms, photos, daily working time, visit schedules, and representatives back out. All requests use HTTP Basic authentication (API credentials from the Repsly settings page, NOT the login username/password) over SSL, and accept or return JSON or XML. Export endpoints return a maximum of 50 records per call; clients iterate using a timestamp or last-ID cursor and stop when the response MetaCollectionResult.TotalCount is 0. Endpoint paths and verbs for the export/import surface are grounded in Repsly''s published v3 developer documentation. Request/response schemas below are modeled generically (the docs describe fields per entity but do not publish a machine-readable OpenAPI); treat property-level detail as modeled and confirm exact field names against the live reference at https://api.repsly.com/v3/help.' version: '3.0' contact: name: Repsly url: https://www.repsly.com servers: - url: https://api.repsly.com/v3 description: Repsly Web API v3 (production) security: - basicAuth: [] tags: - name: Products description: Export and import products, product lists, packages, and document types. paths: /export/products/{lastTimestamp}: get: operationId: exportProducts tags: - Products summary: Export products description: Returns products from the catalog. Resource and path grounded in Repsly's v3 reference; the timestamp cursor form is modeled after the other export endpoints - confirm against the live reference. parameters: - $ref: '#/components/parameters/LastTimestamp' responses: '200': description: A batch of products. content: application/json: schema: $ref: '#/components/schemas/GenericCollection' '401': $ref: '#/components/responses/Unauthorized' /export/product-lists: get: operationId: exportProductLists tags: - Products summary: Export product lists description: Returns product lists (groupings of products). Path grounded in Repsly's v3 reference. responses: '200': description: A collection of product lists. content: application/json: schema: $ref: '#/components/schemas/GenericCollection' '401': $ref: '#/components/responses/Unauthorized' /export/documentTypes/: get: operationId: exportDocumentTypes tags: - Products summary: Export document types description: Returns the document types configured on the account (used to classify sales documents and purchase orders). responses: '200': description: A collection of document types. content: application/json: schema: $ref: '#/components/schemas/GenericCollection' '401': $ref: '#/components/responses/Unauthorized' /import/product: post: operationId: importProducts tags: - Products summary: Import products description: Insert or update products in the catalog. Returns an importJobID for status polling. requestBody: $ref: '#/components/requestBodies/ImportBody' responses: '200': $ref: '#/components/responses/ImportAccepted' '401': $ref: '#/components/responses/Unauthorized' /import/package: post: operationId: importPackages tags: - Products summary: Import product packages description: Insert or update product packaging definitions. Returns an importJobID for status polling. requestBody: $ref: '#/components/requestBodies/ImportBody' responses: '200': $ref: '#/components/responses/ImportAccepted' '401': $ref: '#/components/responses/Unauthorized' components: requestBodies: ImportBody: required: true description: A batch of entities to insert or update. Repsly decides per record whether to insert or update. Accepts JSON or XML; field schema depends on the entity being imported. content: application/json: schema: type: object additionalProperties: true schemas: GenericCollection: type: object description: Generic export collection envelope. Each export endpoint returns an entity array plus MetaCollectionResult; entity fields are documented per resource in the Repsly reference and are modeled here. properties: MetaCollectionResult: $ref: '#/components/schemas/MetaCollectionResult' Data: type: array items: type: object additionalProperties: true Error: type: object properties: code: type: string message: type: string ImportResult: type: object description: Result of an import (POST) call, including the job identifier. properties: importJobID: type: string status: type: string MetaCollectionResult: type: object description: Pagination metadata returned with export collections. Iterate until TotalCount is 0. properties: TotalCount: type: integer description: Total count of records in this batch (0 means no more records). LastTimeStamp: type: integer format: int64 description: Timestamp cursor for the next request (timestamp-paged endpoints). FirstID: type: integer format: int64 description: Unique ID of the first item in the list (ID-paged endpoints). LastID: type: integer format: int64 description: Unique ID of the last item in the list (ID-paged endpoints). responses: Unauthorized: description: Missing or invalid Basic authentication credentials. content: application/json: schema: $ref: '#/components/schemas/Error' ImportAccepted: description: The import was accepted; the result includes an importJobID. content: application/json: schema: $ref: '#/components/schemas/ImportResult' parameters: LastTimestamp: name: lastTimestamp in: path required: true description: Timestamp cursor. Start at 0 for a full export, then pass the returned MetaCollectionResult.LastTimeStamp on each subsequent call. schema: type: integer format: int64 securitySchemes: basicAuth: type: http scheme: basic description: HTTP Basic authentication over SSL. Use the API username and password from the Repsly settings page (API Settings) - these differ from your Repsly login credentials.