The Co-operators Event Insurance API

Quote and bind Duuo event insurance. Ordered flow — create entity, create quote, get quote, make payment. With bindOnPayment=true (the default for API partners) the policy is created and emailed automatically on successful payment; with bindOnPayment=false the partner must also call Create Policy and Email Policy.

Operations 6

POST /api/v1/event/entity Create entity #
POST /api/v1/event/quote Create quote #
GET /api/v1/event/quote/{quoteId} Get quote #
POST /api/v1/event/quote/{quoteId}/payment Make payment #
POST /api/v1/event/policy Create policy #
PUT /api/v1/event/policy/{policyId}/email Email policy #

Documentation

Specifications

Other Resources

🔗
Website
https://duuo.ca/
🔗
SignUp
https://duuo.ca/new-partners/
🔗
Support
https://intercom.help/duuo-support/en/
🔗
TermsOfService
https://duuo.ca/terms-of-use
🔗
PrivacyPolicy
https://duuo.ca/privacy
🔗
Blog
https://duuo.ca/blog/
🔗
Conventions
https://raw.githubusercontent.com/api-evangelist/cooperators/refs/heads/main/conventions/cooperators-conventions.yml
🔗
ErrorCatalog
https://raw.githubusercontent.com/api-evangelist/cooperators/refs/heads/main/errors/cooperators-problem-types.yml
🔗
DataModel
https://raw.githubusercontent.com/api-evangelist/cooperators/refs/heads/main/data-model/cooperators-data-model.yml
🔗
Sandbox
https://raw.githubusercontent.com/api-evangelist/cooperators/refs/heads/main/sandbox/cooperators-sandbox.yml
🔗
Lifecycle
https://raw.githubusercontent.com/api-evangelist/cooperators/refs/heads/main/lifecycle/cooperators-lifecycle.yml
🔗
Conformance
https://raw.githubusercontent.com/api-evangelist/cooperators/refs/heads/main/conformance/cooperators-conformance.yml
🔗
AgenticAccess
https://raw.githubusercontent.com/api-evangelist/cooperators/refs/heads/main/agentic-access/cooperators-agentic-access.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/cooperators/refs/heads/main/arazzo/cooperators-event-insurance-quote-and-bind.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/cooperators/refs/heads/main/arazzo/cooperators-tenant-insurance-quote-and-bind.yml
🔗
APIsJSON
https://raw.githubusercontent.com/api-evangelist/cooperators/refs/heads/main/apis.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/cooperators/refs/heads/main/arazzo/_index.yml

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cooperators-event-insurance-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

cooperators-event-insurance-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Duuo Platform Event Insurance API
  version: '1.0'
  summary: Partner-gated embedded insurance API for Duuo, the digital insurance brand of The Co-operators.
  description: 'Machine-readable reconstruction of the Duuo Platform API — the partner-gated embedded insurance API of Duuo Insurance Services Inc., the digital brand of The Co-operators, whose products are underwritten by Co-operators General Insurance Company.


    PROVENANCE: this document was DERIVED, operation for operation, from Duuo''s own published developer-portal Postman collection ("Developer Portal", collection id 26639007, publish id 2s93sXcubU), retrieved from the Internet Archive capture of https://developer.duuo.ca/api/collections/26639007/2s93sXcubU (capture 2024-01-27, last live archived snapshot 2026-02-06). The live portal at https://developer.duuo.ca/ returns HTTP 404 as of 2026-07-25 — the collection has been unpublished — so nothing here is live-verified. Every path, method, parameter, request field, response field, example and error shape below is taken verbatim from that published collection. Nothing has been invented. Duuo states that "more detailed API reference documentation" is delivered to partners during onboarding, so this is a floor on the real surface, not a ceiling.


    ACCESS: not self-serve. Partners run a discovery call with the Duuo partnerships team, sign a partnership agreement, are assigned a Partner Account Manager, and are then issued API access credentials plus a partner-specific host. A compliance review of the integration is required before go-live.


    ORDERING: Duuo documents both product flows as strictly ordered — "The Event API''s must be executed in the order outlined below. Failure to follow the specified order of API''s for this product will result in error." The same note applies to the tenant flow.


    COMPLIANCE: insurance is a regulated industry in Canada. Duuo''s collection carries a binding compliance guide — required consent text, required disclaimers, a required licensed-representative support redirect, and required Duuo attribution and logo on every screen where coverage is discussed — and states that non-compliance may result in access termination.'
  contact:
    name: Duuo Partnerships
    url: https://duuo.ca/new-partners/
    email: info@duuo.ca
  termsOfService: https://duuo.ca/terms-of-use
  x-provenance:
    method: derived
    source: https://web.archive.org/web/20240127073206id_/https://developer.duuo.ca/api/collections/26639007/2s93sXcubU
    source_type: postman-collection
    source_name: Developer Portal
    postman_collection_id: '26639007'
    postman_publish_id: 2s93sXcubU
    archived_capture: '2024-01-27'
    last_live_archived_snapshot: '2026-02-06'
    live_status_on_derivation: 404
    derived: '2026-07-25'
    derived_by: API Evangelist enrichment pipeline
    live_verified: false
    note: Not published by the provider as OpenAPI. Historical documented surface only; the source collection is no longer publicly available.
