{
  "service": "tapfiliate",
  "displayName": "Tapfiliate",
  "categories": [
    "Marketing",
    "Data"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "TAPFILIATE_API_KEY",
      "description": "Tapfiliate API key sent in the X-Api-Key header. Find and manage it in Tapfiliate account settings: https://support.tapfiliate.com/en/articles/1441950-your-api-key."
    }
  ],
  "homepageUrl": "https://tapfiliate.com/",
  "actions": [
    {
      "id": "tapfiliate.create_affiliate",
      "service": "tapfiliate",
      "name": "create_affiliate",
      "description": "Create a Tapfiliate affiliate with contact, company, address, and custom field data.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "firstname": {
            "type": "string",
            "minLength": 1,
            "description": "The affiliate's first name."
          },
          "lastname": {
            "type": "string",
            "minLength": 1,
            "description": "The affiliate's last name."
          },
          "email": {
            "type": "string",
            "description": "The affiliate's email address.",
            "format": "email"
          },
          "password": {
            "type": "string",
            "minLength": 1,
            "description": "The password for the new affiliate account."
          },
          "company": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "description": "The affiliate company's name."
              },
              "description": {
                "type": "string",
                "minLength": 1,
                "description": "The affiliate company's description."
              }
            },
            "additionalProperties": true,
            "description": "The affiliate's company data."
          },
          "address": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string",
                "minLength": 1,
                "description": "The street address."
              },
              "address_two": {
                "type": "string",
                "minLength": 1,
                "description": "The second address line."
              },
              "postal_code": {
                "type": "string",
                "minLength": 1,
                "description": "The postal code."
              },
              "city": {
                "type": "string",
                "minLength": 1,
                "description": "The city."
              },
              "state": {
                "type": "string",
                "minLength": 1,
                "description": "The state or region."
              },
              "country": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "minLength": 1,
                    "description": "The ISO 3166-1 country code."
                  }
                },
                "additionalProperties": false,
                "description": "The affiliate address country."
              }
            },
            "additionalProperties": false,
            "required": [
              "address",
              "postal_code",
              "city",
              "country"
            ],
            "description": "The affiliate's address data."
          },
          "custom_fields": {
            "type": "object",
            "additionalProperties": {
              "description": "A custom field value accepted by Tapfiliate."
            },
            "description": "Provider-defined affiliate custom fields to send to Tapfiliate."
          }
        },
        "additionalProperties": false,
        "required": [
          "firstname",
          "lastname",
          "email"
        ],
        "description": "Fields for creating a Tapfiliate affiliate."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "affiliate": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "The Tapfiliate affiliate id."
              },
              "firstname": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate's first name when returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "lastname": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate's last name when returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate's email address when returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "company": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The affiliate company object returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "address": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The affiliate address object returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "meta_data": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The affiliate metadata object returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "parent_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The parent affiliate id when returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "affiliate_group_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate group id when returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "created_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate creation timestamp returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "promoted_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate promotion timestamp returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "promotion_method": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate promotion method returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "custom_fields": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The affiliate custom fields returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw affiliate object returned by Tapfiliate."
              }
            },
            "additionalProperties": false,
            "required": [
              "id",
              "firstname",
              "lastname",
              "email",
              "company",
              "address",
              "meta_data",
              "parent_id",
              "affiliate_group_id",
              "created_at",
              "promoted_at",
              "promotion_method",
              "custom_fields",
              "raw"
            ],
            "description": "A normalized Tapfiliate affiliate."
          }
        },
        "additionalProperties": false,
        "required": [
          "affiliate"
        ],
        "description": "The Tapfiliate create affiliate response."
      }
    },
    {
      "id": "tapfiliate.create_affiliate_group",
      "service": "tapfiliate",
      "name": "create_affiliate_group",
      "description": "Create a Tapfiliate affiliate group.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The affiliate group title."
          }
        },
        "additionalProperties": false,
        "required": [
          "title"
        ],
        "description": "Fields for creating a Tapfiliate affiliate group."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "affiliate_group": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "The Tapfiliate affiliate group id."
              },
              "title": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate group title."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "affiliate_count": {
                "anyOf": [
                  {
                    "type": "number",
                    "description": "The number of affiliates in the group when returned."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw affiliate group object returned by Tapfiliate."
              }
            },
            "additionalProperties": false,
            "required": [
              "id",
              "title",
              "affiliate_count",
              "raw"
            ],
            "description": "A normalized Tapfiliate affiliate group."
          }
        },
        "additionalProperties": false,
        "required": [
          "affiliate_group"
        ],
        "description": "The Tapfiliate create affiliate group response."
      }
    },
    {
      "id": "tapfiliate.create_click",
      "service": "tapfiliate",
      "name": "create_click",
      "description": "Create a Tapfiliate REST-only tracking click and return its click id for later conversion creation.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "referral_code": {
            "type": "string",
            "minLength": 1,
            "description": "The affiliate referral code obtained from the referral URL."
          },
          "source_id": {
            "type": "string",
            "minLength": 1,
            "description": "The source id used by the affiliate when present."
          },
          "meta_data": {
            "type": "object",
            "additionalProperties": {
              "description": "A metadata value accepted by Tapfiliate."
            },
            "description": "Provider-defined metadata key-value pairs to send to Tapfiliate."
          },
          "referrer": {
            "type": "string",
            "description": "The HTTP referrer used in Tapfiliate reporting.",
            "format": "uri"
          },
          "landing_page": {
            "type": "string",
            "description": "The current landing page used in Tapfiliate reporting.",
            "format": "uri"
          },
          "user_agent": {
            "type": "string",
            "minLength": 1,
            "description": "The full client user agent string."
          },
          "ip": {
            "type": "string",
            "minLength": 1,
            "description": "The client IP address."
          }
        },
        "additionalProperties": false,
        "required": [
          "referral_code"
        ],
        "description": "Fields for creating a Tapfiliate click."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "click": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "The Tapfiliate click id."
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw create click response returned by Tapfiliate."
              }
            },
            "additionalProperties": false,
            "required": [
              "id",
              "raw"
            ],
            "description": "The Tapfiliate click creation result."
          }
        },
        "additionalProperties": false,
        "required": [
          "click"
        ],
        "description": "The Tapfiliate create click response."
      }
    },
    {
      "id": "tapfiliate.create_conversion",
      "service": "tapfiliate",
      "name": "create_conversion",
      "description": "Create a Tapfiliate conversion using a documented referral, customer, click, coupon, tracking, or asset-source matcher.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "override_max_cookie_time": {
            "type": "boolean",
            "description": "Whether to override Tapfiliate's maximum cookie time for this conversion."
          },
          "referral_code": {
            "type": "string",
            "minLength": 1,
            "description": "An affiliate referral code."
          },
          "tracking_id": {
            "type": "string",
            "minLength": 1,
            "description": "The tracking id retrieved from the Tapfiliate JavaScript library."
          },
          "click_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Tapfiliate click id used to add reporting information."
          },
          "coupon": {
            "type": "string",
            "minLength": 1,
            "description": "A coupon code used to track the conversion."
          },
          "currency": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3,
            "description": "The three-letter ISO currency code for the conversion."
          },
          "asset_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Tapfiliate asset id."
          },
          "source_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Tapfiliate source id."
          },
          "external_id": {
            "type": "string",
            "minLength": 1,
            "description": "A unique conversion id from the caller's system."
          },
          "amount": {
            "type": "number",
            "description": "The conversion amount."
          },
          "customer_id": {
            "type": "string",
            "minLength": 1,
            "description": "The customer id from the caller's system."
          },
          "commission_type": {
            "type": "string",
            "minLength": 1,
            "description": "The Tapfiliate commission type."
          },
          "commissions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true,
              "description": "A Tapfiliate commission override object."
            },
            "description": "Commission overrides to send to Tapfiliate.",
            "minItems": 1
          },
          "meta_data": {
            "type": "object",
            "additionalProperties": {
              "description": "A metadata value accepted by Tapfiliate."
            },
            "description": "Provider-defined metadata key-value pairs to send to Tapfiliate."
          },
          "program_group": {
            "type": "string",
            "minLength": 1,
            "description": "The Tapfiliate program group id."
          },
          "user_agent": {
            "type": "string",
            "minLength": 1,
            "description": "The client's user agent string."
          },
          "ip": {
            "type": "string",
            "minLength": 1,
            "description": "The client's IP address."
          }
        },
        "additionalProperties": false,
        "description": "Fields for creating a Tapfiliate conversion.",
        "anyOf": [
          {
            "required": [
              "referral_code"
            ]
          },
          {
            "required": [
              "customer_id"
            ]
          },
          {
            "required": [
              "click_id"
            ]
          },
          {
            "required": [
              "coupon"
            ]
          },
          {
            "required": [
              "tracking_id"
            ]
          },
          {
            "required": [
              "asset_id",
              "source_id"
            ]
          }
        ],
        "dependentRequired": {
          "asset_id": [
            "source_id"
          ]
        }
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "conversion": {
            "type": "object",
            "properties": {
              "id": {
                "anyOf": [
                  {
                    "type": "number",
                    "description": "The numeric Tapfiliate conversion id when returned."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "external_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The external conversion id supplied by the merchant."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "amount": {
                "anyOf": [
                  {
                    "type": "number",
                    "description": "The conversion amount when returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "click": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The click object associated with this conversion."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "commissions": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "A Tapfiliate commission object."
                },
                "description": "The commission objects returned with this conversion."
              },
              "program": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The program object associated with this conversion."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "affiliate": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The affiliate object associated with this conversion."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "customer": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The customer object associated with this conversion."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "meta_data": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The conversion metadata returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "affiliate_meta_data": {
                "description": "Affiliate metadata returned with the conversion."
              },
              "created_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The conversion creation timestamp returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "warnings": {
                "description": "Warnings returned by Tapfiliate for this conversion."
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw conversion object returned by Tapfiliate."
              }
            },
            "additionalProperties": false,
            "required": [
              "id",
              "external_id",
              "amount",
              "click",
              "commissions",
              "program",
              "affiliate",
              "customer",
              "meta_data",
              "affiliate_meta_data",
              "created_at",
              "warnings",
              "raw"
            ],
            "description": "A normalized Tapfiliate conversion."
          }
        },
        "additionalProperties": false,
        "required": [
          "conversion"
        ],
        "description": "The Tapfiliate create conversion response."
      }
    },
    {
      "id": "tapfiliate.get_affiliate",
      "service": "tapfiliate",
      "name": "get_affiliate",
      "description": "Retrieve a single Tapfiliate affiliate by affiliate id.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "affiliate_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Tapfiliate affiliate id."
          }
        },
        "additionalProperties": false,
        "required": [
          "affiliate_id"
        ],
        "description": "The Tapfiliate affiliate to retrieve."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "affiliate": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "The Tapfiliate affiliate id."
              },
              "firstname": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate's first name when returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "lastname": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate's last name when returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate's email address when returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "company": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The affiliate company object returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "address": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The affiliate address object returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "meta_data": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The affiliate metadata object returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "parent_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The parent affiliate id when returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "affiliate_group_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate group id when returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "created_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate creation timestamp returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "promoted_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate promotion timestamp returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "promotion_method": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The affiliate promotion method returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "custom_fields": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "The affiliate custom fields returned by Tapfiliate."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "raw": {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw affiliate object returned by Tapfiliate."
              }
            },
            "additionalProperties": false,
            "required": [
              "id",
              "firstname",
              "lastname",
              "email",
              "company",
              "address",
              "meta_data",
              "parent_id",
              "affiliate_group_id",
              "created_at",
              "promoted_at",
              "promotion_method",
              "custom_fields",
              "raw"
            ],
            "description": "A normalized Tapfiliate affiliate."
          }
        },
        "additionalProperties": false,
        "required": [
          "affiliate"
        ],
        "description": "The Tapfiliate affiliate response."
      }
    },
    {
      "id": "tapfiliate.list_affiliate_groups",
      "service": "tapfiliate",
      "name": "list_affiliate_groups",
      "description": "List Tapfiliate affiliate groups.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "The 1-based Tapfiliate result page to request. Omit this field to request the first page."
          }
        },
        "additionalProperties": false,
        "description": "The input payload for listing Tapfiliate affiliate groups."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "affiliate_groups": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "The Tapfiliate affiliate group id."
                },
                "title": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The affiliate group title."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "affiliate_count": {
                  "anyOf": [
                    {
                      "type": "number",
                      "description": "The number of affiliates in the group when returned."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw affiliate group object returned by Tapfiliate."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "affiliate_count",
                "raw"
              ],
              "description": "A normalized Tapfiliate affiliate group."
            },
            "description": "The affiliate groups returned by Tapfiliate."
          },
          "pagination": {
            "type": "object",
            "properties": {
              "current_page": {
                "type": "integer",
                "minimum": 1,
                "description": "The page requested for this list operation."
              },
              "next_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The next page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "previous_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The previous page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "first_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The first page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "last_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The last page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "link_header": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The raw Tapfiliate Link header value when present."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "required": [
              "current_page",
              "next_page",
              "previous_page",
              "first_page",
              "last_page",
              "link_header"
            ],
            "description": "Pagination details parsed from Tapfiliate's Link header."
          }
        },
        "additionalProperties": false,
        "required": [
          "affiliate_groups",
          "pagination"
        ],
        "description": "The Tapfiliate affiliate groups list response."
      }
    },
    {
      "id": "tapfiliate.list_affiliates",
      "service": "tapfiliate",
      "name": "list_affiliates",
      "description": "List Tapfiliate affiliates with optional id, email, referral, and group filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "The 1-based Tapfiliate result page to request. Omit this field to request the first page."
          },
          "click_id": {
            "type": "string",
            "minLength": 1,
            "description": "A click id used to filter affiliates."
          },
          "source_id": {
            "type": "string",
            "minLength": 1,
            "description": "A source id used to filter affiliates."
          },
          "email": {
            "type": "string",
            "description": "An email address used to filter affiliates.",
            "format": "email"
          },
          "referral_code": {
            "type": "string",
            "minLength": 1,
            "description": "An affiliate referral code used to filter affiliates."
          },
          "parent_id": {
            "type": "string",
            "minLength": 1,
            "description": "A parent affiliate id used to list child affiliates."
          },
          "affiliate_group_id": {
            "type": "string",
            "minLength": 1,
            "description": "An affiliate group id used to filter affiliates."
          }
        },
        "additionalProperties": false,
        "description": "Filters for listing Tapfiliate affiliates."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "affiliates": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "The Tapfiliate affiliate id."
                },
                "firstname": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The affiliate's first name when returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "lastname": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The affiliate's last name when returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "email": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The affiliate's email address when returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "company": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The affiliate company object returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "address": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The affiliate address object returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "meta_data": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The affiliate metadata object returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "parent_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The parent affiliate id when returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "affiliate_group_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The affiliate group id when returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "created_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The affiliate creation timestamp returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "promoted_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The affiliate promotion timestamp returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "promotion_method": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The affiliate promotion method returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "custom_fields": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The affiliate custom fields returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw affiliate object returned by Tapfiliate."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "firstname",
                "lastname",
                "email",
                "company",
                "address",
                "meta_data",
                "parent_id",
                "affiliate_group_id",
                "created_at",
                "promoted_at",
                "promotion_method",
                "custom_fields",
                "raw"
              ],
              "description": "A normalized Tapfiliate affiliate."
            },
            "description": "The affiliates returned by Tapfiliate."
          },
          "pagination": {
            "type": "object",
            "properties": {
              "current_page": {
                "type": "integer",
                "minimum": 1,
                "description": "The page requested for this list operation."
              },
              "next_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The next page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "previous_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The previous page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "first_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The first page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "last_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The last page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "link_header": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The raw Tapfiliate Link header value when present."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "required": [
              "current_page",
              "next_page",
              "previous_page",
              "first_page",
              "last_page",
              "link_header"
            ],
            "description": "Pagination details parsed from Tapfiliate's Link header."
          }
        },
        "additionalProperties": false,
        "required": [
          "affiliates",
          "pagination"
        ],
        "description": "The Tapfiliate affiliates list response."
      }
    },
    {
      "id": "tapfiliate.list_clicks",
      "service": "tapfiliate",
      "name": "list_clicks",
      "description": "List Tapfiliate Enterprise click records with optional program, affiliate, and date filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "The 1-based Tapfiliate result page to request. Omit this field to request the first page."
          },
          "program_id": {
            "type": "string",
            "minLength": 1,
            "description": "The program id used to filter clicks."
          },
          "affiliate_id": {
            "type": "string",
            "minLength": 1,
            "description": "The affiliate id used to filter clicks."
          },
          "date_from": {
            "type": "string",
            "description": "The start date for click filtering.",
            "format": "date"
          },
          "date_to": {
            "type": "string",
            "description": "The end date for click filtering.",
            "format": "date"
          }
        },
        "additionalProperties": false,
        "description": "Filters for listing Tapfiliate clicks."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "clicks": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "The Tapfiliate click id."
                },
                "created_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The click creation timestamp returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "meta_data": {
                  "description": "The click metadata returned by Tapfiliate."
                },
                "details": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The click details object returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "geolocation": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The click geolocation object returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw click object returned by Tapfiliate."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "created_at",
                "meta_data",
                "details",
                "geolocation",
                "raw"
              ],
              "description": "A normalized Tapfiliate click."
            },
            "description": "The clicks returned by Tapfiliate."
          },
          "pagination": {
            "type": "object",
            "properties": {
              "current_page": {
                "type": "integer",
                "minimum": 1,
                "description": "The page requested for this list operation."
              },
              "next_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The next page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "previous_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The previous page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "first_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The first page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "last_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The last page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "link_header": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The raw Tapfiliate Link header value when present."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "required": [
              "current_page",
              "next_page",
              "previous_page",
              "first_page",
              "last_page",
              "link_header"
            ],
            "description": "Pagination details parsed from Tapfiliate's Link header."
          }
        },
        "additionalProperties": false,
        "required": [
          "clicks",
          "pagination"
        ],
        "description": "The Tapfiliate clicks list response."
      }
    },
    {
      "id": "tapfiliate.list_commissions",
      "service": "tapfiliate",
      "name": "list_commissions",
      "description": "List Tapfiliate commissions with optional affiliate, approval status, and paid filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "The 1-based Tapfiliate result page to request. Omit this field to request the first page."
          },
          "affiliate_id": {
            "type": "string",
            "minLength": 1,
            "description": "The affiliate id used to filter commissions."
          },
          "status": {
            "type": "string",
            "enum": [
              "approved",
              "disapproved",
              "pending"
            ],
            "description": "The Tapfiliate commission approval status."
          },
          "paid": {
            "type": "boolean",
            "description": "Whether to include only paid commissions."
          }
        },
        "additionalProperties": false,
        "description": "Filters for listing Tapfiliate commissions."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "commissions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "anyOf": [
                    {
                      "type": "number",
                      "description": "The numeric Tapfiliate commission id when returned."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "amount": {
                  "anyOf": [
                    {
                      "type": "number",
                      "description": "The commission amount."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "approved": {
                  "anyOf": [
                    {
                      "type": "boolean",
                      "description": "Whether the commission is approved."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "created_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The commission creation timestamp returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "commission_type": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The Tapfiliate commission type identifier."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "commission_name": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The Tapfiliate commission display name."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "kind": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The Tapfiliate commission kind."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "currency": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The commission currency."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "conversion": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The conversion object associated with this commission."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "affiliate": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The affiliate object associated with this commission."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "payout": {
                  "description": "The payout value returned by Tapfiliate."
                },
                "comment": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The commission comment when returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "final": {
                  "description": "The finalization state returned by Tapfiliate."
                },
                "finalization_date": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The finalization date returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw commission object returned by Tapfiliate."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "amount",
                "approved",
                "created_at",
                "commission_type",
                "commission_name",
                "kind",
                "currency",
                "conversion",
                "affiliate",
                "payout",
                "comment",
                "final",
                "finalization_date",
                "raw"
              ],
              "description": "A normalized Tapfiliate commission."
            },
            "description": "The commissions returned by Tapfiliate."
          },
          "pagination": {
            "type": "object",
            "properties": {
              "current_page": {
                "type": "integer",
                "minimum": 1,
                "description": "The page requested for this list operation."
              },
              "next_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The next page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "previous_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The previous page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "first_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The first page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "last_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The last page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "link_header": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The raw Tapfiliate Link header value when present."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "required": [
              "current_page",
              "next_page",
              "previous_page",
              "first_page",
              "last_page",
              "link_header"
            ],
            "description": "Pagination details parsed from Tapfiliate's Link header."
          }
        },
        "additionalProperties": false,
        "required": [
          "commissions",
          "pagination"
        ],
        "description": "The Tapfiliate commissions list response."
      }
    },
    {
      "id": "tapfiliate.list_conversions",
      "service": "tapfiliate",
      "name": "list_conversions",
      "description": "List Tapfiliate conversions with optional program, external id, affiliate, date, and status filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "The 1-based Tapfiliate result page to request. Omit this field to request the first page."
          },
          "program_id": {
            "type": "string",
            "minLength": 1,
            "description": "The program id used to filter conversions."
          },
          "external_id": {
            "type": "string",
            "minLength": 1,
            "description": "The external conversion id used to filter conversions."
          },
          "affiliate_id": {
            "type": "string",
            "minLength": 1,
            "description": "The affiliate id used to filter conversions."
          },
          "pending": {
            "type": "boolean",
            "description": "Only include conversions that have pending commissions."
          },
          "date_from": {
            "type": "string",
            "description": "The start date for conversion filtering.",
            "format": "date"
          },
          "date_to": {
            "type": "string",
            "description": "The end date for conversion filtering.",
            "format": "date"
          },
          "use_profile_timezone": {
            "type": "boolean",
            "description": "Whether Tapfiliate should use the profile time zone."
          }
        },
        "additionalProperties": false,
        "description": "Filters for listing Tapfiliate conversions."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "conversions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "anyOf": [
                    {
                      "type": "number",
                      "description": "The numeric Tapfiliate conversion id when returned."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "external_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The external conversion id supplied by the merchant."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "amount": {
                  "anyOf": [
                    {
                      "type": "number",
                      "description": "The conversion amount when returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "click": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The click object associated with this conversion."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "commissions": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": true,
                    "description": "A Tapfiliate commission object."
                  },
                  "description": "The commission objects returned with this conversion."
                },
                "program": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The program object associated with this conversion."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "affiliate": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The affiliate object associated with this conversion."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "customer": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The customer object associated with this conversion."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "meta_data": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The conversion metadata returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "affiliate_meta_data": {
                  "description": "Affiliate metadata returned with the conversion."
                },
                "created_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The conversion creation timestamp returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "warnings": {
                  "description": "Warnings returned by Tapfiliate for this conversion."
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw conversion object returned by Tapfiliate."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "external_id",
                "amount",
                "click",
                "commissions",
                "program",
                "affiliate",
                "customer",
                "meta_data",
                "affiliate_meta_data",
                "created_at",
                "warnings",
                "raw"
              ],
              "description": "A normalized Tapfiliate conversion."
            },
            "description": "The conversions returned by Tapfiliate."
          },
          "pagination": {
            "type": "object",
            "properties": {
              "current_page": {
                "type": "integer",
                "minimum": 1,
                "description": "The page requested for this list operation."
              },
              "next_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The next page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "previous_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The previous page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "first_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The first page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "last_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The last page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "link_header": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The raw Tapfiliate Link header value when present."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "required": [
              "current_page",
              "next_page",
              "previous_page",
              "first_page",
              "last_page",
              "link_header"
            ],
            "description": "Pagination details parsed from Tapfiliate's Link header."
          }
        },
        "additionalProperties": false,
        "required": [
          "conversions",
          "pagination"
        ],
        "description": "The Tapfiliate conversions list response."
      }
    },
    {
      "id": "tapfiliate.list_programs",
      "service": "tapfiliate",
      "name": "list_programs",
      "description": "List Tapfiliate programs with an optional asset filter.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "The 1-based Tapfiliate result page to request. Omit this field to request the first page."
          },
          "asset_id": {
            "type": "string",
            "minLength": 1,
            "description": "An asset id used to filter programs."
          }
        },
        "additionalProperties": false,
        "description": "Filters for listing Tapfiliate programs."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "programs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "The Tapfiliate program id."
                },
                "title": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The program title."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "currency": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The program currency."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "cookie_time": {
                  "anyOf": [
                    {
                      "type": "number",
                      "description": "The program cookie time in days when returned."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "default_landing_page_url": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The default landing page URL for this program."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "recurring": {
                  "anyOf": [
                    {
                      "type": "boolean",
                      "description": "Whether the program is recurring."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "recurring_cap": {
                  "anyOf": [
                    {
                      "type": "number",
                      "description": "The recurring cap when returned."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "recurring_period_days": {
                  "anyOf": [
                    {
                      "type": "number",
                      "description": "The recurring period in days when returned."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "program_category": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true,
                      "description": "The program category object returned by Tapfiliate."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "currency_symbol": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The program currency symbol."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "raw": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw program object returned by Tapfiliate."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "currency",
                "cookie_time",
                "default_landing_page_url",
                "recurring",
                "recurring_cap",
                "recurring_period_days",
                "program_category",
                "currency_symbol",
                "raw"
              ],
              "description": "A normalized Tapfiliate program."
            },
            "description": "The programs returned by Tapfiliate."
          },
          "pagination": {
            "type": "object",
            "properties": {
              "current_page": {
                "type": "integer",
                "minimum": 1,
                "description": "The page requested for this list operation."
              },
              "next_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The next page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "previous_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The previous page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "first_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The first page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "last_page": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1,
                    "description": "The last page number when Tapfiliate provides one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "link_header": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "The raw Tapfiliate Link header value when present."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "required": [
              "current_page",
              "next_page",
              "previous_page",
              "first_page",
              "last_page",
              "link_header"
            ],
            "description": "Pagination details parsed from Tapfiliate's Link header."
          }
        },
        "additionalProperties": false,
        "required": [
          "programs",
          "pagination"
        ],
        "description": "The Tapfiliate programs list response."
      }
    }
  ]
}
