openapi: 3.1.0
info:
  title: Partner Contracts API
  description: 'A contract represents the formal agreement between a partner and a
    brand, outlining the payout terms, referral policies, and any special conditions
    governing the partnership. Each contract is associated with a campaign and includes
    detailed payout rules, locking schedules, and optional campaign-level term overrides.

    '
  version: '15'
  contact:
    name: impact.com Developer Support
    url: https://app.impact.com/secure/help/contact-support.ihtml
servers:
- url: https://api.impact.com
tags:
- name: Contracts
  description: Endpoints for retrieving partner contract details and payout terms.
paths:
  /Mediapartners/{AccountSID}/Contracts:
    get:
      operationId: listContracts
      tags:
      - Contracts
      summary: List Contracts
      description: Returns a list of all contracts associated with your partner account.
      parameters:
      - name: AccountSID
        in: path
        required: true
        schema:
          type: string
        description: Unique identifier for the partner account.
      - name: CampaignId
        in: query
        required: false
        schema:
          type: integer
        description: Filters contracts by the campaign they belong to.
      - name: Status
        in: query
        required: false
        schema:
          type: string
          enum:
          - ACTIVE
          - DECLINED
          - EXPIRED
          - PENDING
          - UPCOMING
        description: Return contracts with a specific status. If omitted, only contracts where Status is ACTIVE are returned.
      - name: Signatory
        in: query
        required: false
        schema:
          type: string
        description: Return contracts with a particular signatory. Matches against both BrandSignatory and PartnerSignatory.
      - name: DateLastUpdatedBefore
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Return contracts last updated before a specific date and time (ISO 8601).
      - name: DateLastUpdatedAfter
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Return contracts last updated after a specific date and time (ISO 8601).
      - name: StartDateBefore
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Return contracts that start before a specific date and time (ISO 8601).
      - name: StartDateAfter
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Return contracts that start after a specific date and time (ISO 8601).
      - name: EndDateBefore
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Return contracts that end before a specific date and time (ISO 8601).
      - name: EndDateAfter
        in: query
        required: false
        schema:
          type: string
          format: date-time
        description: Return contracts that end after a specific date and time (ISO 8601).
      responses:
        '200':
          description: A list of contract objects.
          content:
            application/json:
              schema:
                type: object
                properties:
                  Contracts:
                    type: array
                    items:
                      $ref: '#/components/schemas/Contract'
  /Mediapartners/{AccountSID}/Contracts/{Id}:
    get:
      operationId: retrieveContract
      tags:
      - Contracts
      summary: Retrieve a Contract
      description: |
        'Retrieves the full details of an existing contract using its unique

        **Note:** To retrieve `ScheduledTerms` and `CampaignTerms` objects, either upgrade your API version to the latest or append `?IRVersion=15` to your cURL request.
        ID, including complete campaign-level term overrides. The `PdfUri` field in
        the response can be used to download a PDF copy of the contract.'
      parameters:
      - name: AccountSID
        in: path
        required: true
        schema:
          type: string
        description: Unique identifier for the partner account.
      - name: Id
        in: path
        required: true
        schema:
          type: string
        description: The unique identifier for the contract.
      responses:
        '200':
          description: The contract object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contract'
