Tackle.io Opportunities API

Create, read, update, and list co-sell opportunities — the partner- originated (Outbound / Partner Referral) and AWS-originated (Inbound / AWS Referral) deals tracked in AWS Partner Central. Includes the opportunity history endpoint for inspecting cloud-side request and response detail.

OpenAPI Specification

tackleio-opportunities-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Tackle Public Contracts Authentication Opportunities API
  description: "Customer-facing read API for cloud marketplace contracts that Tackle has\ningested for your Tackle account.\n\nThe response shape is a stable projection of the underlying\ncontract document. It is intended to be safe to consume long-term: fields\nwill be added over time, but documented fields will not be removed without\ndeprecation notice.\n\n## Authentication\n\nEvery request must include a valid Tackle JWT in the `Authorization`\nheader (`Authorization: Bearer <token>`). Machine-to-machine (MTM) tokens\nissued for your Tackle account are accepted. The token scopes every\nresponse to the account it represents.\n\n## Pagination\n\n`GET /api/contracts` is the only paginated endpoint. Pagination uses an\nopaque `cursor` query parameter:\n\n1. The first request omits `cursor`.\n2. If more pages exist, the response includes a `next` field. Pass that\n   value verbatim back as `cursor` on the next request.\n3. The last page omits `next`.\n\nCursors are opaque tokens. Do not parse, modify, or persist them across\nschema changes — request a fresh page from the start instead.\n"
  version: 1.0.0
servers:
- url: https://contracts.tackle.io
  description: Production
security:
- tackleJwt: []
tags:
- name: Opportunities
  description: 'Create, read, update, and list co-sell opportunities — the partner-

    originated (Outbound / Partner Referral) and AWS-originated (Inbound

    / AWS Referral) deals tracked in AWS Partner Central. Includes the

    opportunity history endpoint for inspecting cloud-side request and

    response detail.'