servers:
- url: https://{partnerHost}
  description: Partner-issued host. Duuo supplies the base URL to each partner during onboarding ("The url supplied to you by the partnership team"); no public base URL is published, and api.duuo.ca / developers.duuo.ca / docs.duuo.ca do not resolve in DNS.
  variables:
    partnerHost:
      default: your-partner-host
      description: Placeholder. Replace with the host issued by your Duuo Partner Account Manager.
security:
- duuoBearer: []
tags:
- name: Event Insurance
  description: Quote and bind Duuo event insurance. Ordered flow — create entity, create quote, get quote, make payment. With bindOnPayment=true (the default for API partners) the policy is created and emailed automatically on successful payment; with bindOnPayment=false the partner must also call Create Policy and Email Policy.
paths:
  /api/v1/event/entity:
    post:
      operationId: createEventEntity
      tags:
      - Event Insurance
      summary: Create entity
      description: Creates a new entity (or "Customer") with Duuo, using information the partner already holds (for example from account creation or checkout). If the user has previously created an account with Duuo they are moved on to the next step. Step 1 of the ordered event flow.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EventEntityRequest'
            example:
              firstName: Firsttest
              lastName: Lasttest
              name: First and Last
              email: test@gmail.com
              phone: '1212121212'
              province: true
              language: en_US
      responses:
        '200':
          description: Entity created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventEnvelope'
              example:
                data:
                  resolved:
                    response:
                      response: success
                    responseCode: '200'
                metadata: {}
                validationErrors: []
                invalidNavigationPanels: []
        '401':
          $ref: '#/components/responses/EventAccessForbidden'
        '440':
          $ref: '#/components/responses/EventLoginTimeout'
        '500':
          description: Error creating profile.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventEnvelope'
  /api/v1/event/quote:
    post:
      operationId: createEventQuote
      tags:
      - Event Insurance
      summary: Create quote
      description: 'Collects the event information required to generate a quote and return a premium, and carries everything needed to later bind and email the policy. Step 2 of the ordered event flow. Compliance: once the user provides their event details, Duuo''s list of excluded activities must be shown and acknowledged before proceeding.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EventQuoteRequest'
            example:
              entityEmail: test@gmail.com
              eventTypeLabel: Dance
              eventSingleOrMultiple: singleEvent
              eventStartDate: 2023-03-01 || 4:30 pm
              eventEndDate: 2023-03-05 || 5:30 pm
              eventProvince: true
              eventInsurance: 4
              dayFactor: '>2 Hours per Day'
              numberAttendees: 25 or Less
              eventAlcoholServed: 'No'
              eventName: John's Dance
              address:
              - eventAddress: 123 Test Street, Hamilton, ON, Canada
                venueName: Recreation Centre
                venueAddress: 123 Test Street
                venueCity: Hamilton
                venuePostalCode: A1A 1A1
                coiRecipient: testpartner@gmail.com
              coHostDetails:
              - cohostNameOrEntity: Test Cohost
                cohostEmail: testcohost@gmail.com
              additionalInsuredDetails:
              - additionalInsuredNameOrEntity: Test Additional Insured
                additionalInsuredEmail: testaddinsured@gmail.com
      responses:
        '200':
          description: Quote created, with premium, sales tax and total cost in CAD.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventEnvelope'
              example:
                data:
                  resolved:
                    response:
                      totalCost: 48.7
                      salesTax: 3.6
                      premium: 45
                      response: success
                      quoteId: 6467cf740951dac053e71af1
                    responseCode: '200'
                metadata: {}
                validationErrors: []
                invalidNavigationPanels: []
        '401':
          $ref: '#/components/responses/EventAccessForbidden'
        '440':
          $ref: '#/components/responses/EventLoginTimeout'
        '500':
          description: Error creating quote.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventEnvelope'
  /api/v1/event/quote/{quoteId}:
    get:
      operationId: getEventQuote
      tags:
      - Event Insurance
      summary: Get quote
      description: 'Retrieves the details of a previously created event quote so the price and coverage can be displayed. Step 3 of the ordered event flow. Duuo notes that quote values returned in the Partner Accepted Testing (sandbox) environment are test values only and do not represent real-time cost. Compliance: the quoted price, the event details the user supplied, the three coverage limits, a link to the full policy wording, and the misrepresentation disclaimer must all be on screen when the quote is displayed.'
      parameters:
      - $ref: '#/components/parameters/QuoteId'
      responses:
        '200':
          description: Quote detail.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventEnvelope'
              example:
                data:
                  resolved:
                    response:
                      quoteData:
                        submissionIdAgency: 646778684e606d641487f152
                        submissionIdEntity: 646cd469982700e2cf5e74b2
                        owners:
                          name: First and Last
                          email: test@gmail.com
                        effectiveDate: '2023-05-23'
                        eventTypeLabel: Dance
                        eventSingleOrMultiple: singleEvent
                    responseCode: '200'
                metadata: {}
                validationErrors: []
                invalidNavigationPanels: []
        '401':
          $ref: '#/components/responses/EventAccessForbidden'
        '440':
          $ref: '#/components/responses/EventLoginTimeout'
        '500':
          description: Error getting quote.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventEnvelope'
  /api/v1/event/quote/{quoteId}/payment:
    post:
      operationId: createEventQuotePayment
      tags:
      - Event Insurance
      summary: Make payment
      description: 'Returns a URL for redirecting the customer to the Duuo-hosted payment page. Step 4 of the ordered event flow. When bindOnPayment=true (the default flow for API partners) this is the final step — the policy is created and emailed automatically on successful payment. When bindOnPayment=false the partner must then call Create Policy and Email Policy. Compliance: generalConsent and emailConsent must be collected with Duuo''s required check-box text before redirection, and post-redirection guidance text must be shown on the original page.'
      parameters:
      - $ref: '#/components/parameters/QuoteId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EventPaymentRequest'
            example:
              bindOnPayment: true
              generalConsent: true
              emailConsent: true
      responses:
        '200':
          description: Payment redirect URL generated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventEnvelope'
              example:
                data:
                  resolved:
                    response:
                      url: example.com/payhere
                      response: success
                    responseCode: '200'
                metadata: {}
                validationErrors: []
                invalidNavigationPanels: []
        '401':
          $ref: '#/components/responses/EventAccessForbidden'
        '440':
          $ref: '#/components/responses/EventLoginTimeout'
        '500':
          description: Error getting pre-quote, or error creating quote.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventEnvelope'
  /api/v1/event/policy:
    post:
      operationId: createEventPolicy
      tags:
      - Event Insurance
      summary: Create policy
      description: Binds the quote to create a policy. Only used when the policy is bound outside the payment process; mandatory when bindOnPayment=false was sent to Make Payment. Returns both the internal policyId used for process mapping and the customer-facing policyNumber.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EventPolicyRequest'
            example:
              quoteId: 646d01fa4a5918a3df63fb58
      responses:
        '200':
          description: Policy created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventEnvelope'
              example:
                data:
                  resolved:
                    response:
                      policyNumber: Zf-000186
                      policyId: 645a7535e27d0a35d355a19b6
                      response: success
                    responseCode: '200'
                metadata: {}
                validationErrors: []
                invalidNavigationPanels: []
        '401':
          $ref: '#/components/responses/EventAccessForbidden'
        '440':
          $ref: '#/components/responses/EventLoginTimeout'
        '500':
          description: Error retrieving quote, or error creating policy.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventEnvelope'
  /api/v1/event/policy/{policyId}/email:
    put:
      operationId: emailEventPolicy
      tags:
      - Event Insurance
      summary: Email policy
      description: Triggers an email containing the customer's Confirmation of Insurance. Only used when the policy is bound outside the payment process; mandatory when bindOnPayment=false was sent to Make Payment.
      parameters:
      - $ref: '#/components/parameters/PolicyId'
      responses:
        '200':
          description: Confirmation of insurance emailed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventEnvelope'
              example:
                data:
                  resolved:
                    response:
                      response: success
                    responseCode: '200'
                metadata: {}
                validationErrors: []
                invalidNavigationPanels: []
        '401':
          $ref: '#/components/responses/EventAccessForbidden'
        '440':
          $ref: '#/components/responses/EventLoginTimeout'
        '500':
          description: Error sending email.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventEnvelope'
