openapi: 3.1.0 info: title: Duck Creek Policy Administration Billing Policies API description: Duck Creek Policy Administration API enables product configuration, premium calculation, policy lifecycle management, and policy issuance for P&C and specialty insurance carriers. Duck Creek Anywhere provides 2,600+ RESTful APIs across all Duck Creek applications using open standards. Supports end-to-end policy management from quoting through renewal. version: 1.0.0 contact: name: Duck Creek Support url: https://www.duckcreek.com/customer-support/ license: name: Duck Creek Terms of Use url: https://www.duckcreek.com/duck-creek-terms-use/ servers: - url: https://api.duckcreek.com/v1 description: Duck Creek API Production security: - oauth2: [] tags: - name: Policies description: Insurance policy lifecycle management paths: /policies: get: operationId: listPolicies summary: List insurance policies description: Returns a paginated list of insurance policies. Supports filtering by policy status, product type, effective date range, and insured name. tags: - Policies parameters: - name: status in: query description: Filter by policy status schema: type: string enum: - QUOTED - IN_FORCE - CANCELLED - EXPIRED - PENDING_CANCEL - RENEWAL - name: productCode in: query description: Filter by insurance product code schema: type: string - name: effectiveAfter in: query description: Filter policies effective on or after this date (ISO 8601) schema: type: string format: date - name: effectiveBefore in: query description: Filter policies effective on or before this date schema: type: string format: date - name: insuredName in: query description: Filter by insured name (partial match) schema: type: string - name: limit in: query schema: type: integer default: 50 maximum: 200 - name: offset in: query schema: type: integer default: 0 responses: '200': description: List of policies content: application/json: schema: $ref: '#/components/schemas/PolicyList' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createPolicy summary: Create a new policy description: Issues a new insurance policy. The policy must first be quoted and underwriting requirements must be satisfied before issuance. tags: - Policies requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PolicyRequest' responses: '201': description: Policy created content: application/json: schema: $ref: '#/components/schemas/Policy' '400': $ref: '#/components/responses/BadRequest' '422': description: Unprocessable — underwriting requirements not met /policies/{policyId}: get: operationId: getPolicy summary: Get policy details description: Returns full details for a specific insurance policy. tags: - Policies parameters: - name: policyId in: path required: true description: Unique policy identifier schema: type: string responses: '200': description: Policy details content: application/json: schema: $ref: '#/components/schemas/Policy' '404': $ref: '#/components/responses/NotFound' put: operationId: updatePolicy summary: Update policy (endorsement) description: Modifies an in-force policy through an endorsement transaction. tags: - Policies parameters: - name: policyId in: path required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PolicyUpdateRequest' responses: '200': description: Policy updated content: application/json: schema: $ref: '#/components/schemas/Policy' /policies/{policyId}/cancel: post: operationId: cancelPolicy summary: Cancel a policy description: Cancels an in-force insurance policy with a specified reason and effective date. tags: - Policies parameters: - name: policyId in: path required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CancellationRequest' responses: '200': description: Policy cancelled content: application/json: schema: $ref: '#/components/schemas/Policy' /policies/{policyId}/renew: post: operationId: renewPolicy summary: Renew a policy description: Initiates the renewal process for an expiring policy. tags: - Policies parameters: - name: policyId in: path required: true schema: type: string requestBody: required: false content: application/json: schema: type: object properties: renewalEffectiveDate: type: string format: date responses: '200': description: Renewal initiated content: application/json: schema: $ref: '#/components/schemas/Policy' components: schemas: PolicySummary: type: object properties: policyId: type: string policyNumber: type: string status: type: string enum: - QUOTED - IN_FORCE - CANCELLED - EXPIRED - PENDING_CANCEL - RENEWAL productCode: type: string lineOfBusiness: type: string effectiveDate: type: string format: date expirationDate: type: string format: date insuredName: type: string totalPremium: type: number format: double PolicyUpdateRequest: type: object properties: endorsementEffectiveDate: type: string format: date reason: type: string coverages: type: array items: $ref: '#/components/schemas/CoverageRequest' Endorsement: type: object properties: endorsementId: type: string type: type: string effectiveDate: type: string format: date premiumChange: type: number CancellationRequest: type: object required: - cancellationReason - effectiveDate properties: cancellationReason: type: string enum: - INSURED_REQUEST - NON_PAYMENT - UNDERWRITING - COMPANY_CANCELLED effectiveDate: type: string format: date notes: type: string PolicyRequest: type: object required: - productCode - insured - effectiveDate properties: productCode: type: string quoteId: type: string insured: $ref: '#/components/schemas/Insured' effectiveDate: type: string format: date expirationDate: type: string format: date coverages: type: array items: $ref: '#/components/schemas/CoverageRequest' agentCode: type: string CoverageRequest: type: object required: - coverageCode properties: coverageCode: type: string limit: type: number deductible: type: number Coverage: type: object properties: coverageCode: type: string coverageName: type: string limit: type: number deductible: type: number premium: type: number Insured: type: object required: - name properties: name: type: string type: type: string enum: - INDIVIDUAL - BUSINESS dateOfBirth: type: string format: date ssn: type: string description: Social security number (masked) address: $ref: '#/components/schemas/Address' phone: type: string email: type: string format: email Policy: allOf: - $ref: '#/components/schemas/PolicySummary' - type: object properties: insured: $ref: '#/components/schemas/Insured' coverages: type: array items: $ref: '#/components/schemas/Coverage' endorsements: type: array items: $ref: '#/components/schemas/Endorsement' underwritingMessages: type: array items: type: string writingCompany: type: string agentCode: type: string createdAt: type: string format: date-time updatedAt: type: string format: date-time Address: type: object properties: street1: type: string street2: type: string city: type: string state: type: string pattern: ^[A-Z]{2}$ zipCode: type: string country: type: string default: US Error: type: object properties: code: type: string message: type: string details: type: array items: type: string PolicyList: type: object properties: total: type: integer offset: type: integer policies: type: array items: $ref: '#/components/schemas/PolicySummary' responses: Unauthorized: description: Authentication required content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: Resource not found content: application/json: schema: $ref: '#/components/schemas/Error' BadRequest: description: Invalid request content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: oauth2: type: oauth2 description: OAuth 2.0 for Duck Creek Anywhere API authentication flows: clientCredentials: tokenUrl: https://api.duckcreek.com/oauth/token scopes: policies:read: Read policy data policies:write: Create and modify policies claims:read: Read claim data claims:write: Create and update claims billing:read: Read billing data