openapi: 3.0.3 info: title: NowCerts API description: >- The NowCerts API is the REST interface to the NowCerts insurance agency management system (now branded Momentum AMP; the API is still served from api.nowcerts.com). It lets an agency and its integration partners import, update, search, and retrieve their own book of business - insureds and prospects, policies and coverages, carriers and underwriters, endorsements and commissions, and tasks and workflow. All requests are authenticated with a bearer token obtained from https://api.nowcerts.com/token using the OAuth2 password grant; the account making the request must have the "API Integration" agent role assigned, and API access is available on the Professional subscription tier and above. Endpoints in this document are confirmed from the live ASP.NET Web API help page at api.nowcerts.com/Help (v2.1.5). Request and response schemas are honestly modeled from the documented operations and standard AMS field sets; where a payload was not fully enumerated on the help page it is marked as modeled and additionalProperties is left open. This is a representative subset of a 160+ endpoint API, organized around the five core resources catalogued for the API Evangelist network. version: 2.1.5 contact: name: NowCerts / Momentum AMP url: https://www.nowcerts.com x-modeled: >- Endpoint paths and methods are confirmed real from api.nowcerts.com/Help. Schemas are modeled from documented behavior and typical AMS fields, not copied from an official machine-readable spec (NowCerts does not publish OpenAPI). servers: - url: https://api.nowcerts.com/api description: NowCerts production API security: - bearerAuth: [] tags: - name: Authentication description: Obtain and refresh bearer tokens. - name: Insureds description: Insureds and prospects (customers), their contacts, and related data. - name: Policies description: Policies, coverages, and quotes. - name: Carriers description: Carrier, underwriter, and line-of-business reference data. - name: Endorsements description: Policy endorsements and their financial detail. - name: Tasks description: Tasks, task work groups, and to-do workflow. paths: /token: servers: - url: https://api.nowcerts.com post: operationId: getToken tags: - Authentication summary: Obtain a bearer token description: >- Exchange agency user credentials for a bearer access token using the OAuth2 password grant. The user must have the "API Integration" agent role. Returns an access_token used as a Bearer token on all subsequent requests. security: [] requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object required: - grant_type - username - password properties: grant_type: type: string enum: [password] username: type: string password: type: string format: password client_id: type: string responses: '200': description: A bearer token. content: application/json: schema: $ref: '#/components/schemas/TokenResponse' '400': $ref: '#/components/responses/BadRequest' /Insured/Insert: post: operationId: insertInsured tags: - Insureds summary: Insert or update an insured/prospect description: >- Create a new insured or prospect, or update an existing one when a matching database id is supplied. Supports custom fields. Schema modeled. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Insured' responses: '200': description: The created or updated insured. content: application/json: schema: $ref: '#/components/schemas/Insured' '401': $ref: '#/components/responses/Unauthorized' /InsuredDetailList: get: operationId: listInsuredDetail tags: - Insureds summary: List insured/prospect master data description: >- Returns insured and prospect master records. Supports OData-style query options (for example $filter, $top, $skip, $orderby) as exposed by the underlying ASP.NET Web API detail-list endpoints. parameters: - $ref: '#/components/parameters/ODataFilter' - $ref: '#/components/parameters/ODataTop' - $ref: '#/components/parameters/ODataSkip' - $ref: '#/components/parameters/ODataOrderBy' responses: '200': description: A list of insureds. content: application/json: schema: type: array items: $ref: '#/components/schemas/Insured' '401': $ref: '#/components/responses/Unauthorized' /Customers/GetCustomers: get: operationId: getCustomers tags: - Insureds summary: Multi-field insured/prospect search description: Search insureds and prospects across name, email, phone, and other fields. parameters: - name: searchText in: query schema: type: string description: Free-text search term matched across insured fields. responses: '200': description: Matching insureds/prospects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Insured' '401': $ref: '#/components/responses/Unauthorized' /Policy/Insert: post: operationId: insertPolicy tags: - Policies summary: Insert or update a policy description: Create a new policy or update an existing one for a given insured. Schema modeled. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Policy' responses: '200': description: The created or updated policy. content: application/json: schema: $ref: '#/components/schemas/Policy' '401': $ref: '#/components/responses/Unauthorized' /Policy/PartialUpdate: patch: operationId: partialUpdatePolicy tags: - Policies summary: Partially update a policy description: Apply a partial update to an existing policy identified by its database id. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Policy' responses: '200': description: The updated policy. content: application/json: schema: $ref: '#/components/schemas/Policy' '401': $ref: '#/components/responses/Unauthorized' /Policy/FindPolicies: get: operationId: findPolicies tags: - Policies summary: Search policies description: Search policies by policy number, carrier, line of business, and effective/expiration dates. parameters: - name: policyNumber in: query schema: type: string - name: carrier in: query schema: type: string - name: lineOfBusiness in: query schema: type: string - name: effectiveDate in: query schema: type: string format: date - name: expirationDate in: query schema: type: string format: date responses: '200': description: Matching policies. content: application/json: schema: type: array items: $ref: '#/components/schemas/Policy' '401': $ref: '#/components/responses/Unauthorized' /PolicyDetailList: get: operationId: listPolicyDetail tags: - Policies summary: List policy master data description: Returns policy master records, with OData-style query options. parameters: - $ref: '#/components/parameters/ODataFilter' - $ref: '#/components/parameters/ODataTop' - $ref: '#/components/parameters/ODataSkip' - $ref: '#/components/parameters/ODataOrderBy' responses: '200': description: A list of policies. content: application/json: schema: type: array items: $ref: '#/components/schemas/Policy' '401': $ref: '#/components/responses/Unauthorized' /Policy/Coverages: get: operationId: getPolicyCoverages tags: - Policies summary: Get policy coverages description: Returns coverage detail for a policy. parameters: - name: policyId in: query required: true schema: type: string format: uuid responses: '200': description: Coverage detail. content: application/json: schema: type: array items: $ref: '#/components/schemas/Coverage' '401': $ref: '#/components/responses/Unauthorized' /Policy/StatusTypes: get: operationId: getPolicyStatusTypes tags: - Policies summary: List policy status types description: Returns the enumeration of policy status types. responses: '200': description: Policy status types. content: application/json: schema: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /CarrierDetailList: get: operationId: listCarrierDetail tags: - Carriers summary: List carriers description: Returns the insurance carriers configured for the agency, with OData-style query options. parameters: - $ref: '#/components/parameters/ODataFilter' - $ref: '#/components/parameters/ODataTop' - $ref: '#/components/parameters/ODataSkip' - $ref: '#/components/parameters/ODataOrderBy' responses: '200': description: A list of carriers. content: application/json: schema: type: array items: $ref: '#/components/schemas/Carrier' '401': $ref: '#/components/responses/Unauthorized' /UnderwriterDetailList: get: operationId: listUnderwriterDetail tags: - Carriers summary: List underwriters description: Returns the underwriters associated with carriers. responses: '200': description: A list of underwriters. content: application/json: schema: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /LineOfBusinessList: get: operationId: listLineOfBusiness tags: - Carriers summary: List lines of business description: Returns the lines of business (LOB) master data used to classify policies and carriers. responses: '200': description: A list of lines of business. content: application/json: schema: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /Policy/InsertWithEndorementId: post: operationId: insertPolicyWithEndorsementId tags: - Endorsements summary: Insert a policy tied to an endorsement id description: Create or update a policy referencing an existing endorsement id. Schema modeled. requestBody: required: true content: application/json: schema: allOf: - $ref: '#/components/schemas/Policy' - type: object properties: endorsementId: type: string format: uuid responses: '200': description: The created or updated policy. content: application/json: schema: $ref: '#/components/schemas/Policy' '401': $ref: '#/components/responses/Unauthorized' /PolicyEndorsementDetailList: get: operationId: listPolicyEndorsementDetail tags: - Endorsements summary: List policy endorsements description: Returns endorsement records for the agency's policies, with OData-style query options. parameters: - $ref: '#/components/parameters/ODataFilter' - $ref: '#/components/parameters/ODataTop' - $ref: '#/components/parameters/ODataSkip' - $ref: '#/components/parameters/ODataOrderBy' responses: '200': description: A list of endorsements. content: application/json: schema: type: array items: $ref: '#/components/schemas/Endorsement' '401': $ref: '#/components/responses/Unauthorized' /PolicyEndorsementAgencyCommissionDetailList: get: operationId: listEndorsementAgencyCommissionDetail tags: - Endorsements summary: List endorsement agency commissions description: Returns agency commission detail for policy endorsements. responses: '200': description: A list of endorsement agency commissions. content: application/json: schema: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /TasksWork/InsertUpdate: post: operationId: insertUpdateTask tags: - Tasks summary: Insert or update a task work group description: Create or update a task and its work group. Schema modeled. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Task' responses: '200': description: The created or updated task. content: application/json: schema: $ref: '#/components/schemas/Task' '401': $ref: '#/components/responses/Unauthorized' /TasksList: get: operationId: listTasks tags: - Tasks summary: List tasks description: Returns task records, with OData-style query options. parameters: - $ref: '#/components/parameters/ODataFilter' - $ref: '#/components/parameters/ODataTop' - $ref: '#/components/parameters/ODataSkip' - $ref: '#/components/parameters/ODataOrderBy' responses: '200': description: A list of tasks. content: application/json: schema: type: array items: $ref: '#/components/schemas/Task' '401': $ref: '#/components/responses/Unauthorized' /TasksWorkGroupList: get: operationId: listTaskWorkGroups tags: - Tasks summary: List task work groups description: Returns task work group records. responses: '200': description: A list of task work groups. content: application/json: schema: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /ToDoList: get: operationId: listToDo tags: - Tasks summary: List to-do items description: Returns to-do items for the agency's workflow. responses: '200': description: A list of to-do items. content: application/json: schema: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /heartbeat: get: operationId: heartbeat tags: - Authentication summary: API availability check description: Lightweight liveness check for the API. security: [] responses: '200': description: The API is available. components: securitySchemes: bearerAuth: type: http scheme: bearer description: >- Bearer token obtained from https://api.nowcerts.com/token via the OAuth2 password grant. The user must have the "API Integration" agent role. parameters: ODataFilter: name: $filter in: query description: OData-style filter expression. schema: type: string ODataTop: name: $top in: query description: Maximum number of records to return. schema: type: integer ODataSkip: name: $skip in: query description: Number of records to skip. schema: type: integer ODataOrderBy: name: $orderby in: query description: OData-style ordering expression. schema: type: string responses: Unauthorized: description: Missing or invalid bearer token, or the user lacks the API Integration role. content: application/json: schema: $ref: '#/components/schemas/Error' BadRequest: description: The request was malformed. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: TokenResponse: type: object description: OAuth2 password-grant token response. Modeled. properties: access_token: type: string token_type: type: string example: bearer expires_in: type: integer refresh_token: type: string additionalProperties: true Insured: type: object description: An insured or prospect (customer). Modeled from documented insured fields. properties: databaseId: type: string format: uuid commercialName: type: string firstName: type: string lastName: type: string email: type: string format: email phone: type: string type: type: string description: Insured or Prospect. addressLine1: type: string city: type: string state: type: string zipCode: type: string customFields: type: object additionalProperties: true additionalProperties: true Policy: type: object description: An insurance policy. Modeled from documented policy fields. properties: databaseId: type: string format: uuid insuredDatabaseId: type: string format: uuid number: type: string carrierName: type: string lineOfBusiness: type: string effectiveDate: type: string format: date expirationDate: type: string format: date premium: type: number statusType: type: string additionalProperties: true Coverage: type: object description: A coverage line on a policy. Modeled. properties: name: type: string limit: type: number deductible: type: number additionalProperties: true Carrier: type: object description: An insurance carrier. Modeled. properties: databaseId: type: string format: uuid name: type: string naicCode: type: string phone: type: string additionalProperties: true Endorsement: type: object description: A policy endorsement record. Modeled. properties: databaseId: type: string format: uuid policyDatabaseId: type: string format: uuid endorsementNumber: type: string effectiveDate: type: string format: date premiumChange: type: number additionalProperties: true Task: type: object description: A task / to-do work item. Modeled. properties: databaseId: type: string format: uuid subject: type: string description: type: string dueDate: type: string format: date-time assignedToAgentId: type: string format: uuid completed: type: boolean additionalProperties: true Error: type: object properties: message: type: string error: type: string additionalProperties: true