components:
  schemas:
    EventEnvelope:
      type: object
      description: Duuo platform response envelope for the event product. The payload sits at data.resolved.response, with the HTTP-style code at data.resolved.responseCode.
      properties:
        data:
          type: object
          properties:
            resolved:
              type: object
              properties:
                response:
                  type: object
                  description: Operation payload. Always carries a "response" status string on success.
                  additionalProperties: true
                responseCode:
                  type: string
                  description: 200 Success, 401 Access forbidden, 440 Login timeout, 500 error (the specific 500 meaning varies by operation).
        metadata:
          type: object
          additionalProperties: true
        validationErrors:
          type: array
          items:
            type: object
            additionalProperties: true
        invalidNavigationPanels:
          type: array
          items:
            type: object
            additionalProperties: true
    EventAddress:
      type: object
      properties:
        eventAddress:
          type: string
        venueName:
          type: string
        venueAddress:
          type: string
        venueCity:
          type: string
        venuePostalCode:
          type: string
        coiRecipient:
          type: string
          format: email
          description: Recipient of the certificate of insurance for this venue.
    EventPaymentRequest:
      type: object
      required:
      - bindOnPayment
      - generalConsent
      - emailConsent
      properties:
        bindOnPayment:
          type: boolean
          description: When true, the policy is bound and issued after payment completes. True is the default flow for API partners.
        generalConsent:
          type: boolean
          description: Customer agrees to the terms of use and to the collection of their personal information. Must be true for the call to succeed.
        emailConsent:
          type: boolean
          description: Customer agrees to Duuo sharing the certificate of insurance with third parties on their behalf. Must be true for the call to succeed.
    EventEntityRequest:
      type: object
      required:
      - firstName
      - lastName
      - email
      properties:
        firstName:
          type: string
          description: First name of the entity.
        lastName:
          type: string
          description: Last name of the entity.
        name:
          type: string
          description: Full name of the entity.
        email:
          type: string
          format: email
          description: Email address of the entity.
        province:
          type: string
          description: Canadian province or territory code where the entity lives, for example ON or BC.
        phone:
          type: string
          description: Phone number of the entity.
        language:
          type: string
          description: ISO language code. Defaults to en_US.
          enum:
          - en_US
    EventQuoteRequest:
      type: object
      required:
      - eventTypeLabel
      - dayFactor
      - eventAlcoholServed
      - numberAttendees
      - eventInsurance
      - eventProvince
      - address
      properties:
        entityEmail:
          type: string
          format: email
          description: Email of the entity created at Create Entity.
        eventTypeLabel:
          type: string
          description: Type of event. Duuo publishes two closed lists of acceptable values — a non-sporting list (Wedding & Reception, Dance, Convention, Birthday Party, Funerals, Festival, Graduation, Reunion, Trade/Flea Market, Workshops, Yoga, and others) and a sporting list (Baseball, Basketball, Curling, Golf, Hockey variants, Pickle Ball, Soccer, Softball, Tennis, and others). Duuo recommends rendering it as a dropdown.
        dayFactor:
          type: string
          description: Number of hours per day of the event.
          enum:
          - <2 Hours per Day
          - '>2 Hours per Day'
        eventAlcoholServed:
          type: string
          description: Whether alcohol will be served. An event lasting 25 days or longer cannot be insured with alcohol served, and a sporting event cannot be insured with alcohol served. The partner must display Duuo's required liquor-licence text below this question.
          enum:
          - 'Yes'
          - 'No'
        numberAttendees:
          type: string
          description: Estimated number of attendees. Non-sporting bands — "25 or Less", "between 26-125", "between 126-175", "between 176-250", "between 251-350", "between 351-500", "between 501-1,000". Sporting bands — "30 or Less", "between 31-100", "between 101-175", "between 176-250", "between 251-350", "between 351-500", "between 501-750", "between 751-1,000".
        eventInsurance:
          type: number
          description: Number of days the event will last, rounded up to a whole number. singleEvent must be 1 to 7 days; multipleEvent must be 2 to 75 days.
        eventProvince:
          type: string
          description: Province of the event.
          enum:
          - AB
          - BC
          - MB
          - NB
          - NL
          - NS
          - true
          - PE
          - SK
        eventSingleOrMultiple:
          type: string
          description: Whether the event is single-day or multi-day. A single event cannot last longer than seven days or be hosted in more than one location; a multiple event can be hosted in more than one location.
          enum:
          - singleEvent
          - multipleEvent
        eventName:
          type: string
        eventStartDate:
          type: string
          description: Event start, in Duuo's "YYYY-MM-DD || h:mm am/pm" form.
        eventEndDate:
          type: string
          description: Event end, in Duuo's "YYYY-MM-DD || h:mm am/pm" form.
        promoCode:
          type: string
          description: Promotional code provided by Duuo for discounts; "false" when none exists.
        address:
          type: array
          description: Address and venue of the event.
          items:
            $ref: '#/components/schemas/EventAddress'
        coHostDetails:
          type: array
          items:
            $ref: '#/components/schemas/EventCoHost'
        additionalInsuredDetails:
          type: array
          items:
            $ref: '#/components/schemas/EventAdditionalInsured'
    EventCoHost:
      type: object
      properties:
        cohostNameOrEntity:
          type: string
        cohostEmail:
          type: string
          format: email
    EventPolicyRequest:
      type: object
      required:
      - quoteId
      properties:
        quoteId:
          type: string
          description: ID of the quote to create a policy from.
    EventAdditionalInsured:
      type: object
      properties:
        additionalInsuredNameOrEntity:
          type: string
        additionalInsuredEmail:
          type: string
          format: email
  parameters:
    PolicyId:
      name: policyId
      in: path
      required: true
      description: The internal policy id used for process mapping. This is not the customer-facing policy number.
      schema:
        type: string
        examples:
        - 645a7535e27d0a35d355a19b6
    QuoteId:
      name: quoteId
      in: path
      required: true
      description: The quote id received when an event quote was created.
      schema:
        type: string
        examples:
        - 646d01fa4a5918a3df63fb58
  responses:
    EventLoginTimeout:
      description: Login timeout.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/EventEnvelope'
    EventAccessForbidden:
      description: Access forbidden.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/EventEnvelope'
  securitySchemes:
    duuoBearer:
      type: http
      scheme: bearer
      description: Bearer token obtained from the partner-issued OAuth 2.0 token endpoint. The token expires every 60 minutes and must be refreshed.
    duuoOAuth2:
      type: oauth2
      description: OAuth 2.0 client credentials grant. POST grant_type=client_credentials to the token URL supplied by the Duuo partnerships team, with an HTTP Basic Authorization header of "Basic " + Base64("client_id" + ":" + "client_secret"). No scopes are published. The token URL is partner-issued and is not a public endpoint, so the tokenUrl below is a placeholder.
      flows:
        clientCredentials:
          tokenUrl: https://your-partner-token-host/oauth/token
          scopes: {}