paths:
  /api/opportunities:
    get:
      operationId: listOpportunities
      summary: List co-sell opportunities
      tags:
      - Opportunities
      parameters:
      - name: q
        in: query
        description: A search query to filter the opportunities.
        schema:
          type: string
          example: Example
      - name: from
        in: query
        description: The starting index of the opportunities to return.
        schema:
          type: integer
          example: 5
      - name: pageSize
        in: query
        description: The number of opportunities to return per page (minimum 1, maximum 100, default 10).
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 10
          example: 10
      - name: cloudStatus
        in: query
        description: "Filter opportunities by their AWS Partner Central review status. Accepts\nmultiple values; results match any of the supplied statuses.\n\nStatus values:\n\n- `Pending Submission` — opportunity is drafted but has not yet been\n  submitted to AWS Partner Central for review.\n- `Submitted` — opportunity has been submitted and is awaiting AWS triage.\n- `In review` — AWS is actively reviewing the opportunity.\n- `Approved` — AWS has approved the opportunity.\n- `Rejected` — AWS has rejected the opportunity. See `cloudResponses` on\n  the matching opportunity event for the rejection reason.\n- `Action Required` — AWS requires updates before the review can proceed.\n  See `cloudResponses` on the matching opportunity event for the requested\n  changes."
        schema:
          type: string
          enum:
          - Pending Submission
          - Submitted
          - In review
          - Approved
          - Rejected
          - Action Required
          example: Approved
      - name: source
        in: query
        description: 'Filter opportunities by their Tackle source. `Inbound` corresponds to

          opportunities originated by AWS (AWS Referral); `Outbound` corresponds

          to opportunities originated by the partner (Partner Referral). Accepts

          multiple values; results match any of the supplied sources.'
        schema:
          type: string
          enum:
          - Inbound
          - Outbound
          example: Inbound
      - name: cloudSalesStage
        in: query
        description: 'Filter opportunities by the AWS Partner Central sales-stage value.

          Accepts multiple values; results match any of the supplied stages.

          See `lifeCycle.stage` on `Opportunity` for the documented stage values

          (for example, `Prospect`, `Qualified`, `Technical Validation`,

          `Business Validation`, `Committed`, `Launched`, `Closed Lost`).'
        schema:
          type: string
          example: Prospect
      - name: startTargetCloseDate
        in: query
        description: Used to filter opportunities by their target close date. Only opportunities with a target close date on or after this specified date will be retrieved.
        schema:
          type: string
          format: date
          example: '2024-08-01'
      - name: endTargetCloseDate
        in: query
        description: Used to filter opportunities based on their target close date. Only opportunities with a target close date on or before this specified date will be retrieved.
        schema:
          type: string
          format: date
          example: '2024-08-01'
      - name: startCloudCreated
        in: query
        description: Used to filter opportunities by specifying the earliest creation date. Opportunities created on or after this date will be included in the results.
        schema:
          type: string
          format: date
          example: '2024-08-01'
      - name: endCloudCreated
        in: query
        description: Used to filter opportunities by specifying the latest creation date. Opportunities created on or before this date will be included in the results.
        schema:
          type: string
          format: date
          example: '2024-08-01'
      - name: sortField
        in: query
        description: 'The field to sort the opportunities by. Only takes effect when `sortOrder`

          is also supplied; both query parameters must be present together for sorting

          to apply. If only `sortField` is provided, the response uses the default

          ordering instead. Note that `cloudProviderID` is case-sensitive: the trailing

          `ID` is uppercase, and sending `cloudProviderId` (lowercase `d`) returns

          `400 Bad Request: Invalid sortField`.'
        schema:
          type: string
          enum:
          - cloudProviderID
          - cloudStatus
          - cloudSalesStage
          - cloudCreated
          - cloudLastModified
          - companyName
          - title
          - targetCloseDate
          - unifiedCreatedDate
      - name: sortOrder
        in: query
        description: 'Sort direction. Only takes effect when `sortField` is also supplied — both

          query parameters must be present together. If only `sortOrder` is provided

          (without `sortField`), the response uses the underlying default ordering

          instead of any sort. There is no implicit ascending default applied when

          only one of the two parameters is sent.'
        schema:
          type: string
          enum:
          - asc
          - desc
      - name: crmId
        in: query
        description: 'Filter by the Salesforce CRM identifier of the linked opportunity record.

          For Salesforce, both 15- and 18-character IDs are accepted. To filter by

          a HubSpot Deal ID instead, see the `hubspotCrmId` field on

          `OpportunityMetadata`.'
        schema:
          type: string
          example: 006QL00000BahjGYAR
      - name: hasCloudErrors
        in: query
        description: 'Filter opportunities by their AWS Partner Central error state. Set to

          `true` to return only opportunities whose most recent AWS Partner Central

          request failed; set to `false` to return only opportunities with no

          cloud-side errors. Omit to disable the filter. Inspect

          `listOpportunityEvents` for the matching opportunity to see the error

          detail.'
        schema:
          type: boolean
          example: false
      - name: hasCrmId
        in: query
        description: 'Filter opportunities by whether a CRM identifier is linked. Set to `true`

          to return only opportunities that have a `crmId` (Salesforce) or

          `hubspotCrmId` value populated; set to `false` to return only

          opportunities with no CRM identifier linked. Omit to disable the filter.'
        schema:
          type: boolean
          example: true
      - name: hasSalesforceErrors
        in: query
        description: 'Filter opportunities by their Salesforce sync state. Set to `true` to

          return only opportunities whose most recent Salesforce sync attempt

          failed; set to `false` to return only opportunities with no Salesforce

          sync errors. Omit to disable the filter. The error message itself is

          available on the matching opportunity in the `salesforceSyncError` field.'
        schema:
          type: boolean
          example: true
      - name: hasAnyError
        in: query
        description: "Filters opportunities by their error state.\n\n- `true` returns only opportunities that currently have at least one\n  cloud-side error or Salesforce-sync error.\n- `false` returns only opportunities that have no cloud-side or\n  Salesforce-sync errors.\n- Omit the parameter to disable this filter entirely.\n\nSee `hasCloudErrors` and `hasSalesforceErrors` to filter on each error\nsource independently."
        schema:
          type: boolean
          example: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListOpportunitiesResponse'
              examples:
                listOpportunities:
                  summary: List Opportunities
                  value:
                    opportunities:
                    - id: tackle-cosell-2lFCqCaslodkeuysLfBp1ddo30
                      cloudProviderId: O123456
                      cloudStatus: Approved
                      cloudSalesStage: Closed Lost
                      companyName: Acme Corp
                      created: '2024-08-27T13:50:25Z'
                      pendingRequestIds: []
                      title: An opportunity title
                      opportunityType: Expansion
                      source: Inbound
                      cloudCreated: '2024-08-28T00:03:40Z'
                      cloudLastModified: '2024-08-28T00:04:10Z'
                      unifiedCreatedDate: '2024-08-28T00:03:40Z'
                    - id: tackle-cosell-2lGPOvybT28ieur76jJwkkz7Of6
                      cloudProviderId: O234567
                      cloudStatus: Approved
                      cloudSalesStage: Closed Lost
                      companyName: Globex Industries
                      created: '2024-08-28T00:03:31Z'
                      pendingRequestIds:
                      - example-00123456789ABCDEFGHIJKL
                      title: Tackle - Marketplace Listing
                      opportunityType: Net New Business
                      crmId: 006QL00000BahjGYAR
                      source: Inbound
                      cloudCreated: '2024-08-28T00:03:40Z'
                      cloudLastModified: '2024-08-28T00:04:10Z'
                      unifiedCreatedDate: '2024-08-28T00:03:40Z'
                    total: 2
                    currentPageCount: 2
                    isNextPage: false
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      operationId: createOpportunity
      summary: Create a co-sell opportunity
      description: 'Queues a create request against AWS Partner Central. The success response is `202 Accepted`

        with the Tackle identifier; poll `getOpportunity` to observe the cloud-side outcome.


        If a `crmId` is supplied and your vendor account enforces a one-opportunity-per-CRM-ID

        constraint, the request is rejected with `409 Conflict` when an existing co-sell

        opportunity already maps to the same CRM identifier. Whether this constraint is enforced

        is configured per vendor; contact your Tackle account team if you need to change the

        behavior.'
      tags:
      - Opportunities
      parameters:
      - in: header
        name: tackle-operation-id
        schema:
          type: string
          enum:
          - createOpportunity
          - createDraftOpportunity
          description: 'Selects the create flow. `createOpportunity` (the default) creates the

            opportunity and starts the AWS engagement; `createDraftOpportunity` creates

            the opportunity in draft state without starting an engagement.


            Header matching is lenient: only `createDraftOpportunity` is matched

            explicitly, and any other value (including unknown values, an empty

            string, or an omitted header) is routed through the default

            `createOpportunity` flow rather than rejected with `400 Bad Request`.

            Clients should still send one of the documented values so future

            server-side validation can be adopted without a breaking change.'
        required: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateOpportunityInput'
            examples:
              createAndStartEngagementOpportunity:
                summary: Create and start engagement for the opportunity
                value:
                  customer:
                    account:
                      address:
                        countryCode: US
                        postalCode: '33351'
                        stateOrRegion: Florida
                      companyName: Test INC.
                      industry: Computers and Electronics
                      websiteUrl: https://www.tackle.com
                  lifeCycle:
                    targetCloseDate: '2024-09-18'
                  marketing:
                    source: None
                  opportunityType: Net New Business
                  opportunityTeam:
                  - email: tc@tackle.io
                    firstName: Timothy
                    lastName: Cazu
                    businessTitle: PartnerAccountManager
                  primaryNeedsFromAws:
                  - Co-Sell - Deal Support
                  - Co-Sell - Pricing Assistance
                  project:
                    additionalComments: a random text
                    competitorName: ''
                    customerBusinessProblem: An example business problem that needs solving
                    customerUseCase: AI Machine Learning and Analytics
                    deliveryModels:
                    - SaaS or PaaS
                    expectedCustomerSpend:
                    - amount: '25000'
                      currencyCode: USD
                      targetCompany: Example INC.
                      frequency: Monthly
                    salesActivities:
                    - Initialized discussions with customer
                    - Customer has shown interest in solution
                    title: Test opportunity
                  softwareRevenue: {}
                  solutions:
                  - S-0014870
                  awsMarketplaceOffers: []
                  awsProducts:
                  - AmazonBedrock
                  - AmazonS3
                  awsSubmission:
                    involvementType: Co-Sell
                    visibility: Full
                  crmId: 006QL00000BahjGYAR
              createDraftOpportunity:
                summary: Create a draft opportunity
                description: To create a draft opportunity, you will need to include the `createDraftOpportunity` tackle-operation-id in the header.
                value:
                  customer:
                    account:
                      address:
                        countryCode: US
                        postalCode: '33351'
                        stateOrRegion: Florida
                      companyName: Test INC.
                      industry: Computers and Electronics
                      websiteUrl: https://www.tackle.com
                  lifeCycle:
                    targetCloseDate: '2024-09-18'
                  marketing:
                    source: None
                  opportunityType: Net New Business
                  opportunityTeam:
                  - email: tc@tackle.io
                    firstName: Timothy
                    lastName: Cazu
                    businessTitle: PartnerAccountManager
                  primaryNeedsFromAws:
                  - Co-Sell - Deal Support
                  - Co-Sell - Pricing Assistance
                  project:
                    additionalComments: a random text
                    competitorName: ''
                    customerBusinessProblem: An example business problem that needs solving
                    customerUseCase: AI Machine Learning and Analytics
                    deliveryModels:
                    - SaaS or PaaS
                    expectedCustomerSpend:
                    - amount: '25000'
                      currencyCode: USD
                      targetCompany: Example INC.
                      frequency: Monthly
                    salesActivities:
                    - Initialized discussions with customer
                    - Customer has shown interest in solution
                    title: Test opportunity
                  softwareRevenue: {}
                  solutions:
                  - S-0014870
                  awsMarketplaceOffers: []
                  awsProducts:
                  - AmazonBedrock
      responses:
        '202':
          description: 'Accepted. The create-opportunity request has been queued for asynchronous processing

            in AWS Partner Central. The returned `id` is the Tackle identifier that can be used

            immediately with `getOpportunity` and `updateOpportunity`; the cloud-side identifier

            (`cloudProviderId`) becomes available once the request reaches AWS.'
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: The Tackle identifier for the opportunity.
              example:
                id: tackle-cosell-2jhD8b41CurTOqEsG2Soinublv3
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /api/opportunities/{opportunity_id}:
    get:
      operationId: getOpportunity
      summary: Get a co-sell opportunity
      tags:
      - Opportunities
      parameters:
      - $ref: '#/components/parameters/opportunity_id'
      responses:
        '200':
          description: 'OK. When the cloud-side payload is unavailable for the opportunity (for example,

            immediately after `createOpportunity` returns 202 but before AWS Partner Central

            has populated the cloud-side record), the response may contain only `metadata` and

            omit `awsOpportunitySummary`, `customer`, `lifeCycle`, and the other AWS-derived

            fields. Clients should treat fields outside `metadata` as optional.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpportunityResponse'
              examples:
                getOpportunity:
                  summary: Get Opportunity
                  description: You can retrieve the opportunity information by providing the unique identifier for the opportunity.
                  value:
                    nationalSecurity: 'No'
                    catalog: Sandbox
                    createdDate: '2024-08-19T15:30:20Z'
                    id: O1234567
                    customer:
                      account:
                        companyName: Test INC.
                        websiteUrl: https://www.tackle.com
                        industry: Computers and Electronics
                        address:
                          countryCode: US
                          postalCode: '33351'
                          stateOrRegion: Florida
                      contacts:
                      - email: ll@example.com
                        firstName: Luis
                        lastName: Lora
                        businessTitle: CEO
                    opportunityTeam:
                    - email: vv@example.com
                      firstName: Victor
                      lastName: Vargas
                      businessTitle: Alliance Leader
                    lastModifiedDate: '2024-08-19T16:00:08Z'
                    opportunityType: Net New Business
                    source: Outbound
                    lifeCycle:
                      reviewStatus: Submitted
                      stage: Prospect
                      targetCloseDate: '2024-09-18'
                    marketing:
                      source: None
                    partnerOpportunityIdentifier: tackle-cosell-2ksnzr4Dy2NuUubXB1XyVigr2ut
                    primaryNeedsFromAws:
                    - Co-Sell - Pricing Assistance
                    - Co-Sell - Deal Support
                    solutions:
                    - S-0014870
                    awsProducts:
                    - AmazonBedrock
                    - AmazonS3
                    project:
                      additionalComments: a random text
                      customerBusinessProblem: An example business problem that needs solving
                      customerUseCase: AI Machine Learning and Analytics
                      deliveryModels:
                      - SaaS or PaaS
                      expectedCustomerSpend:
                      - amount: '98765'
                        currencyCode: USD
                        frequency: Monthly
                        targetCompany: Example INC.
                      salesActivities:
                      - Initialized discussions with customer
                      - Customer has shown interest in solution
                      title: Test opportunity
                    awsOpportunitySummary:
                      catalog: Sandbox
                      customer:
                        contacts:
                        - email: xyz@example.com
                          firstName: John
                          lastName: Doe
                      insights:
                        engagementScore: High
                      involvementType: Co-Sell
                      involvementTypeChangeReason: Expansion Opportunity
                      lifeCycle:
                        stage: Prospect
                        targetCloseDate: '2024-09-18'
                      opportunityTeam:
                      - email: aa@aws.com
                        firstName: Aaron
                        lastName: Arc
                        businessTitle: PSM
                      origin: Partner Referral
                      project:
                        expectedCustomerSpend:
                        - amount: '98765'
                          currencyCode: USD
                          frequency: Monthly
                          targetCompany: Example INC.
                      relatedEntityIds:
                        awsProducts:
                        - AmazonBedrock
                        - AmazonS3
                        solutions:
                        - S-0014870
                      visibility: Full
                    metadata:
                      id: tackle-cosell-2ksnzr4Dy2NuUubXB1XyVigr2ut
                      companyName: Test INC.
                      createdDate: '2024-08-19T15:30:20Z'
                      lastModifiedDate: '2024-08-19T15:30:20Z'
                      crmId: 006QL00000BahjGYAR
                      crmOrgId: 00D5g000004uvWXYZ
                      hasCloudErrors: false
                      hasSalesforceErrors: false
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      operationId: updateOpportunity
      summary: Update a co-sell opportunity
      description: "Queues a partial update against AWS Partner Central. The exact behavior depends on\nthe value of the `tackle-operation-id` header.\n\n- Production cloud operations: `updateOpportunity` (default), `updateDraftOpportunity`,\n  `updateStartEngagementOpportunity`, `startEngagement`, `closeLostOpportunity`,\n  `launchOpportunity`, `updateOpportunityCRMID`.\n- Test-environment-only: `acceptOpportunity`, `rejectOpportunity`. These simulate\n  AWS-side responses to an incoming engagement invitation/opportunity and are routable\n  only for vendor accounts provisioned for use in a test environment. Production vendor\n  accounts that send one of these operation IDs receive `400 Bad Request` with the\n  message `the requested operation is only supported in test or demo environments.`\n\nThe success response is `202 Accepted` with an empty body; poll `getOpportunity` or\n`listOpportunityEvents` to observe the outcome of the queued request."
      tags:
      - Opportunities
      parameters:
      - $ref: '#/components/parameters/opportunity_id'
      - in: header
        name: tackle-operation-id
        schema:
          type: string
          enum:
          - updateOpportunity
          - updateDraftOpportunity
          - updateStartEngagementOpportunity
          - startEngagement
          - closeLostOpportunity
          - launchOpportunity
          - updateOpportunityCRMID
          - acceptOpportunity
          - rejectOpportunity
          description: 'Selects the operation to perform. The values `acceptOpportunity` and

            `rejectOpportunity` are test-environment-only and return `400 Bad Request`

            for production vendors with the message

            `the requested operation is only supported in test or demo environments.`'
        required: true
        example: updateOpportunity
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OpportunityInput'
            examples:
              updateOpportunity:
                summary: Update the opportunity
                description: You will likely want to update the opportunity information at some point during the process, to do so you will need to include the `updateOpportunity` operation ID in the header.
                value:
                  project:
                    title: New Title
                    expectedCustomerSpend:
                    - currencyCode: USD
                      amount: '9999.99'
                      frequency: Monthly
                      targetCompany: Example INC.
              updateStartEngagementOpportunity:
                summary: Update and start engagement for the opportunity
                description: You will likely want to update and start engaging a draft opportunity at some point during the process, to do so you will need to include the `updateStartEngagementOpportunity` tackle-operation-id in the header.
                value:
                  project:
                    title: New Title
                    expectedCustomerSpend:
                    - currencyCode: USD
                      amount: '9999.99'
                      frequency: Monthly
                      targetCompany: Example INC.
                    awsSubmission:
                      involvementType: Co-Sell
                      visibility: Full
              startEngagement:
                summary: Start engagement for a draft opportunity
                description: When you are ready to start engaging with AWS, you will need to include the `startEngagement` operation ID in the header.
                value:
                  awsSubmission:
                    involvementType: Co-Sell
                    visibility: Full
              closeLostOpportunity:
                summary: Close a lost opportunity
                description: If the opportunity is no longer viable, you can close it as lost. To do so, you will need to include the `closeLostOpportunity` operation ID in the header.
                value:
                  lifeCycle:
                    closedLostReason: Price
                  project:
                    additionalComments: No too much comments
              launchOpportunity:
                summary: Launch the opportunity
                description: When the opportunity is ready to be launched, you will need to include the `launchOpportunity` operation ID in the header.
                value:
                  lifeCycle:
                    targetCloseDate: '2024-09-18'
                  softwareRevenue:
                    effectiveDate: '2024-10-01'
                    expirationDate: '2025-01-01'
                    deliveryModel: Pay-as-you-go
                    value:
                      amount: '22222'
                      currencyCode: USD
                  solutions:
                  - S-0014870
                  awsProducts:
                  - AmazonBedrock
                  awsMarketplaceOffers:
                  - offer-123456
              updateOpportunityCRMID:
                summary: Sets the crmID for the opportunity and a linked invitation if it exists
                description: A user can set a crmID on an opportunity after the user created the opportunity. This is useful when the user wants to link the opportunity to a CRM record (e.g. Salesforce opportunity record).
                value:
                  crmId: 006QL00001BahjGYAR
              acceptOpportunity:
                summary: Accept an incoming opportunity (test-environment-only)
                description: 'Test-environment-only. Simulates AWS accepting an incoming opportunity

                  so that downstream workflows can be exercised without sending the

                  request to AWS Partner Central. The request body is ignored. Production

                  vendors that send `acceptOpportunity` receive `400 Bad Request` with the

                  message `the requested operation is only supported in test or demo environments.`'
                value: {}
              rejectOpportunity:
                summary: Reject an incoming opportunity (test-environment-only)
                description: 'Test-environment-only. Simulates AWS rejecting an incoming opportunity

                  so that downstream workflows can be exercised without sending the

                  request to AWS Partner Central. The request body is ignored. Production

                  vendors that send `rejectOpportunity` receive `400 Bad Request` with the

                  message `the requested operation is only supported in test or demo environments.`'
                value: {}
      responses:
        '202':
          description: 'Accepted. The update request has been queued for asynchronous processing in AWS

            Partner Central. The response body is empty; poll `getOpportunity` or

            `listOpportunityEvents` to observe the result of the queued request.'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '423':
          $ref: '#/components/responses/Locked'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /api/opportunities/{opportunity_id}/events:
    get:
      operationId: listOpportunityEvents
      summary: List opportunity events
      tags:
      - Opportunities
      parameters:
      - $ref: '#/components/parameters/opportunity_id'
      - in: query
        name: next
        description: 'Cursor token used to resume a paginated history query. When supplied, the

          query continues from where a previous request left off.


          **Note**: this endpoint does not currently emit `next` cursors on responses

          (see the `next` field of the response schema below

# --- truncated at 32 KB (137 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/tackleio/refs/heads/main/openapi/tackleio-opportunities-api-openapi.yml