components:
  schemas:
    Contract:
      type: object
      properties:
        Id:
          type: string
          description: Unique identifier for the contract.
          example: S-37085294
        CampaignId:
          type: string
          description: Unique identifier for the campaign this contract is associated
            with.
          example: '10306'
        Status:
          type: string
          description: The current status of the contract (e.g., ACTIVE, PENDING,
            EXPIRED, TERMINATED).
          example: ACTIVE
        StartDate:
          type: string
          format: date-time
          description: The date and time the contract becomes effective (ISO 8601).
          example: '2026-03-01T00:00:00-08:00'
        EndDate:
          type: string
          format: date-time
          description: The date and time the contract expires (ISO 8601). Empty if
            the contract has no end date.
          example: ''
        BrandSignatory:
          type: string
          description: Name of the brand representative who signed the contract.
          example: Robin Banks
        BrandSignatoryDate:
          type: string
          format: date-time
          description: Date and time the brand signatory signed the contract (ISO
            8601).
          example: '2026-02-28T23:51:22-08:00'
        PartnerSignatory:
          type: string
          description: Name of the partner representative who signed the contract.
          example: Carrie Oakey
        PartnerSignatoryDate:
          type: string
          format: date-time
          description: Date and time the partner signatory signed the contract (ISO
            8601).
          example: '2026-02-28T23:51:22-08:00'
        DateCreated:
          type: string
          format: date-time
          description: Date and time the contract was created (ISO 8601).
          example: '2026-02-28T23:51:22-08:00'
        DateLastUpdated:
          type: string
          format: date-time
          description: Date and time the contract was last updated (ISO 8601).
          example: '2026-02-28T23:51:22-08:00'
        Terms:
          $ref: '#/components/schemas/Terms'
          description: The payout terms defined in this contract.
        HasCampaignTerms:
          type: boolean
          description: Whether this contract includes campaign-level term overrides.
            Returned by List Contracts. Use Retrieve a Contract to get the full CampaignTerms
            details.
          example: true
        CampaignTerms:
          type: array
          description: Campaign-level payout term overrides applied on top of the
            base contract terms. Returned by Retrieve a Contract only.
          items:
            $ref: '#/components/schemas/CampaignTerm'
        PdfUri:
          type: string
          description: API resource path for downloading a PDF copy of the contract.
          example: /Mediapartners/<AccountSID>/Campaigns/10306/Contracts/S-37085294/Download
        Uri:
          type: string
          description: Unique reference to the contract object in the impact.com API.
          example: /Mediapartners/<AccountSID>/Contracts/S-37085294
    Terms:
      type: object
      description: The payout terms defined in the contract.
      properties:
        TemplateTermName:
          type: string
          description: Display name of the payout template these terms are based on.
          example: ScheduledTerms Test
        Currency:
          type: string
          description: ISO 4217 currency code for payouts under this contract.
          example: USD
        TemplateId:
          type: string
          description: Unique identifier of the contract template the terms are based on.
        VersionId:
          type: string
          description: Version identifier of the contract template revision used.
        Name:
          type: string
          description: Display name of the terms.
        Labels:
          type: array
          description: Brand-applied labels grouping the contract by traits like commission tier.
          items:
            type: string
        EventPayouts:
          type: array
          description: Payout rules for each tracked event type.
          items:
            $ref: '#/components/schemas/EventPayout'
        SpecialTermsList:
          type: array
          description: Any special terms or conditions appended to the contract.
          items:
            $ref: '#/components/schemas/SpecialTerm'
        ChangeNotificationPeriod:
          type: string
          description: Number of days advance notice required before the brand can
            modify the contract terms.
          example: '0'
        ReturnPolicy:
          type: string
          description: The return policy applied to this contract (e.g., ALWAYS_OK,
            NO_RETURNS).
          example: ALWAYS_OK
        MaxReturnPercentage:
          type: string
          description: The maximum percentage of actions that can be reversed as returns.
          example: '100'
        CustomCreativePayer:
          type: string
          description: Who pays for custom creative assets (e.g., ADVERTISER, PUBLISHER).
          example: ADVERTISER
        ActionLimit:
          type: string
          description: Maximum number of actions allowed before payouts cap, per ActionLimitPeriod.
        ActionLimitPeriod:
          type: string
          description: 'Period over which ActionLimit is measured (e.g., DAY, WEEK, MONTH).'
        SpendLimit:
          type: string
          format: decimal
          description: Maximum spend allowed before payouts cap, per SpendLimitPeriod.
        SpendLimitPeriod:
          type: string
          description: 'Period over which SpendLimit is measured (e.g., DAY, WEEK, MONTH).'
        MinEarningPerClick:
          type: string
          format: decimal
          description: Minimum earnings per click guaranteed by the contract.
        ContractStartSlottingFee:
          type: string
          format: decimal
          description: Slotting fee paid at the start of the contract.
    EventPayout:
      type: object
      description: Payout rules for a specific tracked event type.
      properties:
        EventTypeId:
          type: string
          description: Unique identifier for the event type (action tracker).
          example: '18503'
        EventTypeName:
          type: string
          description: Display name of the event type.
          example: Online Sale
        EventCategory:
          type: string
          description: Category of the event (e.g., SALE, LEAD, CLICK).
          example: SALE
        DefaultPayoutRate:
          type: string
          description: The default payout rate applied when no adjustment rules are
            matched.
          example: '0'
        PayoutLevel:
          type: string
          description: Whether the payout is calculated at the order level or per
            item (e.g., ORDER, ITEM).
          example: ITEM
        DefaultPayout:
          type: string
          format: decimal
          description: Default payout amount for events of this type, before any adjustments.
        PayoutGroups:
          type: array
          description: Conditional payout groups that apply different rates based on rule matches. Returned only when ?IRVersion=15 or later is used.
          items:
            $ref: '#/components/schemas/PayoutGroup'
        PayoutRestrictions:
          type: array
          description: Conditional restrictions that prevent payout when their rules match.
          items:
            $ref: '#/components/schemas/PayoutRestriction'
        Limits:
          type: array
          description: Payout caps that limit how much the partner can earn for this event type within a period.
          items:
            $ref: '#/components/schemas/Limit'
        PayoutAdjustments:
          type: array
          description: Conditional rules that adjust the default payout rate up or
            down.
          items:
            $ref: '#/components/schemas/PayoutAdjustment'
        PerformanceBonus:
          $ref: '#/components/schemas/PerformanceBonus'
          description: Tiered bonus payout that activates when a revenue or action
            threshold is reached.
        Locking:
          $ref: '#/components/schemas/Locking'
          description: Rules governing when an action locks and can no longer be modified.
        PayoutScheduling:
          $ref: '#/components/schemas/PayoutScheduling'
          description: Rules governing when a locked action is scheduled for payout.
        CreditPolicy:
          type: string
          description: Attribution policy determining which partner receives credit
            for the conversion (e.g., LAST_REFERRER, FIRST_REFERRER).
          example: LAST_REFERRER
        ValidReferrals:
          type: array
          description: The referral types and attribution windows that qualify for
            credit.
          items:
            $ref: '#/components/schemas/ValidReferral'
    PayoutAdjustment:
      type: object
      description: A conditional rule that adjusts the default payout rate.
      properties:
        Id:
          type: string
          description: Unique identifier for the payout adjustment rule.
          example: 8c281c2e-f61e-4b11-a9f9-9be38c79fe9e
        Rules:
          type: array
          description: Conditions that must be met for this adjustment to apply.
          items:
            $ref: '#/components/schemas/Rule'
        Direction:
          type: string
          description: Whether this adjustment increases or decreases the payout (INCREASE,
            DECREASE).
          example: INCREASE
        Rate:
          type: string
          description: The adjustment rate applied to the payout when conditions are
            met.
          example: '0'
    Rule:
      type: object
      description: A single condition within a payout adjustment or payout group.
      properties:
        Variable:
          type: string
          description: The attribute being evaluated (e.g., DERIVED_BROWSER, CUSTOMER_STATUS,
            ITEM_SKU, ITEM_CATEGORY).
          example: CUSTOMER_STATUS
        Operator:
          type: string
          description: The comparison operator (e.g., IS, IS_NOT, CONTAINS).
          example: IS
        Values:
          type: array
          description: The values to compare against.
          items:
            type: string
          example:
          - EXISTING
    PerformanceBonus:
      type: object
      description: Tiered bonus payout that activates when a revenue or action threshold
        is reached.
      properties:
        Type:
          type: string
          description: The type of performance bonus (e.g., SUBSEQUENT_ACTIONS, ALL_ACTIONS).
          example: SUBSEQUENT_ACTIONS
        Basis:
          type: string
          description: The metric used to measure performance (e.g., REVENUE, ACTIONS).
          example: REVENUE
        Period:
          type: string
          description: The time period over which performance is measured (e.g., CALENDAR_MONTH,
            CALENDAR_YEAR).
          example: CALENDAR_MONTH
        Tiers:
          type: array
          description: The threshold tiers and their associated bonus payout rates.
          items:
            $ref: '#/components/schemas/PerformanceBonusTier'
    PerformanceBonusTier:
      type: object
      description: A single threshold tier within a performance bonus structure.
      properties:
        RevenueThreshold:
          type: string
          description: The revenue amount that must be reached to unlock this tier's
            bonus rate.
          example: '1000000.00'
        PayoutRate:
          type: string
          description: The bonus payout rate applied once the revenue threshold is
            reached.
          example: '0'
    Locking:
      type: object
      description: Rules governing when an action locks and can no longer be modified.
      properties:
        Basis:
          type: string
          description: The basis for the locking schedule (e.g., TRACKED, CLEARED).
          example: TRACKED
        Period:
          type: string
          description: The unit of the locking period (e.g., MONTH, DAY).
          example: MONTH
        MonthOffset:
          type: string
          description: Number of months after the basis date before locking occurs.
          example: '1'
        DayOffset:
          type: string
          description: Number of days after the month offset before locking occurs.
          example: '0'
    PayoutScheduling:
      type: object
      description: Rules governing when a locked action is scheduled for payout.
      properties:
        Basis:
          type: string
          description: The basis for the payout schedule (e.g., LOCKED, CLEARED).
          example: LOCKED
        Period:
          type: string
          description: The payout period frequency (e.g., END_OF_DAY, END_OF_WEEK,
            END_OF_MONTH).
          example: END_OF_DAY
    ValidReferral:
      type: object
      description: A referral type and attribution window that qualifies for conversion
        credit.
      properties:
        Type:
          type: string
          description: The type of referral that qualifies (e.g., CLICKS, IMPRESSIONS).
          example: CLICKS
        Window:
          type: string
          description: The length of the attribution window.
          example: '30'
        WindowUnit:
          type: string
          description: The unit of the attribution window (e.g., DAY, HOUR).
          example: DAY
    SpecialTerm:
      type: object
      description: A special term or condition appended to the contract.
      properties:
        TermsName:
          type: string
          description: Display name of the special term.
          example: Custom Terms
        TermsType:
          type: string
          description: The type of special term (e.g., CUSTOM, PROMOTIONAL_RESTRICTION).
          example: CUSTOM
        TermsContent:
          type: string
          description: The full text or HTML content of the special term.
          example: <p>Custom terms and conditions content.</p>
    CampaignTerm:
      type: object
      description: A campaign-level payout term override applied on top of the base
        contract terms.
      properties:
        Id:
          type: string
          description: Unique identifier for the campaign term.
          example: '3578'
        Name:
          type: string
          description: Display name of the campaign term.
          example: ForgeMaster Anvils at Acme SuperCenter - Product Boost
        StartDate:
          type: string
          format: date-time
          description: Date and time the campaign term becomes effective (ISO 8601).
          example: '2025-08-16T00:00:00-07:00'
        EndDate:
          type: string
          format: date-time
          description: Date and time the campaign term expires (ISO 8601).
          example: '2029-08-31T23:59:59-07:00'
        EventPayouts:
          type: array
          description: Item-level payout rules applied by this campaign term.
          items:
            $ref: '#/components/schemas/CampaignTermEventPayout'
    CampaignTermEventPayout:
      type: object
      description: Payout rules for a specific event type within a campaign term.
      properties:
        EventTypeId:
          type: string
          description: Unique identifier for the event type this payout applies to.
          example: '18503'
        PayoutLevel:
          type: string
          description: Whether the payout is calculated at the order level or per
            item (e.g., ORDER, ITEM).
          example: ITEM
        PayoutGroups:
          type: array
          description: Ordered groups of item-matching rules and their associated
            payout rates.
          items:
            $ref: '#/components/schemas/PayoutGroup'
    PayoutGroup:
      type: object
      description: A ranked group of item-matching rules with an associated payout rate.
      properties:
        Id:
          type: string
          description: Unique identifier for the payout group.
          example: 94bc1ae3-5f77-4e63-a862-3bbcf7f085dd
        Rank:
          type: string
          description: The priority rank of this group. Lower ranks are evaluated first.
          example: '1'
        Rules:
          type: array
          description: Item-matching conditions that must be met for this group's payout to apply.
          items:
            $ref: '#/components/schemas/Rule'
        PayoutRate:
          type: string
          description: Percentage payout rate applied when the group matches.
          example: '15'
        Payout:
          type: string
          format: decimal
          description: Fixed payout amount applied when the group matches. Either PayoutRate or Payout is returned, not both.
          example: '0.10'
        Limits:
          type: array
          description: Payout caps that limit this group's earnings within a period.
          items:
            $ref: '#/components/schemas/Limit'
    PayoutRestriction:
      type: object
      description: A rule that prevents payout for an action when its conditions match.
      properties:
        Id:
          type: string
          description: Unique identifier of this payout restriction.
        Rules:
          type: array
          description: Conditions that must all match for the restriction to apply.
          items:
            $ref: '#/components/schemas/Rule'
        ZeroPayoutHideReport:
          type: string
          description: Whether to hide the action from reports when payout is zero due to this restriction.
    Limit:
      type: object
      description: A cap on payouts within a period.
      properties:
        Type:
          type: string
          description: 'What is being limited (e.g., ACTION, PAYOUT).'
        Value:
          type: string
          description: The numeric limit value.
        LimitBy:
          type: string
          description: 'Dimension the limit applies to (e.g., CUSTOMER, ITEM).'
        Period:
          type: string
          description: 'Time period over which the limit resets (e.g., DAY, MONTH).'
        WeekendOverrideValue:
          type: string
          description: Override value applied on weekends.
