1KOMMA5° Offer Tool API

The Offer Tool API backs 1KOMMA5°'s sales configuration and quoting workflow — customers and sites, product and pricebook catalogues, concepts, effective-price simulation for the German market, offer configurations, PDF offer generation, CRM deal lookup, and tenant/branch/user administration with audit logging. It serves a live OpenAPI 3.0.0 description at /swagger-json covering 60 paths, 73 operations and 130 component schemas. Access is bearer-token gated (Auth0); the Swagger UI at /swagger is behind HTTP Basic.

OpenAPI Specification

1komma5-offer-tool-openapi-original.json Raw ↑
{"openapi":"3.0.0","paths":{"/":{"get":{"operationId":"IndexController_index","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/"}}}}},"tags":["index"]}},"/_health":{"get":{"operationId":"HealthController_getHealthStatus","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}},"tags":["Health"]}},"/api/v1/customers/{customerId}/sites":{"post":{"operationId":"CreateCustomerSiteController_handle_v1","parameters":[{"name":"customerId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomerSiteRequestDto"}}}},"responses":{"201":{"description":"Created customer site"}},"tags":["site"]}},"/api/v1/tenant":{"get":{"operationId":"TenantController_getTenants_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Tenants"]}},"/api/v1/tenant/switch":{"post":{"operationId":"TenantController_switchActiveTenant_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchTenantRequestDto"}}}},"responses":{"200":{"description":""}},"tags":["Tenants"]}},"/api/v1/auth0/user/exists":{"post":{"operationId":"Auth0UserController_userExistsByEmail_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckUserAuth0RequestDto"}}}},"responses":{"200":{"description":"Check if user exists in Auth0","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckAuth0UserResponseDto"}}}}},"tags":["Users"]}},"/api/v1/users/me":{"put":{"operationId":"UpdateUserController_handle_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRequestDto"}}}},"responses":{"2XX":{"description":"User profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileResponseDto"}}}}},"tags":["Users"]},"get":{"operationId":"GetUserProfileController_handle_v1","parameters":[],"responses":{"200":{"description":"User profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileResponseDto"}}}}},"tags":["Users"]}},"/api/v1/users":{"get":{"operationId":"GetAllUsersController_getUsers_v1","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserDto"}}}}}},"summary":"Get all users","tags":["Users"]}},"/api/v1/users/me/profile-picture":{"post":{"operationId":"UserProfilePhotoController_handle_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["users"]},"delete":{"operationId":"UserProfilePhotoController_delete_v1","parameters":[],"responses":{"204":{"description":""}},"tags":["users"]}},"/api/v1/users/sales-persons":{"get":{"operationId":"GetSalesUsersController_getSalesUsers_v1","parameters":[{"name":"search","required":false,"in":"query","description":"Filter users by name","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SalesPersonDto"}}}}}},"summary":"Get all sales users","tags":["Sales Users"]}},"/api/v1/payment-options":{"get":{"operationId":"GetAllPaymentOptionsController_handle_v1","parameters":[],"responses":{"2XX":{"description":"Return all payment options for the user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAllPaymentOptionsDtoResponse"}}}}},"tags":["payment-options"]}},"/api/v1/customers/{id}":{"put":{"operationId":"UpdateCustomerController_handle_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomerRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerResponseDto"}}}}},"summary":"Update a customer","tags":["Customers"]},"get":{"operationId":"GetCustomerController_get_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerResponseDto"}}}}},"summary":"Get customer","tags":["Customers"]},"delete":{"operationId":"DeleteCustomerController_handle_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"properties":{"message":{"type":"string"}}}}}}},"summary":"Delete a customer","tags":["Customers"]}},"/api/v1/customers":{"get":{"operationId":"GetAllCustomersController_handle_v1","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PaginatedResponseDto"}}}}}},"summary":"Get all customers","tags":["Customers"]},"post":{"operationId":"CreateCustomerController_handle_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomerRequestDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomerResponseDto"}}}}},"summary":"Create a customer","tags":["Customers"]}},"/api/v1/customers/{id}/details":{"get":{"description":"Return the same customer information but with the sites associated","operationId":"GetCustomerDetailsController_handle_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDetailsResponseDto"}}}}},"summary":"Get customer details","tags":["customers"]}},"/api/v1/admin/countries":{"get":{"description":"Returns all countries with their currency and VAT configuration. This is reference data used for filtering, not an administered entity.","operationId":"GetCountriesController_getCountries_v1","parameters":[],"responses":{"200":{"description":"List of all countries","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CountryDto"}}}}}},"summary":"Get all countries","tags":["Admin - Countries"]}},"/api/v1/product":{"get":{"operationId":"ProductGetAllController_handle_v1","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductGetAllResponse"}}}}},"summary":"List all products","tags":["Products"]}},"/api/v1/product/{id}":{"get":{"operationId":"GetProductController_get_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"relationships","required":false,"in":"query","description":"Comma-separated list of relationships to include (e.g., brochures)","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDTO"}}}}},"summary":"Get product","tags":["Products"]}},"/api/v1/concepts-public":{"get":{"operationId":"GetConceptsController_getAll_v1","parameters":[{"name":"type","required":false,"in":"query","description":"Type of concept (pv or heat). Defaults to pv.","schema":{"enum":["pv","heat"],"type":"string"}}],"responses":{"200":{"description":"List of energy concepts","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/"}}}}}},"summary":"Get public energy concepts/templates","tags":["Concepts"]}},"/api/v1/effective-price/de/check-simulation-data":{"post":{"operationId":"EffectivePriceController_checkSimulationDataDe_v1","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}},"summary":"Check simulation data for DE requests","tags":["EffectivePrice"]}},"/api/v1/effective-price/de":{"post":{"operationId":"EffectivePriceController_getEffectivePriceDe_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EffectivePriceRequestDeDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EffectivePriceResponseDeDto"}}}},"404":{"description":"Scenario not found or post-processed scenario missing"}},"summary":"Calculate effective price for DE requests","tags":["EffectivePrice"]}},"/api/v1/crm/reject-offer/{crmOfferId}":{"patch":{"operationId":"RejectOfferController_handle_v1","parameters":[{"name":"crmOfferId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Reject an offer, this endpoint will be called by the CRM whenever an quote is rejected on their side","tags":["CRM"]}},"/api/v1/crm/deals/{dealId}":{"get":{"operationId":"GetDealController_getDeal_v1","parameters":[{"name":"dealId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Deal retrieved successfully"}},"summary":"Get deal by ID (testing endpoint)","tags":["CRM"]}},"/api/v1/configs/{id}":{"get":{"operationId":"GetConfigController_get_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigDetailsResponseDto"}}}}},"summary":"Get config by ID","tags":["Configs"]}},"/api/v1/configs/{id}/send-offer":{"post":{"operationId":"SendOfferController_sendOffer_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"authorization","required":true,"in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendOfferRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendOfferResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Send offer to GetAccept for a configuration","tags":["Configs"]}},"/api/v1/configs/{configId}/pdf":{"post":{"operationId":"PdfController_generatePdf_v1","parameters":[{"name":"configId","required":true,"in":"path","schema":{"type":"string"}},{"name":"authorization","required":true,"in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratePdfDto"}}}},"responses":{"200":{"description":"PDF generation initiated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PdfResponseDto"}}}},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"503":{"description":"PDF service unavailable"}},"security":[{"bearer":[]}],"summary":"Generate PDF for a configuration","tags":["PDF"]}},"/api/v1/admin/audit-logs":{"get":{"operationId":"GetAuditLogsController_getAuditLogs_v1","parameters":[{"name":"page","required":false,"in":"query","description":"Page number (1-based)","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"action","required":false,"in":"query","description":"Filter by action type","schema":{"example":"created","type":"string"}},{"name":"subjectType","required":false,"in":"query","description":"Filter by subject type","schema":{"example":"User","type":"string"}},{"name":"actorType","required":false,"in":"query","description":"Filter by actor type","schema":{"example":"User","type":"string"}},{"name":"traceId","required":false,"in":"query","description":"Filter by trace ID (exact match)","schema":{"example":"abc-trace-123","type":"string"}},{"name":"actorIdentifier","required":false,"in":"query","description":"Filter by actor identifier (exact match)","schema":{"example":"42","type":"string"}},{"name":"subjectIdentifier","required":false,"in":"query","description":"Filter by subject identifier (exact match)","schema":{"example":"123","type":"string"}},{"name":"startDate","required":false,"in":"query","description":"Filter by start date (ISO 8601 format)","schema":{"example":"2024-01-01T00:00:00.000Z","type":"string"}},{"name":"endDate","required":false,"in":"query","description":"Filter by end date (ISO 8601 format)","schema":{"example":"2024-12-31T23:59:59.999Z","type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"$ref":"#/components/schemas/AuditLogSortField"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"$ref":"#/components/schemas/SortOrder"}}],"responses":{"200":{"description":"Paginated list of audit logs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogsResponseDto"}}}}},"summary":"Get paginated audit logs with filtering and sorting","tags":["Admin - Audit Logs"]}},"/api/v1/admin/users":{"get":{"operationId":"GetAdminUsersController_getAdminUsers_v1","parameters":[{"name":"page","required":false,"in":"query","description":"Page number (1-based)","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search by name or email","schema":{"example":"john","type":"string"}},{"name":"tenantIds","required":false,"in":"query","description":"Filter by tenant IDs (comma-separated)","schema":{"example":"tenant-1,tenant-2","type":"array","items":{"type":"string"}}},{"name":"countryId","required":false,"in":"query","description":"Filter by country ID","schema":{"example":1,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"$ref":"#/components/schemas/AdminUserSortField"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"$ref":"#/components/schemas/SortOrder"}}],"responses":{"200":{"description":"Paginated list of team users","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAdminUsersResponseDto"}}}}},"summary":"Get paginated team users with filtering and sorting","tags":["Admin - Users"]},"post":{"operationId":"CreateAdminUserController_createAdminUser_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAdminUserDto"}}}},"responses":{"201":{"description":"User created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserDetailResponseDto"}}}},"409":{"description":"Email already exists"}},"summary":"Create a new team user","tags":["Admin - Users"]}},"/api/v1/admin/users/me":{"get":{"operationId":"GetCurrentAdminUserController_getCurrentAdminUser_v1","parameters":[],"responses":{"200":{"description":"Current admin user access level info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrentAdminUserResponseDto"}}}}},"summary":"Get current admin user access level info","tags":["Admin - Users"]}},"/api/v1/admin/users/me/branches":{"get":{"description":"Returns branches based on access level: GLOBAL users get all branches, COUNTRY users get branches in their country, BRANCH users get their assigned branches.","operationId":"GetMyBranchesController_getMyBranches_v1","parameters":[],"responses":{"200":{"description":"List of accessible branches","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyBranchesResponseDto"}}}}},"summary":"Get branches accessible to the current user","tags":["Admin - Users"]}},"/api/v1/admin/users/assignable-branches":{"get":{"description":"Returns branches that the current user can assign to other users. Used in user creation/edit forms for branch selection.","operationId":"GetAssignableBranchesController_getAssignableBranches_v1","parameters":[{"name":"countryId","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"List of branches in the specified country","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdminBranchDto"}}}}}},"summary":"Get branches assignable to users for a given country","tags":["Admin - Users"]}},"/api/v1/admin/users/{id}":{"get":{"operationId":"GetAdminUserController_getAdminUser_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"User details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserDetailResponseDto"}}}},"404":{"description":"User not found"}},"summary":"Get a single team user by ID","tags":["Admin - Users"]},"patch":{"operationId":"UpdateAdminUserController_updateAdminUser_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAdminUserDto"}}}},"responses":{"200":{"description":"User updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserDetailResponseDto"}}}},"404":{"description":"User not found"},"409":{"description":"Email already exists"}},"summary":"Update a team user","tags":["Admin - Users"]}},"/api/v1/admin/users/{id}/resend-invitation":{"post":{"description":"Sends a password setup email to the user. If the user does not exist in Auth0, they will be created first.","operationId":"ResendInvitationController_resendInvitation_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Invitation email sent successfully"},"400":{"description":"Auth0 not configured or failed to send email"},"404":{"description":"User not found"}},"summary":"Resend invitation email to a user","tags":["Admin - Users"]}},"/api/v1/admin/branches":{"get":{"operationId":"GetAdminBranchesController_getAdminBranches_v1","parameters":[{"name":"page","required":false,"in":"query","description":"Page number (1-based)","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"minimum":1,"maximum":1000,"default":20,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search by branch name","schema":{"example":"Berlin","type":"string"}},{"name":"zohoIdSearch","required":false,"in":"query","description":"Search by Zoho ID","schema":{"example":"12345","type":"string"}},{"name":"countryId","required":false,"in":"query","description":"Filter by country ID","schema":{"example":1,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"$ref":"#/components/schemas/AdminBranchSortField"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"$ref":"#/components/schemas/SortOrder"}}],"responses":{"200":{"description":"Paginated list of branches","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAdminBranchesResponseDto"}}}}},"summary":"Get paginated branches with filtering and sorting","tags":["Admin - Branches"]},"post":{"operationId":"CreateAdminBranchController_createAdminBranch_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAdminBranchDto"}}}},"responses":{"201":{"description":"Branch created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBranchDto"}}}}},"summary":"Create a new branch","tags":["Admin - Branches"]}},"/api/v1/admin/branches/{id}":{"get":{"operationId":"GetAdminBranchController_getAdminBranch_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Branch found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBranchDto"}}}},"404":{"description":"Branch not found"}},"summary":"Get a branch by ID","tags":["Admin - Branches"]},"patch":{"operationId":"UpdateAdminBranchController_updateAdminBranch_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAdminBranchDto"}}}},"responses":{"200":{"description":"Branch updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBranchDto"}}}},"404":{"description":"Branch not found"}},"summary":"Update a branch","tags":["Admin - Branches"]}},"/api/v1/admin/concepts":{"get":{"operationId":"GetAdminConceptsController_getAdminConcepts_v1","parameters":[{"name":"page","required":false,"in":"query","description":"Page number (1-based)","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"minimum":1,"maximum":1000,"default":20,"type":"number"}},{"name":"type","required":false,"in":"query","description":"Filter by template type","schema":{"$ref":"#/components/schemas/ConceptTemplateType"}},{"name":"scope","required":false,"in":"query","description":"Filter by scope (global = no tenant, branch = tenant-specific)","schema":{"$ref":"#/components/schemas/ConceptScope"}},{"name":"visibility","required":false,"in":"query","description":"Filter by visibility (visible or hidden)","schema":{"$ref":"#/components/schemas/ConceptVisibility"}},{"name":"tenantId","required":false,"in":"query","description":"Filter by branch/tenant ID","schema":{"example":"42","type":"string"}},{"name":"countryId","required":false,"in":"query","description":"Filter by country ID (for Global users)","schema":{"example":1,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search by concept name","schema":{"example":"Solar Basic","type":"string"}},{"name":"updatedFrom","required":false,"in":"query","description":"Filter concepts updated on or after this date (ISO 8601, e.g. 2025-01-01T00:00:00.000Z)","schema":{"example":"2025-01-01T00:00:00.000Z","type":"string"}},{"name":"updatedTo","required":false,"in":"query","description":"Filter concepts updated on or before this date (ISO 8601, e.g. 2025-12-31T23:59:59.999Z)","schema":{"example":"2025-12-31T23:59:59.999Z","type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"$ref":"#/components/schemas/ConceptSortField"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"$ref":"#/components/schemas/SortOrder"}}],"responses":{"200":{"description":"Paginated list of concepts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedConceptsResponseDto"}}}}},"summary":"Get paginated concepts with filtering and sorting","tags":["Admin - Concepts"]},"post":{"operationId":"CreateAdminConceptController_createAdminConcept_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAdminConceptDto"}}}},"responses":{"201":{"description":"Concept created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConceptListItemDto"}}}}},"summary":"Create a new concept","tags":["Admin - Concepts"]}},"/api/v1/admin/concepts/{id}":{"get":{"operationId":"GetAdminConceptController_getAdminConcept_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Concept found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConceptListItemDto"}}}},"404":{"description":"Concept not found"}},"summary":"Get a concept by ID","tags":["Admin - Concepts"]},"patch":{"operationId":"UpdateAdminConceptController_updateAdminConcept_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAdminConceptDto"}}}},"responses":{"200":{"description":"Concept updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConceptListItemDto"}}}},"404":{"description":"Concept not found"}},"summary":"Update a concept","tags":["Admin - Concepts"]}},"/api/v1/admin/products":{"get":{"description":"Returns all products (country-scoped based on user access level). Global admins can filter by country.","operationId":"GetAdminProductsController_getAdminProducts_v1","parameters":[{"name":"page","required":false,"in":"query","description":"Page number (1-based)","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search by product name","schema":{"example":"Solar Panel","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Filter by category ID","schema":{"example":1,"type":"number"}},{"name":"brandId","required":false,"in":"query","description":"Filter by brand ID","schema":{"example":1,"type":"number"}},{"name":"countryId","required":false,"in":"query","description":"Filter by country ID (only for global admins)","schema":{"example":1,"type":"number"}},{"name":"public","required":false,"in":"query","description":"Filter by visibility (public)","schema":{"example":true,"type":"boolean"}},{"name":"canbesold","required":false,"in":"query","description":"Filter by can be sold status","schema":{"example":true,"type":"boolean"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"$ref":"#/components/schemas/AdminProductSortField"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"$ref":"#/components/schemas/SortOrder"}}],"responses":{"200":{"description":"Paginated list of products","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAdminProductsResponseDto"}}}}},"summary":"Get paginated global products list with filtering and sorting","tags":["Admin - Products"]},"post":{"operationId":"CreateAdminProductController_createAdminProduct_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAdminProductDto"}}}},"responses":{"201":{"description":"Product created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminProductDto"}}}}},"summary":"Create a new product","tags":["Admin - Products"]}},"/api/v1/admin/products/{id}":{"get":{"operationId":"GetAdminProductController_getProduct_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Product details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminProductDto"}}}}},"summary":"Get a single product by ID","tags":["Admin - Products"]},"patch":{"operationId":"UpdateAdminProductController_updateAdminProduct_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAdminProductDto"}}}},"responses":{"200":{"description":"Product updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminProductDto"}}}},"404":{"description":"Product not found"}},"summary":"Update a product","tags":["Admin - Products"]}},"/api/v1/admin/pricebook":{"get":{"description":"Returns products that are in the pricebook for the specified branch/tenant. User must have access to the branch.","operationId":"GetAdminPricebookController_getAdminPricebook_v1","parameters":[{"name":"tenantId","required":true,"in":"query","description":"Tenant/Branch ID to fetch pricebook for","schema":{"example":"tenant-uuid-123","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number (1-based)","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search by product name","schema":{"example":"Solar Panel","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Filter by category ID","schema":{"example":1,"type":"number"}},{"name":"brandId","required":false,"in":"query","description":"Filter by brand ID","schema":{"example":1,"type":"number"}},{"name":"public","required":false,"in":"query","description":"Filter by effective visibility (public)","schema":{"example":true,"type":"boolean"}},{"name":"canbesold","required":false,"in":"query","description":"Filter by effective can be sold status","schema":{"example":true,"type":"boolean"}},{"name":"hasOverride","required":false,"in":"query","description":"Filter by override status: true = only products with overrides, false = only products without overrides","schema":{"example":true,"type":"boolean"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"$ref":"#/components/schemas/AdminProductSortField"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"$ref":"#/components/schemas/SortOrder"}}],"responses":{"200":{"description":"Paginated list of pricebook products","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAdminPricebookResponseDto"}}}}},"summary":"Get paginated pricebook products for a specific branch","tags":["Admin - Products"]}},"/api/v1/admin/categories":{"get":{"operationId":"GetAdminCategoriesController_getCategories_v1","parameters":[],"responses":{"200":{"description":"List of categories","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CategoryDto"}}}}}},"summary":"List all product categories","tags":["Admin - Products"]}},"/api/v1/admin/brands":{"get":{"operationId":"GetAdminCategoriesController_getBrands_v1","parameters":[],"responses":{"200":{"description":"List of brands","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandDto"}}}}}},"summary":"List all product brands","tags":["Admin - Products"]}},"/api/v1/admin/roles":{"get":{"description":"Returns roles filtered based on the current user's permissions. Super admins can assign all roles, while other users have restricted role assignment capabilities.","operationId":"GetAssignableRolesController_getAssignableRoles_v1","parameters":[],"responses":{"200":{"description":"List of assignable roles with metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignableRolesResponseDto"}}}}},"summary":"Get list of roles the current user can assign","tags":["Admin - Roles"]}},"/api/v1/admin/maintenance/backfill-config-hashes":{"post":{"description":"Idempotent one-shot maintenance task. Queues a worker job that iterates over configs without a hash lookup row and inserts one using the runtime HashService. Progress and results are logged by the worker. Restricted to Superadmin.","operationId":"BackfillConfigHashesController_backfillConfigHashes_v1","parameters":[{"name":"batchSize","required":false,"in":"query","description":"Number of configs to process per batch","schema":{"minimum":1,"maximum":5000,"default":1000,"type":"number"}}],"responses":{"200":{"description":"Backfill queued for worker processing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillConfigHashesResponseDto"}}}}},"summary":"Backfill missing rows in config_hash_lookup","tags":["Admin - Maintenance"]}},"/api/v1/admin/megasearch":{"get":{"operationId":"MegasearchController_search_v1","parameters":[{"name":"q","required":true,"in":"query","description":"Search query string","schema":{"minLength":2,"example":"john","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of results per entity type","schema":{"minimum":1,"maximum":20,"default":5,"type":"number"}}],"responses":{"200":{"description":"Grouped search results by entity type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MegasearchResponseDto"}}}}},"summary":"Search across multiple entities (users, branches) based on user permissions","tags":["Admin - Megasearch"]}},"/api/migration-frozen-state/configs/{configId}/migrate-

# --- truncated at 32 KB (107 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/1komma5/refs/heads/main/openapi/1komma5-offer-tool-openapi-original.json
Where this information came from

This is an independent, third-party profile of 1KOMMA5° Offer Tool API, published by API Evangelist. We do not operate, host, resell, or support these APIs, and we are not affiliated with or endorsed by the company unless stated above. Everything here is built from publicly available information — the company's own site, developer portal, documentation, public repositories, and the specifications it publishes for public use. Nothing is obtained by breaching a system, defeating an access control, or using credentials.

The Kin Score and Agent Readiness rating are independently calculated assessments of a company's public API artifacts, scored against a published rubric. They are not certifications, endorsements, security assessments, or audits.

Corrections, re-scores, and removal are free — no partnership or purchase required, and you do not need to justify the request. A removed company is recorded as unrated, never scored zero for having asked. Acknowledgement within one business day; removal within two.

info@apievangelist.com · Read the full data-sourcing policy →
On a security or compliance team? Put security in the subject line and you will get a person, not a form — we will tell you exactly which public URLs this profile was built from.