{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "TCR - CSP Registry API",
    "description" : "<b>Confidentiality Notice:</b> <i>The information accessed through The Campaign Registry CSP API is intended for use by\nauthorized individuals only. Any unauthorized access or use of this information is prohibited. By using\nThe Campaign Registry CSP API, you agree to keep all information accessed confidential in accordance with the\n<a href=\"https://www.campaignregistry.com/TCR-T&Cs.pdf\">Terms of Use</a>.</i>\n<br><br>\n<i>Use of third party services indicates acceptance of the\n<a href=\"https://www.campaignregistry.com/TCR-Third%20Party%20Terms%20%26%20Conditions.pdf\">Third Party Terms & Conditions</a>.</i>\n<br><br>\nThe Campaign Service Provider (CSP) API is a REST-based interface that allows applications to interact with The\nCampaign Registry (TCR) platform. For information on getting started with the CSP API (as well as details on brand\nand campaign actions), see the <a href=\"https://www.campaignregistry.com/Assets/Introduction%20to%20the%20CSP%20API.pdf\">Introduction to the CSP API</a>.",
    "termsOfService" : "",
    "contact" : {
      "email" : "support@campaignregistry.com"
    },
    "version" : "1.0"
  },
  "servers" : [ {
    "url" : "/v2",
    "description" : "TCR - CSP Registry API"
  } ],
  "paths" : {
    "/enum/dca" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all DCAs in the TCR system",
        "description" : "Returns a list of all Direct Connect Aggregators (DCAs) that participate in the TCR ecosystem. Query parameters can filter this list to only show DCAs whose profiles contain specific attributes.",
        "operationId" : "getAllDcas",
        "parameters" : [ {
          "name" : "soleProprietorEnabled",
          "in" : "query",
          "description" : "Indicates whether the Sole Proprietor feature is enabled on the DCA account profile.",
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "cnpMigrationSupported",
          "in" : "query",
          "description" : "Indicates whether the CNP Migration feature is enabled on the DCA account profile.",
          "schema" : {
            "type" : "boolean"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "example" : [ {
                      "id" : "DCA123",
                      "displayName" : "DCA123",
                      "escalateEmail" : null,
                      "dpaSigned" : false,
                      "soleProprietorEnabled" : false,
                      "dca2AutoAccept" : false
                    } ]
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/mno" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all MNOs in the TCR system",
        "description" : "Returns a list of all Mobile Network Operators (MNOs) that participate in the TCR ecosystem. Their network ID, display name, and bit mask index (used for integration with the netnumber Services Registry) are returned.",
        "operationId" : "getAllMnos",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/Mno"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/optionalAttributeNames" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all possible optionalAttributes values for a brand",
        "description" : "Returns a complete list of values that can appear in a brand’s <code>optionalAttributes</code> property. The <code>optionalAttributes</code>\nproperty is automatically populated by TCR based on the verification of a brand’s tax status, government affiliation,\nor other condition. For example, the attribute <code>taxExemptStatus</code> only appears on verified non-profit brands. The\n<code>governmentEntity</code> attribute is only assigned to brands who have been verified as a US-based organization that is\nclosely affiliated with federal, state, or local governments.<br><br>\nEach attribute name is identified by an <code>id</code>, <code>data type</code>, and <code>description</code>. The following data types are supported:\n<ul>\n<li>INTEGER</li>\n<li>DECIMAL</li>\n<li>STRING (Max length 512 characters)</li>\n<li>BOOLEAN</li>\n</ul>",
        "operationId" : "getAllOptionalAttributeNames",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "example" : {
                      "id" : "governmentEntity",
                      "dataType" : "BOOLEAN",
                      "description" : "Confirmation that the brand is a closely affiliated, generally by government ownership or control, with federal, state or local governments."
                    }
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/usecase" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all use case types",
        "description" : "Returns a list of all possible use case types in the TCR system. Use cases are grouped into two classifications: <code>STANDARD</code> and <code>SPECIAL</code>. Standard use cases are\ntypically available to a brand following a successful identity status verification. Special use cases may require additional brand vetting through a standard,\nenhanced, or political vet and/or MNO review.<br><br>\nA brand may not qualify for all standard use cases. CSPs may require additional vetting before a brand is allowed to access all standard use cases.<br><br>\nSome use cases require an additional declaration of a sub-use case. If the listed use case's <code>minSubUsecase</code> attribute is greater than 0, then an additional\nsub-use case declaration is required during campaign submission. The number of sub-use cases submitted with a campaign must fall between the <code>minSubUsecase</code>\nand <code>maxSubUsecase</code> values.<br><br>\nQuery parameters can filter this list to only show use cases with a valid sub-use case.\n",
        "operationId" : "getAllUsecases",
        "parameters" : [ {
          "name" : "validSubUsecase",
          "in" : "query",
          "description" : "Filters the results to either include or exclude use cases that allow sub-use cases. Leave empty to return all use cases.",
          "schema" : {
            "type" : "boolean"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string",
                  "example" : {
                    "2FA" : {
                      "classification" : "STANDARD",
                      "description" : "Two-Factor authentication, one-time use password, password reset",
                      "displayName" : "2FA",
                      "maxSubUsecases" : 0,
                      "minSubUsecases" : 0,
                      "validSubUsecase" : true
                    },
                    "ACCOUNT_NOTIFICATION" : {
                      "classification" : "STANDARD",
                      "description" : "All reminders, alerts, and notifications.  (Examples include:  flight delayed, hotel booked, appointment reminders.)",
                      "displayName" : "Account Notification",
                      "maxSubUsecases" : 0,
                      "minSubUsecases" : 0,
                      "validSubUsecase" : true
                    }
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/vertical" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all vertical types defined in the TCR system",
        "description" : "Returns a list of all possible verticals, or business segments, that can be assigned to a brand during registration.",
        "operationId" : "getAllVerticals",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string",
                  "example" : {
                    "PROFESSIONAL" : {
                      "industryId" : "professional-services",
                      "displayName" : "Professional Services",
                      "description" : "Professional services."
                    },
                    "REAL_ESTATE" : {
                      "industryId" : "real-estate",
                      "displayName" : "Real Estate",
                      "description" : "Buying and Selling of residential and commercial properties."
                    }
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/altBusinessIdType" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all alternative business ID types",
        "description" : "Returns a list of all alternative business identifier types available for brand registration such as DUNS, GIIN, or LEI. Alternative business identifiers help to further verify a brand’s identity.",
        "operationId" : "getAltBusinessIdType",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "NONE", "DUNS", "GIIN", "LEI" ]
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/brandIdentityStatus" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all brand identity statuses",
        "description" : "Returns a list of all possible identity statuses for a brand. The identity status of a brand indicates\nwhether its information has been verified by TCR or an external vetting partner. Options include:\n<ul>\n<li><b>SELF_DECLARED</b>: Indicates that the brand’s identity is self-reported and not verified by\nTCR or any external vetting partner. This status is typically reserved for sole proprietorships.</li>\n<li><b>UNVERIFIED</b>: Indicates that the brand’s identity information has not been verified. This\ncould be the result of incorrect or incomplete information submitted during brand registration or if the brand changed its information after initial registration. Brands with an UNVERIFIED identity status cannot create new campaigns and must undergo the verification process again, either by resubmitting their information or requesting a standard, enhanced, or political vet from an external partner.</li>\n<li><b>VERIFIED</b>: Indicates that the brand’s identity information has been verified.</li>\n<li><b>VETTED_VERIFIED</b>: Indicates that the brand’s identity has been successfully verified by a\nthird-party vetting provider. A brand can acquire this status by either applying for a standard or\nenhanced vet or by importing a third-party vetting token. Having a VETTED_VERIFIED status may grant a\nbrand access to additional campaign use cases and/or better terms on some MNO networks.</li>\n</ul>\n",
        "operationId" : "getBrandIdentityStatus",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "SELF_DECLARED", "UNVERIFIED", "VERIFIED", "VETTED_VERIFIED" ]
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/brandRelationship" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all brand relationship types",
        "description" : "Returns a list of all possible relationship types a brand may have with a CSP. Specified during brand registration.\nThese types include:\n<ul>\n<li><b>BASIC_ACCOUNT</b>: Organization with no previous business history with the CSP.</li>\n<li><b>SMALL_ACCOUNT</b>: Organization with some business history with the CSP.</li>\n<li><b>MEDIUM_ACCOUNT</b>: Organization with a solid business history with the CSP and who is in good standing.</li>\n<li><b>LARGE_ACCOUNT</b>: Organization with a dedicated account manager with the CSP and who is highly trusted.</li>\n<li><b>KEY_ACCOUNT</b>: Organization with a dedicated account team with the CSP and who is of strategic value.</li>\n</ul>",
        "operationId" : "getBrandRelationship",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "BASIC_ACCOUNT", "SMALL_ACCOUNT", "MEDIUM_ACCOUNT", "LARGE_ACCOUNT", "KEY_ACCOUNT" ]
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/campaignStatus" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all campaign status types",
        "description" : "Returns a list of all possible status types for a campaign. These include:\n<ul>\n<li><b>ACTIVE</b>: The campaign has been created and may be running.</li>\n<li><b>EXPIRED</b>: The campaign has run its course and is expired.</li>\n</ul>",
        "operationId" : "getCampaignStatusType",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "ACTIVE", "EXPIRED" ]
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/entityType" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all entity types",
        "description" : "Returns a list of all possible business entity types for brands in the TCR system. Specified during brand registration.\nSpecific entity types grant access to different use cases. For example, NON-PROFIT entities are granted access to the\nPolitical use case. Possible types include:\n<ul>\n<li><b>PRIVATE_PROFIT</b>: A private, for-profit company.</li>\n<li><b>PUBLIC_PROFIT</b>: A publicly traded, for-profit company.</li>\n<li><b>NON_PROFIT</b>: A non-profit organization.</li>\n<li><b>GOVERNMENT</b>: A US-based organization that is closely aligned with a local, state, or government entity.</li>\n<li><b>SOLE_PROPRIETOR</b>: An unincorporated business with one owner.</li>\n</ul>",
        "operationId" : "getEntityType",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "PRIVATE_PROFIT", "PUBLIC_PROFIT", "NON_PROFIT", "GOVERNMENT", "SOLE_PROPRIETOR" ]
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/extVettingProvider" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all external vetting partners",
        "description" : "Returns a list of all external vetting partners that participate in the TCR ecosystem. Results include the vetting partner’s name and the types of brand vetting it provides. In some scenarios, submitting a brand for external vetting will provide access to more use cases or possibly better throughput terms with some MNOs.",
        "operationId" : "getVettingProviders",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "example" : {
                      "evpId" : "AEGIS",
                      "displayName" : "Aegis Mobile",
                      "tcrBillable" : true,
                      "vettingClasses" : [ "STANDARD", "POLITICAL", "ENHANCED" ],
                      "vettingInstruction" : "{\r\n  \"importVet\" : {\r\n    \"supported\" : true,\r\n    \"parameters\" : {\r\n      \"vettingId\" : {\r\n        \"label\" : \"Vetting ID\",\r\n        \"show\" : true\r\n      },\r\n      \"vettingToken\" : {\r\n        \"label\" : \"Vetting Token\",\r\n        \"show\" : false\r\n      }\r\n    },\r\n    \"info\" : \"Vetting partner Aegis\"\r\n  },\r\n  \"newVet\" : {\r\n    \"supported\" : true,\r\n    \"price\" : {\r\n      \"STANDARD\" : 40\r\n    },\r\n    \"waitTime\" : \"30 seconds\",\r\n    \"info\" : \"Vetting partner Aegis\"\r\n  }\r\n}"
                    }
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/vettingStatus" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all vetting status types",
        "description" : "Returns a list of all possible vetting status types for a brand that has been submitted for external vetting. Possible types include:\n<ul>\n<li><b>PENDING</b>: A temporary status that indicates the vetting request has not yet been reviewed by the vetting partner.</li>\n<li><b>UNSCORE</b>: A temporary status that indicates the vetting request is currently under review by the vetting provider.</li>\n<li><b>ACTIVE</b>: Indicates that the vetting request has been successfully processed.</li>\n<li><b>FAILED</b>: Indicates that the vetting provider could not process the vetting request. This could be due to incorrect\ninformation submitted about the brand which leads to the vetting provider unable to verify it.</li>\n<li><b>EXPIRED</b>: Indicates that the vet performed by the vetting provider has expired. This could be due to an expired\nvetting date or if a brand’s information is changed after the vet is complete. If this happens, the brand will need to reapply\nfor external vetting. Expired vets can prevent a brand from accessing particular use cases or special throughput terms with some\nMNOs. While political campaigns are deactivated following an expired political vet, other existing active campaigns are not\naffected by expired standard or enhanced vets.</li>\n</ul>",
        "operationId" : "getVettingStatusTypes",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "PENDING", "UNSCORE", "ACTIVE", "FAILED", "EXPIRED" ]
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/usState" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all US states and territories",
        "description" : "Returns a list of all US states and territories defined in the TCR ecosystem. Some territories, such as American Samoa, are specified as states.",
        "operationId" : "listAllUsStates",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string",
                  "example" : {
                    "DE" : "Delaware",
                    "HI" : "Hawaii"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.<ul><li>590: TCR internal system error. Please contact TCR support at <a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.</li></ul>"
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/assetAppealCategory" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all brand asset appeal categories",
        "description" : "Returns a list of all appeal categories available for brand assets.",
        "operationId" : "listAssetAppealCategories",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "example" : {
                      "id" : "VERIFY_ASSET_SPEC",
                      "displayName" : "Verify Asset Specification",
                      "description" : "Use this reason if the asset is being appealed for failure to meet file specifications, including format and size."
                    }
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.<ul><li>590: TCR internal system error. Please contact TCR support at <a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.</li></ul>"
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/brandAppealCategory" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all brand appeal categories",
        "description" : "Returns a list of all possible brand appeal categories. Specified as part of the brand appeal process,\nwhich is performed if the brand gets an UNVERIFIED identity status or is missing an optional attribute\nassociated with their entity type. For example, a brand could perform a brand appeal if it registered as a\nGOVERNMENT entity but is missing the Government Entity flag in their brand details. A brand appeal\nresubmits the brand for identity verification and should include additional documentation that validates\ntheir claimed entity status.",
        "operationId" : "listBrandAppealCategory",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "example" : {
                      "id" : "VERIFY_TAX_ID",
                      "displayName" : "Verify tax ID",
                      "description" : "Select this category if the record is UNVERIFIED due to an inability to match the tax ID."
                    }
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.<ul><li>590: TCR internal system error. Please contact TCR support at <a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.</li></ul>"
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/brandStatus" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all brand statuses",
        "description" : "Returns a list of all possible statuses for a brand in the TCR system. A brand’s status\nis separate from its identity status or ability to register campaigns. Following\nregistration, a brand is classified as ACTIVE, even if its identity status has not been\nverified. Options include:\n<ul>\n<li><b>ACTIVE</b>: The brand has completed registration and is considered active in the TCR system.</li>\n<li><b>DELETED</b>: The brand was removed from the TCR system.</li>\n</ul>",
        "operationId" : "listBrandStatus",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "ACTIVE", "DELETED" ]
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/country" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all countries",
        "description" : "Returns a list of all countries defined in the TCR system and their corresponding country codes.",
        "operationId" : "listCountries",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string",
                  "example" : {
                    "PR" : "Puerto Rico",
                    "PT" : "Portugal"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.<ul><li>590: TCR internal system error. Please contact TCR support at <a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.</li></ul>"
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/error" : {
      "get" : {
        "tags" : [ "Error Code" ],
        "summary" : "List all error codes",
        "description" : "Returns a list of all error codes that are defined in the TCR system. Error codes contain a short description to help with troubleshooting.<br><br>Returns a map data structure in key-value pairs in an error code ==> description format.",
        "operationId" : "listErrorCodes",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string",
                  "example" : {
                    "202" : "User not authenticated",
                    "205" : "Unauthorized operation"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/extVettingAppealCategory" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all external vetting appeal categories",
        "description" : "Returns a list of all appeal categories for external vets (i.e., standard, enhanced, and political).",
        "operationId" : "listExternalVettingAppealCategory",
        "parameters" : [ {
          "name" : "evpId",
          "in" : "query",
          "description" : "The external vetting partner ID.",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "example" : {
                      "id" : "VERIFY_TAX_ID",
                      "displayName" : "Verify tax ID",
                      "description" : "Select this category if the record is FAILED due to an inability to match the tax ID."
                    }
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.<ul><li>590: TCR internal system error. Please contact TCR support at <a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.</li></ul>"
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/operationStatus" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all possible MNO campaign operation statuses",
        "description" : "Returns a list of all valid MNO campaign operation statuses.\n<ul>\n<li><b>REVIEW</b>: Campaign is in the process of being reviewed by the MNO.</li>\n<li><b>REJECTED</b>: Campaign has been rejected by the MNO. Feedback is provided when the campaign has been rejected.</li>\n<li><b>REGISTERED</b>: The campaign has been reviewed and is currently active on the MNO’s network. </li>\n<li><b>SUSPENDED</b>: The campaign has been suspended by the MNO due to a submitted complaint or violation of MNO policies. Feedback is provided when a campaign has been suspended.</li>\n</ul>",
        "operationId" : "listMnoOperationStatus",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "REGISTERED", "REVIEW", "REJECTED", "SUSPENDED" ]
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/nudgeIntent" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "Get campaign nudge intent types",
        "description" : "Returns a list of all nudge intent types in the TCR system. When performing a nudge on a\ncampaign to an upstream CNP, an intent must be submitted along with the action. Nudge intents include:\n<ul>\n<li><b>APPEAL_REJECTION</b>: This informs the upstream CNP that you are appealing a rejection of a campaign.</li>\n<li><b>REVIEW</b>: This requests the upstream CNP to review a campaign that has not yet been accepted.</li>\n</ul>",
        "operationId" : "listNudgeIntent",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "APPEAL_REJECTION", "REVIEW" ]
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.<ul><li>590: TCR internal system error. Please contact TCR support at <a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.</li></ul>"
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/approvedPublicCompany" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all public companies that can be used as a brand in TCR",
        "description" : "Returns a list of companies that can be used for PUBLIC_PROFIT entities during brand\nregistration. If a company isn’t listed, please submit a support ticket for review to\n<a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.<br><br>\nSubmitting this request without any parameters will return a list of all public companies in the TCR system.\n",
        "operationId" : "listPublicCompany",
        "parameters" : [ {
          "name" : "displayName",
          "in" : "query",
          "description" : "The display name of the company.",
          "schema" : {
            "maxLength" : 100,
            "minLength" : 0,
            "type" : "string"
          }
        }, {
          "name" : "symbol",
          "in" : "query",
          "description" : "The public company's symbol on the exchange",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "exchange",
          "in" : "query",
          "description" : "Example: NASDAQ, NYSE.",
          "schema" : {
            "type" : "string",
            "enum" : [ "NONE", "NASDAQ", "NYSE", "AMEX", "AMX", "ASX", "B3", "BME", "BSE", "BZX", "FRA", "ICEX", "JPX", "JSE", "KRX", "LON", "NSE", "NNQS", "OMX", "SEHK", "SGX", "SSE", "STO", "SWX", "SZSE", "TSX", "TWSE", "VSE", "XPAR", "XAMS", "XMIL", "XCSE", "XBRU", "XMAD", "XOSL", "XWAR", "XETR", "XSTU", "XBER", "XMUN", "XHAM", "XHAN", "XDUS", "XEUR", "OTHER" ]
          }
        }, {
          "name" : "country",
          "in" : "query",
          "description" : "Example: US. The country code of the desired country.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string",
                  "example" : {
                    "records" : [ {
                      "symbol" : "FLWS",
                      "exchange" : "NASDAQ",
                      "iso2" : "US",
                      "isin" : "US68243Q1067",
                      "displayName" : "1-800 FLOWERS.COM, Inc."
                    } ],
                    "page" : 1,
                    "totalRecords" : 1
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/rejectionCategory" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all campaign sharing rejection categories",
        "description" : "<p>Returns a list of all rejection categories for use when rejecting a campaign in the CSP and DCA APIs.</p>\nPossible categories include:\n<ul>\n<li>BRAND_INCONSISTENCIES: Brands must provide accurate details, according to those required fields for that Brand type. Brand and campaign details must be consistent.</li>\n<li>CALL_TO_ACTION: The CTA must ensure consumers understand how to opt-in and consent to receive messages, and it must clearly display program name, message frequency, potential charges, STOP keyword, and links to terms and privacy policies.</li>\n<li>CAMPAIGN_DESCRIPTION_OR_ATTRIBUTES: Campaign descriptions and attributes must align with the declared use case. Clear and concise description of the intended purpose of the campaign for the end user.</li>\n<li>DISALLOWED_CONTENT: Content related to gambling, drugs, hate speech, illegal activities, or high-risk services is strictly prohibited in campaigns.</li>\n<li>MANDATORY_MESSAGE_TERMINOLOGY: Mandatory message terminology includes opt-in confirmation, opt-out confirmation, help response, and required disclosures.</li>\n<li>PRIVACY_POLICY: A clear privacy policy must be provided to the consumer, explaining how personal data is collected and used. No third-party sharing for marketing purposes is allowed. The privacy policy should match the brand information.</li>\n<li>SAMPLE_MESSAGE: Sample messages must align with the declared use case and must not include disallowed content or public URL shorteners.</li>\n<li>TERMS_AND_CONDITIONS: Clear terms and conditions must be included outlining message frequency, message campaign description, fees, opt-in/out instructions, customer care contact info and a reference to the privacy policy. T&C's must also be consistent with the brand information.</li>\n<li>OTHER: For use when a campaign is rejected for reasons that do not fit within the other rejection categories.</li>\n</ul>",
        "operationId" : "listRejectionCategory",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "BRAND_INCONSISTENCIES", "CALL_TO_ACTION", "CAMPAIGN_DESCRIPTION_OR_ATTRIBUTES", "DISALLOWED_CONTENT", "MANDATORY_MESSAGE_TERMINOLOGY", "PRIVACY_POLICY", "SAMPLE_MESSAGE", "TERMS_AND_CONDITIONS", "OTHER" ]
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.<ul><li>590: TCR internal system error. Please contact TCR support at <a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.</li></ul>"
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/stockExchange" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all stock exchanges defined in TCR",
        "description" : "Returns a list of all stock exchanges defined in the TCR system.",
        "operationId" : "listStockExchanges",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "NONE", "NASDAQ", "NYSE", "AMEX", "AMX", "ASX", "B3", "BME", "BSE", "FRA", "ICEX", "JPX", "JSE", "KRX", "LON", "NSE", "OMX", "SEHK", "SSE", "STO", "SWX", "SZSE", "TSX", "TWSE", "VSE" ]
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/suspensionCategory" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all MNO brand suspension rule categories",
        "description" : "Returns a list of all brand suspension rule categories that explain why a brand was suspended. Possible categories include:\n<ul>\n<li><b>AFFILIATE_MARKETING</b>: Messages appear to share opt-ins to affiliate companies.</li>\n<li><b>CAMPAIGN_TO_TRAFFIC_MISMATCH</b>: In-market traffic does not match with the registered campaign.</li>\n<li><b>CONTROLLED_SUBSTANCE</b>: Messages appear to pertain to controlled substances.</li>\n<li><b>EXCESSIVE_COMPLAINTS</b>: Unacceptable volumes of consumer complaints.</li>\n<li><b>FRAUDULENT_MESSAGES</b>: Messages appear related to counterfeit/fraudulent goods or activities.</li>\n<li><b>ILLEGAL_SWEEPSTAKES</b>: Messages appear related to sweepstakes that do not follow required laws.</li>\n<li><b>ILLICIT_CONTENT</b>: Messages appear related to illegal activity.</li>\n<li><b>LACK_OF_AGE_GATE</b>: No age gate mechanism in place for messaging campaigns that require it.</li>\n<li><b>PHISHING_MESSAGES</b>: Messages appear designed to gain access to information through deceptive means.</li>\n<li><b>PROMOTIONAL_GAMBLING</b>: Messages appear related to the act of gambling or promoting gambling.</li>\n<li><b>SPAM</b>: Any kind of unwanted or unsolicited messaging.</li>\n<li><b>OTHER</b>: A free-form text field that will include feedback that doesn’t fall into one of the other categories.</li>\n</ul>",
        "operationId" : "listSuspensionCategory",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "CAMPAIGN_TO_TRAFFIC_MISMATCH", "SPAM" ]
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/vettingClass" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all vetting classes",
        "description" : "When requesting an external brand vet, CSPs must specify a vetting class such as POLITICAL or ENHANCED. This class determines the scope and purpose of the vetting, which can unlock better carrier terms or access to additional use cases.",
        "operationId" : "listVettingClass",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "example" : {
                      "id" : "POLITICAL",
                      "enabled" : true,
                      "displayName" : "Political",
                      "description" : "Required for federal level political campaign.",
                      "validityMonths" : 1200
                    }
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/vettingFeedbackCode" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List all vetting feedback codes",
        "description" : "Returns a list of all possible vetting feedback codes that can result from a failed identity\nvet. The codes contain a message attribute that provides a short description on the cause of\nthe failed vet.",
        "operationId" : "listVettingFeedbackCodes",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "example" : [ {
                      "code" : "TFGE01",
                      "message" : "The submitted company is not a US entity. Only US entities qualify for the Government Entity Type."
                    } ]
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.<ul><li>590: TCR internal system error. Please contact TCR support at <a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.</li></ul>"
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/version" : {
      "get" : {
        "tags" : [ "Platform" ],
        "summary" : "Return the version of the API",
        "description" : "Returns the currently running version of the API.",
        "operationId" : "getVersion",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "text/plain" : {
                "schema" : {
                  "type" : "string",
                  "example" : "5.23.0"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/webhook/eventCategory" : {
      "get" : {
        "tags" : [ "Webhook" ],
        "summary" : "Gets a list of all event categories",
        "description" : "All TCR notification events are associated with a category (e.g., CAMPAIGN). By subscribing to a webhook event category on an endpoint, you will automatically receive all notifications that are associated with that category.",
        "operationId" : "listEventCategories",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "enum" : [ "VETTING", "INCIDENCE", "CSP", "BRAND", "CAMPAIGN", "SUSPENSION_RULE" ]
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/webhook/eventType" : {
      "get" : {
        "tags" : [ "Webhook" ],
        "summary" : "Get a list of all event types",
        "description" : "Returns a list of all possible event types, including a short description and the category associated with the event.",
        "operationId" : "listEventTypes",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "object",
                    "example" : {
                      "eventType" : "CAMPAIGN_NUDGE",
                      "description" : "Nudge a party in the connectivity chain",
                      "eventCategory" : "CAMPAIGN"
                    }
                  }
                }
              }
            }
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/webhook/subscription" : {
      "get" : {
        "tags" : [ "Webhook" ],
        "summary" : "List all webhook subscriptions",
        "description" : "Returns a list of all registered webhook subscriptions.",
        "operationId" : "listWebhook",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string",
                    "example" : {
                      "eventCategory" : "BRAND",
                      "webhookEndpoint" : "http://test2.com"
                    }
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Webhook" ],
        "summary" : "Subscribe to event notifications",
        "description" : "Subscribe to an API webhook to receive event notifications sent to the DCA. You must specify an event category in the request body along with the endpoint that will receive the events. All events associated with that category will be delivered to the endpoint. Only one category is allowed per request. \n<br/> <b>Note:</b> Make sure your network policy allows HTTP POST methods to be received from TCR.",
        "operationId" : "subscribeWebhook",
        "requestBody" : {
          "description" : "Refer to the schema for details on the webhookSubscription object.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/WebhookSubscription"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WebhookSubscription"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.<ul><li>590: TCR internal system error. Please contact TCR support at <a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.</li></ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/webhook/subscription/eventType/{eventType}/mock" : {
      "get" : {
        "tags" : [ "Webhook" ],
        "summary" : "Send a mock webhook to your endpoint",
        "description" : "Sends a mock webhook event to a specified subscriber endpoint. Before using this endpoint, you must first subscribe to events from an event category using the PUT /webhook/subscription operation.<br/> <b>Note: </b> Make sure your network policy allows HTTP POST methods to be received from TCR.",
        "operationId" : "testWebhook",
        "parameters" : [ {
          "name" : "eventType",
          "in" : "path",
          "description" : "Enter the specific webhook eventType to send to the endpoint (e.g., CAMPAIGN_SHARE_ADD).",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "object",
                  "example" : {
                    "endpoint" : "https://your.server.com/webhooklistener",
                    "status" : 200,
                    "request" : "{\"campaignId\":\"C123ABC\",\"eventType\":\"CAMPAIGN_SHARE_ADD\"}",
                    "response" : "OK"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.<ul><li>590: TCR internal system error. Please contact TCR support at <a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.</li></ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/webhook/subscription/{eventCategory}" : {
      "delete" : {
        "tags" : [ "Webhook" ],
        "summary" : "Unsubscribe from event notifications",
        "description" : "Removes a previous subscription to event notifications. You must specify an event category as a parameter. All events associated with that category will no longer be sent to the subscription endpoint. Only one event category can be unsubscribed per request.",
        "operationId" : "unsubscribeWebhook",
        "parameters" : [ {
          "name" : "eventCategory",
          "in" : "path",
          "required" : true,
          "schema" : {
            "type" : "string",
            "enum" : [ "API_ACCOUNT", "BRAND", "CSP", "CAMPAIGN", "SENDER_ID", "INCIDENCE", "DCA", "CONNECTION", "TRAFFIC", "ROUTING", "VETTING", "RESELLER", "ISSUE", "SUSPENSION_RULE", "VENDOR", "TRADEMARK", "LOA", "OTHER" ]
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.<ul><li>590: TCR internal system error. Please contact TCR support at <a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.</li></ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/asset/{name}/appeal" : {
      "get" : {
        "tags" : [ "Brand Asset" ],
        "summary" : "List verification appeals associated with a brand asset",
        "description" : "Returns a list of all verification appeals associated with a brand ID and brand asset name. Results can be limited by submitting an optional appeal status.",
        "operationId" : "listBrandAssetAppeal",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "name",
          "in" : "path",
          "description" : "Display name of the brand asset.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "appealStatus",
          "in" : "query",
          "description" : "Optional appeal status filter",
          "schema" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "enum" : [ "PENDING", "COMPLETE" ]
            }
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Successful.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/BrandAssetAppeal"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Please use the below error codes table to identify the cause of error.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand asset record not found.</li>\n<li>590: TCR internal system error.</li>\n</ul>\n",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Brand Asset" ],
        "summary" : "Appeal a brand asset verification",
        "description" : "Allows the CSP to appeal brand assets that are in an UNVERIFIED status and have been registered within the last 45 days. One or more appealCategories must also be submitted.",
        "operationId" : "appealBrandAsset",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "name",
          "in" : "path",
          "description" : "The name of the asset to appeal.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Refer to the schema for details on fields associated with the appeal.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/BrandAssetAppealRequest_CSP"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand or Brand Asset not found.</li>\n<li>559: Appeal request declined due to one or more invalid appeal categories.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>592: Operation declined.</li>\n<li>620: The external vetting partner is unable to accept requests at this time. Please wait 30 seconds and try again.</li>\n        </ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/externalVetting/appeal" : {
      "get" : {
        "tags" : [ "Brand" ],
        "summary" : "List external vetting appeals associated with a brand.",
        "description" : "Returns a list of all external vetting appeals associated with a brand ID. You can limit the results by vetting partner, vetting id, and status. If no appeals exist for a brand, then no results will be returned.",
        "operationId" : "listBrandExternalVettingAppeal",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "evpId",
          "in" : "query",
          "description" : "The unique ID of the external vetting partner.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "vettingId",
          "in" : "query",
          "description" : "The ID associated with a previously submitted vet.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "appealStatus",
          "in" : "query",
          "description" : "The status of the appeal submitted for the brand.",
          "schema" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "enum" : [ "PENDING", "COMPLETE" ]
            }
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalVettingAppeal"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Brand" ],
        "summary" : "Appeal an external vet (e.g., standard, RCS and authplus)",
        "description" : "Allows a CSP to appeal a previously submitted external vet. This is used if the external vet did not return\na  brand <code>optionalAttribute</code> that grants access to additional use cases. It can also be used to\nappeal an external vet if the brand feels the outcome was incorrect, which can lead to lower throughput\nterms with network carriers. Attachments should be added to include documentation that justifies the\nappeal. For detailed information, please refer to\n<a href=\"https://www.campaignregistry.com/Assets/Brand%20Vetting%20Appeals%20Overview.pdf\">Brand Vetting Appeals</a>.",
        "operationId" : "appealExternalVet",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Refer to the schema for details on fields associated with the appeal.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExternalVettingAppealRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n        <ul>\n        <li>501: Invalid input parameter.</li>\n        <li>502: Brand or vetting record not found.</li>\n        <li>559: Appeal request declined due to one or more invalid appeal categories.</li>\n        <li>590: TCR internal system error. Please contact TCR support.</li>\n        <li>592: Operation declined. The external vetting partner is unable to process the request due to bad data.</li>\n        <li>620: The external vetting partner is unable to accept requests at this time. Please wait 30 seconds and try again.</li>\n        </ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/appeal" : {
      "get" : {
        "tags" : [ "Brand" ],
        "summary" : "List identity status appeals associated with a brand.",
        "description" : "Returns a list of all identity status appeals associated with a brand ID. Results can be limited by appeal status.",
        "operationId" : "listBrandAppeal",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "appealStatus",
          "in" : "query",
          "description" : "Example: PENDING. The status associated with the appeal.",
          "schema" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "enum" : [ "PENDING", "COMPLETE" ]
            }
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/BrandAppeal"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Brand" ],
        "summary" : "Appeal a brand’s identity status",
        "description" : "Allows a CSP to appeal the results of a brand’s identity status. This is used if the basic identity check\nwas unsuccessful or did not properly return a necessary brand <code>optionalAttribute</code> that grants\naccess to additional use cases. Attachments should be added to include documentation that justifies the\nappeal. For detailed information, please refer to\n<a href = \"https://www.campaignregistry.com/Assets/Brand%20Vetting%20Appeals%20Overview.pdf\">Brand Vetting Appeals</a>.",
        "operationId" : "appealBrand",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Refer to the schema for details on fields associated with the appeal.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/BrandAppealRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand or identity vet not found.</li>\n<li>559: Appeal request declined due to one or more invalid appeal categories.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>592: Operation declined. Appeal requested on old brand information. Brand information has been updated since this request.</li>\n<li>620: The external vetting partner is unable to accept requests at this time. Please wait 30 seconds and try again.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/nonBlocking" : {
      "post" : {
        "tags" : [ "Brand" ],
        "summary" : "Register a new brand",
        "description" : "Registers a new brand under a CSP account. Required fields vary depending on the type of entity being\nregistered. See the table below for details.\n<b>Additional notes:</b>\n<ul>\n<li><b>For foreign government entities</b>: The <code>entityType</code> property should be specified as\n<code>PRIVATE_PROFIT</code>. Only US-based organizations can use the <code>GOVERNMENT</code> entity type.</li>\n<li><b>For Public Profit brands</b>: <code>PUBLIC_PROFIT</code> brands are required to enter a\n<code>businessContactEmail</code> which is subject to validation. Common email distribution addresses\n(such as sales@company.com) are not allowed, nor are personal or free email addresses. Following\nregistration, the brand will undergo Authentication+ validation which requires the business contact to\ncomplete a 2FA process before being eligible for campaign registration.</li>\n<li><b>For Sole Proprietor brands</b>: New <code>SOLE_PROPRIETOR</code> brand registration must comply with\nTCR’s stricter SP 2.0 field validations on the following fields: <code>street</code>, <code>city</code>,\n<code>state</code>, <code>postalCode</code>, <code>country</code>, <code>email</code>, <code>phone</code>,\n<code>mobilePhone</code>, <code>firstName</code>, <code>lastName</code> and <code>displayName</code> fields.\nSP 2.0 policy mandates that all sole proprietor brands must pass an SMS one-time-password (OTP) verification\nbefore being eligible for campaign registration.</li>\n<li><b>Mock EIN testing</b>: To test brand registration with mock EINs in a CSP non-production environment\nsuch as Staging, please refer to the <a href=\"https://www.campaignregistry.com/CSP-Non-production-Integration-Testing.pdf\">CSP Non-Production Integration Testing</a> document.</li>\n</ul>\n<table border=\"1\">\n<thead>\n    <tr>\n        <th>Property Name</th>\n        <th>Description</th>\n        <th>Entity Requirements</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>displayName</td>\n        <td>Brand/Marketing/DBA name of the business.\n            Max length: 255</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Required</li>\n                <li>PRIVATE PROFIT: Required</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Required</li>\n                <li>GOVERNMENT: Required</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>companyName</td>\n        <td>The legal name of the business.\n            Max length: 255</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: N/A</li>\n                <li>PRIVATE PROFIT: Required</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Required</li>\n                <li>GOVERNMENT: Required</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>ein</td>\n        <td>Tax ID of the business.\n            Max length: 21</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: N/A</li>\n                <li>PRIVATE PROFIT: Required</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Required</li>\n                <li>GOVERNMENT: Required</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>einIssuingCountry</td>\n        <td>Two-letter ISO-2 country code of Tax ID issuing country. \n            Examples: US, CA.\n            Defaults to US. Length: 2</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: N/A</li>\n                <li>PRIVATE PROFIT: Optional</li>\n                <li>PUBLIC_PROFIT: Optional</li>\n                <li>NON_PROFIT: Optional</li>\n                <li>GOVERNMENT: Optional</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>altBusinessId</td>\n        <td>Alternative Business Identifier. A valid identifier that corresponds to the altBusinessIdType.\n            Max length: 50</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Optional</li>\n                <li>PRIVATE PROFIT: Optional</li>\n                <li>PUBLIC_PROFIT: Optional</li>\n                <li>NON_PROFIT: Optional</li>\n                <li>GOVERNMENT: Optional</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>altBusinessIdType</td>\n        <td>Alternative Business Identifier Type.\n            Examples: DUNS, LEI, GIIN.\n            Enumerated values</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Optional</li>\n                <li>PRIVATE PROFIT: Optional</li>\n                <li>PUBLIC_PROFIT: Optional</li>\n                <li>NON_PROFIT: Optional</li>\n                <li>GOVERNMENT: Optional</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>firstName</td>\n        <td>First name of business contact.\n            Max length: 100</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Required</li>\n                <li>PRIVATE PROFIT: N/A</li>\n                <li>PUBLIC_PROFIT: N/A</li>\n                <li>NON_PROFIT: N/A</li>\n                <li>GOVERNMENT: N/A</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>lastName</td>\n        <td>Last name of business contact.\n            Max length: 100</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Required</li>\n                <li>PRIVATE PROFIT: N/A</li>\n                <li>PUBLIC_PROFIT: N/A</li>\n                <li>NON_PROFIT: N/A</li>\n                <li>GOVERNMENT: N/A</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>phone</td>\n        <td>Support contact telephone number in E.164 format.\n            Example:  +12023339999.\n            Max length: 20</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Required</li>\n                <li>PRIVATE PROFIT: Required</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Required</li>\n                <li>GOVERNMENT: Required</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>mobilePhone</td>\n        <td>Valid wireless telephone in E.164 format.\n            Example: +12023339999.\n            Max length: 20</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Required for OTP</li>\n                <li>PRIVATE PROFIT: N/A</li>\n                <li>PUBLIC_PROFIT: N/A</li>\n                <li>NON_PROFIT: N/A</li>\n                <li>GOVERNMENT: N/A</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>street</td>\n        <td>House number and street name.\n            Example: 1000 Sunset Hill Road.\n            Max length: 255</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Required</li>\n                <li>PRIVATE PROFIT: Required</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Required</li>\n                <li>GOVERNMENT: Required</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>city</td>\n        <td>City Name.\n            Max length: 100</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Required</li>\n                <li>PRIVATE PROFIT: Required</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Required</li>\n                <li>GOVERNMENT: Required</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>state</td>\n        <td>State or province. For addresses in the United States, please use the two-character state code.\n            Example: CA for California.\n            Max length 20</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Required</li>\n                <li>PRIVATE PROFIT: Required</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Required</li>\n                <li>GOVERNMENT: Required</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>postalCode</td>\n        <td>Zipcode or postal code. Example: 21012\n            Max length: 10</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Required</li>\n                <li>PRIVATE PROFIT: Required</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Required</li>\n                <li>GOVERNMENT: Required</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>country</td>\n        <td>Two-letter ISO-2 country code.\n            Examples: US, CA.\n            Length: 2</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Required</li>\n                <li>PRIVATE PROFIT: Required</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Required</li>\n                <li>GOVERNMENT: Required</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>email</td>\n        <td>Email address of support contact.\n            Max length: 100</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Required</li>\n                <li>PRIVATE PROFIT: Required</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Required</li>\n                <li>GOVERNMENT: Required</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>stockSymbol</td>\n        <td>Stock symbol of the PUBLIC_PROFIT brand.\n            Max length: 10</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: N/A</li>\n                <li>PRIVATE PROFIT: N/A</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: N/A</li>\n                <li>GOVERNMENT: N/A</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>stockExchange</td>\n        <td>The stock exchange where the PUBLIC_PROFIT brand is registered.\n            Enumerated values</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: N/A</li>\n                <li>PRIVATE PROFIT: N/A</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: N/A</li>\n                <li>GOVERNMENT: N/A</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>website</td>\n        <td>The website/online URL address of the brand.\n            Max length: 255</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Optional</li>\n                <li>PRIVATE PROFIT: Optional</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Optional</li>\n                <li>GOVERNMENT: Optional</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>brandRelationship</td>\n        <td>The brand relationship level to the CSP.\n            Enumerated values</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: N/A</li>\n                <li>PRIVATE PROFIT: Required</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Required</li>\n                <li>GOVERNMENT: Required</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>vertical</td>\n        <td>The industry segment where the brand operates.\n            Enumerated values</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Optional</li>\n                <li>PRIVATE PROFIT: Required</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Required</li>\n                <li>GOVERNMENT: Required</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>referenceId</td>\n        <td>A customer-unique identifier managed by the CSP that prevents duplicate brand registration in TCR. Case-insensitive, empty strings are ignored.\n            Max length: 50</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Required</li>\n                <li>PRIVATE PROFIT: Optional</li>\n                <li>PUBLIC_PROFIT: Optional</li>\n                <li>NON_PROFIT: Optional</li>\n                <li>GOVERNMENT: Optional</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>tag</td>\n        <td>Tags that can be set on the brand.\n            Please refer to the Searchable Keyword Tag heading.</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Optional</li>\n                <li>PRIVATE PROFIT: Optional</li>\n                <li>PUBLIC_PROFIT: Optional</li>\n                <li>NON_PROFIT: Optional</li>\n                <li>GOVERNMENT: Optional</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>mock</td>\n        <td>A boolean value that signifies a brand as a mock brand.  Mock brands do not incur a billable charge on campaign registrations.\n            Defaults to FALSE.</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: Optional</li>\n                <li>PRIVATE PROFIT: Optional</li>\n                <li>PUBLIC_PROFIT: Optional</li>\n                <li>NON_PROFIT: Optional</li>\n                <li>GOVERNMENT: Optional</li>\n            </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>businessContactEmail</td>\n        <td>Email of the business contact for the brand.\n            Max length: 255</td>\n        <td>\n            <ul>\n                <li>SOLE_PROPRIETOR: N/A</li>\n                <li>PRIVATE PROFIT: Optional</li>\n                <li>PUBLIC_PROFIT: Required</li>\n                <li>NON_PROFIT: Optional</li>\n                <li>GOVERNMENT: Optional</li>\n            </ul>\n        </td>\n    </tr>\n</tbody>\n</table>\n\n",
        "operationId" : "newBrandNonBlocking",
        "requestBody" : {
          "description" : "Refer to the schema for details on fields listed in the example.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/BrandRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Brand"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter. Most string parameters are subject to min and/or max length validations. Some parameters are subject to additional country-specific validation rules including ein, state, and postalCode. Please refer to the BrandRequest schema for more details.</li>\n<li>503: Duplicate record detected. If supplied, each registered brand must have a unique referenceId.</li>\n<li>512: Exceeded the maximum number of brands for your CSP account. Please contact TCR support to increase your brand quota.</li>\n<li>529: The brand's country is not allowed to be registered in TCR.</li>\n<li>534: Sole proprietor is not enabled on the CSP account.</li>\n<li>550: Duplicate threshold detected for brand record.</li>\n<li>551: Unsupported phone number or mobile phone number. For example, Sole Proprietor brands require a US or CA wireless phone number in the mobilePhone field.</li>\n<li>553: Unsupported email address. Disposable email addresses are not permitted.</li>\n<li>554: Invalid street address. The street, city, state, postalCode, and country fields must form a valid postal address.</li>\n<li>555: Unsupported street address. For example, Sole Proprietor brands require a valid US or CA street address.</li>\n<li>556: Obfuscation check failed on brand fields, including firstName, lastName and displayName for a Sole Proprietor brand.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>591: Temporary system error. Unable to complete brand registration. Please wait 30 seconds and try again.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/reseller" : {
      "get" : {
        "tags" : [ "Reseller" ],
        "summary" : "Search for a reseller",
        "description" : "Search for an existing reseller by an optional <code>companyName</code> parameter. Partial spelling is supported. Not including a <code>companyName</code> parameter will return a list of all resellers the CSP has created.",
        "operationId" : "listResellers",
        "parameters" : [ {
          "name" : "companyName",
          "in" : "query",
          "description" : "Business name or DBA of the reseller. Partial spelling is supported.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The page of the results to return.",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "description" : "Number of records to return per page.",
          "schema" : {
            "maximum" : 500,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ResellerRecordSet"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>\n",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Reseller" ],
        "summary" : "Create a new reseller",
        "description" : "Creates a new reseller account that can optionally be used when registering campaigns. A reseller is a businesses (typically another messaging platform) that sits between the brand and the CSP.\n<br>The request body must include the <code>companyName</code>, <code>phone</code>, and <code>email</code> properties.",
        "operationId" : "newReseller",
        "requestBody" : {
          "description" : "Reseller to be created",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/Reseller"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Reseller"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>503: Duplicate reseller found. The <code>companyName</code> for a reseller must be unique.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "Retrieve an existing campaign record",
        "description" : "Get an existing campaign record from TCR by specifying the campaign’s unique identifier. In the response, if the resellerId property of a campaign is set to R000000, this indicates No Reseller.",
        "operationId" : "getCampaign",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Campaign_CSP_EX"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP_EX"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Campaign" ],
        "summary" : "Update a campaign’s properties",
        "description" : "Modifies properties associated with a specific campaign ID. Not all fields can be updated. Refer to the table below for more information.\n<table border=\"1\">\n<thead>\n\t<tr>\n\t\t<th>Property</th>\n\t\t<th>Description</th>\n\t\t<th>Updated</th>\n\t</tr>\n</thead>\n<tbody>\n\t<tr>\n\t\t<td>brandId</td>\n\t\t<td>The unique ID assigned to the brand.</td>\n\t\t<td>No</td>\n\t</tr>\n\t<tr>\n\t\t<td>usecase</td>\n\t\t<td>The campaign’s intended use (e.g., 2FA, Customer Care, Marketing).</td>\n\t\t<td>No</td>\n\t</tr>\n\t<tr>\n\t    <td>subUsecases</td>\n\t\t<td>Some use cases allow CSPs to specify an additional sub-use case. Sub-use cases help MNOs determine the purpose of a campaign.</td>\n\t\t<td>No</td>\n\t</tr>\n\t<tr>\n\t\t<td>resellerId</td>\n\t\t<td>The unique ID assigned to a reseller. Used to indicate if an additional party sits between the brand and the CSP. If a resellerId is entered, it can only be changed to R000000 to indicate No Reseller.</td>\n\t\t<td>Once</td>\n\t</tr>\n\t<tr>\n\t\t<td>description</td>\n\t\t<td>A detailed description of the campaign’s purpose.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>embeddedLink</td>\n\t\t<td>Specifies whether the campaign is using an embedded link of any kind. Note that public URL shorteners (e.g., bitly, tinyurl) are not accepted.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>embeddedPhone</td>\n\t\t<td>Specifies whether the campaign is using an embedded phone number other than the HELP information contact number.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>termsAndConditions</td>\n\t\t<td>Indicates that the registering CSP agrees to TCR’s terms and conditions.</td>\n\t\t<td>No</td>\n\t</tr>\n\t<tr>\n\t\t<td>numberPool</td>\n\t\t<td>Indicates whether the campaign is using more than 50 phone numbers in a campaign. Some network providers require this information, as it necessitates a different provisioning process.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>ageGated</td>\n\t\t<td>Specifies whether the campaign contains age-gated content.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>directLending</td>\n\t\t<td>Specifies whether the campaign will be used by a brand that provides direct lending.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>subscriberOptIn</td>\n\t\t<td>Indicates whether the campaign requires subscriber opt-in before sending messages.</td>\n\t\t<td>No</td>\n\t</tr>\n\t<tr>\n\t\t<td>subscriberOptOut</td>\n\t\t<td>Indicates whether the campaign has an opt-out system for subscribers (e.g., keywords such as STOP or QUIT).</td>\n\t\t<td>No</td>\n\t</tr>\n\t<tr>\n\t\t<td>subscriberHelp</td>\n\t\t<td>Indicates whether the campaign has a help system for subscribers (e.g., keywords such as HELP or INFO).</td>\n\t\t<td>No</td>\n\t</tr>\n\t<tr>\n\t\t<td>sample[1-5]</td>\n\t\t<td>Sample messages that are representative of messages sent as part of the campaign.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>messageFlow</td>\n\t\t<td>Describes how a subscriber would opt-in to the campaign.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>helpMessage</td>\n\t\t<td>Sample help message that would be sent to the subscriber.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>mnoIds</td>\n\t\t<td>The unique identifiers of specific MNOs that the campaign wants to use. See the PUT /campaign/{campaignId}/resubmit endpoint to resubmit a campaign to a specific MNO.</td>\n\t\t<td>No</td>\n\t</tr>\n\t<tr>\n\t\t<td>referenceId</td>\n\t\t<td>A unique reference identifier for the campaign that’s managed by the CSP’s internal systems. Sole Proprietor campaigns require the use of a referenceId.</td>\n\t\t<td>No</td>\n\t</tr>\n\t<tr>\n\t\t<td>autoRenewal</td>\n\t\t<td>Indicates whether the campaign will automatically renew each billing period.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>tag</td>\n\t\t<td>List of tags associated with the campaign. Can be used as an organizational system that helps when searching for the campaign.</td>\n\t\t<td>No</td>\n\t</tr>\n\t<tr>\n\t\t<td>optinKeywords</td>\n\t\t<td>A list of keywords a subscriber uses to opt-in to the campaign. Supports keyword phrases with the use of spaces in each entry.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>optoutKeywords</td>\n\t\t<td>A list of keywords a subscriber uses to opt-out of the campaign. Supports keyword phrases with the use of spaces in each entry.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>helpKeywords</td>\n\t\t<td>A list of keywords a subscriber can use to get help or more information from the campaign. Supports keyword phrases with the use of spaces in each entry.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>optinMessage</td>\n\t\t<td>Sample of a message sent to the  subscriber when they opt-in.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>optoutMessage</td>\n\t\t<td>Sample of a message sent to the  subscriber when they opt-out.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>privacyPolicyLink</td>\n\t\t<td>A link to the campaign’s privacy policy page.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>termsAndConditionsLink</td>\n\t\t<td>A link to the campaign’s terms and conditions page.</td>\n\t\t<td>Yes</td>\n\t</tr>\n\t<tr>\n\t\t<td>embeddedLinkSample</td>\n\t\t<td>If using an embedded link, a sample of the link that will be used in the campaign. Note that public URL shorteners (e.g., bitly, tinyurl) are not accepted.</td>\n\t\t<td>Yes</td>\n\t</tr>\n</tbody>\n</table>",
        "operationId" : "updateCampaign",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Campaign properties to be updated.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UpdateCampaign_CSP"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Campaign_CSP"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>518: Campaign is expired.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>591: Temporary system error. Wait 30 seconds and try again.</li>\n<li>630: Temporary system error. Number provisioning provider (nnSR) cannot accept requests at this time. Wait 30 seconds and try again.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credential"
          },
          "429" : {
            "description" : "Too Many Requests"
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "delete" : {
        "tags" : [ "Campaign" ],
        "summary" : "Deactivates a campaign",
        "description" : "Deactivates a campaign by setting its status to EXPIRED and removing it from the number provisioning provider (nnSR). Deactivated campaigns cannot be restored. If a CSP wants to reactivate a campaign, they must create a new one with the same information. This endpoint is idempotent.",
        "operationId" : "deactivateCampaign",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>591: Temporary system error. Wait 30 seconds and try again.</li>\n<li>630: Temporary system error. Number provisioning provider (nnSR) cannot accept requests at this time. Wait 30 seconds and try again.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/partnerCampaign/{campaignId}/sharing" : {
      "get" : {
        "tags" : [ "Partner Campaign" ],
        "summary" : "Get the sharing status of a campaign shared to a CNP",
        "description" : "Retrieves the shared identity and status of a partner campaign from both downstream and upstream CNPs in the connectivity chain. A successful response will show downstream partners in the <code>sharedWithMe</code> attribute and upstream partners in the <code>sharedByMe</code> attribute.",
        "operationId" : "getPartnerCampaignSharingStatus",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "cnpMigration",
          "in" : "query",
          "description" : "Indicates whether the campaign is in the process of CNP migration.",
          "schema" : {
            "type" : "boolean",
            "default" : false
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CampaignSharingChain"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "delete" : {
        "tags" : [ "Partner Campaign" ],
        "summary" : "Decline a campaign sharing request from a partner",
        "description" : "Allows a CNP to decline a campaign sharing request sent from a partner downstream in the connectivity chain. Declining a sharing request will permanently remove it, although the CNP is able to reshare it again.",
        "operationId" : "declineSharedPartnerCampaign",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "explanation",
          "in" : "query",
          "description" : "Explanation for declining campaign. Maximum length 2048 chars.",
          "required" : true,
          "schema" : {
            "maxLength" : 2048,
            "minLength" : 0,
            "type" : "string"
          }
        }, {
          "name" : "rejectionCategory",
          "in" : "query",
          "description" : "Rejection categories for declining campaign.",
          "required" : true,
          "schema" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CampaignSharingStatus"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>518: Campaign is expired.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/attachment/{attachmentId}" : {
      "get" : {
        "tags" : [ "Attachment" ],
        "summary" : "Download a file attached to a campaign",
        "description" : "Downloads any file that is attached to an existing campaign, including MMS sample media files and supporting documents. To download, first determine the file’s <code>uuid</code> value from the appropriate GET endpoint and pass it in the <code>attachmentId</code> parameter. For example, to download a specific MMS sample media file, first use the <code>GET /campaign/{campaignId}/mms</code> endpoint to list the campaign’s attached files and see their <code>uuid</code> attributes.",
        "operationId" : "downloadAttachment",
        "parameters" : [ {
          "name" : "attachmentId",
          "in" : "path",
          "description" : "The unique ID of the attached file.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success"
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "delete" : {
        "tags" : [ "Attachment" ],
        "summary" : "Delete a file attached to a campaign",
        "description" : "Deletes any file that is attached to an existing campaign, including MMS sample media files and supporting documents. To delete a file, first find its <code>uuid</code> value from the appropriate GET endpoint and pass it in the <code>attachmentId</code> parameter. For example, to delete a specific MMS sample media file, first use the <code>GET /campaign/{campaignId}/mms</code> endpoint to list the campaign’s attached files and see their <code>uuid</code> attributes.",
        "operationId" : "deleteAttachment",
        "parameters" : [ {
          "name" : "attachmentId",
          "in" : "path",
          "description" : "The unique ID of the attached file.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>592: Cannot delete the attachment.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}" : {
      "get" : {
        "tags" : [ "Brand" ],
        "summary" : "Retrieve an existing brand record",
        "description" : "Get an existing brand record from TCR by specifying the brand’s unique identifier.",
        "operationId" : "getBrand",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Brand_CSP"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Brand" ],
        "summary" : "Update an existing brand’s properties",
        "description" : "Allows a CSP to update an existing brand’s properties in the TCR system. Modifying some properties will\nchange a brand’s identity status to UNVERIFIED and require resubmission using the PUT /brand/{brandId}/revet\nendpoint. Refer to the table below for additional information.\n<b>Additional notes:</b>\n<ul>\n<li><b>For Public Profit brands:</b> Updating the businessContactEmail will revoke a brand’s Auth+ compliance. The brand must request a new Auth+ vet to regain compliance. During this process, the business contact must reply to a 2FA email.</li>\n<li>Updating a brand’s mobilePhone field will change a brand’s identity status to UNVERIFIED.</li>\n</ul>\n<table border=\"1\">\n<thead>\n    <tr>\n        <th>Properties</th>\n        <th>Description</th>\n        <th>Resubmission required</th>\n    </tr>\n</thead>\n<tbody>\n<tr>\n    <td>companyName, ein, einIssuingCountry, entityType</td>\n    <td>An update is allowed if the brand has no external vets and no active campaigns. Modifying these\n    fields will change the brand identity status to UNVERIFIED.</td>\n    <td>Yes</td>\n</tr>\n<tr>\n    <td>firstName, lastName, displayName, website, street, city, state, postalCode, country, email,\n    referenceId, phone, vertical, stockSymbol, stockExchange, altBusinessId, altBusinessIdType</td>\n    <td>Updating these fields do not require resubmission.</td>\n    <td>Optional</td>\n</tr>\n<tr>\n    <td>brandRelationship</td>\n    <td>Can only be updated once every 3 months.</td>\n    <td>Optional</td>\n</tr>\n<tr>\n    <td>businessContactEmail</td>\n    <td>Updating this field will revoke a Public Profit brand’s Auth+ compliance.</td>\n    <td>No</td>\n</tr>\n</tbody>\n</table>",
        "operationId" : "updateBrand",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Refer to the schema for details on fields listed in the example.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UpdateBrand_CSP"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Brand_CSP"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter. Most string parameters are subject to min and/or max length validations. Some parameters are subject to additional country-specific validation rules including ein, state, and postalCode. Please refer to the BrandRequest schema for more details.</li>\n<li>502: Brand record not found.</li>\n<li>528: Brand update frequency exceeded. Brand relationships can only be updated once every three months.</li>\n<li>537: The fields companyName, ein, einIssuingCountry and entityType cannot be updated if there are any pending or active campaigns/external vets on the brand.</li>\n<li>550: Duplicate threshold detected for brand record.</li>\n<li>551: Unsupported phone number or mobile phone number. For example, Sole Proprietor brands require a US or CA wireless phone number in the mobilePhone field.</li>\n<li>553: Unsupported email address. Disposable email is not permitted.</li>\n<li>554: Invalid street address. The street, city, state, postalCode, and country fields must form a valid postal address.</li>\n<li>555: Unsupported street address. For example, Sole Proprietor brands require a valid US or CA street address.</li>\n<li>556: Obfuscation check failed on brand fields, including firstName, lastName and displayName for a Sole Proprietor brand.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "delete" : {
        "tags" : [ "Brand" ],
        "summary" : "Delete a brand record",
        "description" : "Changes a brand to a DELETED status. A brand record can only be deleted if it does not have any active\ncampaigns associated with it. Once a brand is deleted, it cannot be restored to an ACTIVE status. Deleted\nbrands will remain in TCR for a TBD period of time and can be searched using the GET /brand endpoint with\na query filter of 'status' = DELETED. The GET /brand/{brandId} endpoint will also return deleted brands.",
        "operationId" : "deleteBrand",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n        <ul>\n        <li>501: Invalid input parameter.</li>\n        <li>502: Brand record not found.</li>\n        <li>542: Cannot delete a brand with active campaigns.</li>\n        <li>590: TCR internal system error. Please contact TCR support.</li>\n        </ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/asset/{name}" : {
      "delete" : {
        "tags" : [ "Brand Asset" ],
        "summary" : "Remove an existing brand asset",
        "description" : "Permanently deletes an existing brand asset record from a specified brand. Brand assets cannot be deleted if their verification status is PENDING, VERIFIED, or if they are associated with an active RCS campaign.",
        "operationId" : "deleteBrandAsset",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "name",
          "in" : "path",
          "description" : "The display name of the brand asset.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>566: Operation declined. Brand asset cannot be deleted with pending or active verification.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>592: Operation declined. Cannot delete brand assets associated with active campaigns.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credential"
          },
          "429" : {
            "description" : "Too Many Requests"
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/migrateCnp" : {
      "get" : {
        "tags" : [ "CNP Migration" ],
        "summary" : "Get information about a campaign’s CNP migration",
        "description" : "Get the most recent information about a campaign’s migration to a new connectivity partner. The response will include information about the migration’s status, whether there was a cancellation, and the campaign migration’s creation and expiration date.",
        "operationId" : "getCnpMigration",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CnpMigration"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "delete" : {
        "tags" : [ "CNP Migration" ],
        "summary" : "Cancel a CNP migration",
        "description" : "Cancels a CNP migration for a given campaign. Only the party who initiated the CNP migration is allowed to cancel it.",
        "operationId" : "deleteCnpMigration",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "explanation",
          "in" : "query",
          "description" : "A description of why the CNP migration was canceled.",
          "schema" : {
            "maxLength" : 2048,
            "minLength" : 0,
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>500: Authentication error. Requestor is not the CNP migration owner.</li>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/operationStatus/{mnoId}" : {
      "delete" : {
        "tags" : [ "MNO Operation" ],
        "summary" : "Delete an excluded MNO from a campaign",
        "description" : "Removes an MNO that was previously excluded from the campaign by primary or secondary DCAs. This allows the CAMPAIGN_DCA_COMPLETE event to be sent when all other associated DCAs accept the campaign.",
        "operationId" : "deleteMnoCampaignOperation",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "mnoId",
          "in" : "path",
          "description" : "The unique ID of the MNO to be removed.",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "requestBody" : {
          "description" : "Explanation for removing MNO from excludedMnoIdList",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExplanationParam"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>500: Authentication error. Requestor is not the CNP migration owner.</li>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/reseller/{resellerId}" : {
      "get" : {
        "tags" : [ "Reseller" ],
        "summary" : "Get details on a specific reseller",
        "description" : "Retrieve a reseller record by a unique ID.",
        "operationId" : "getReseller",
        "parameters" : [ {
          "name" : "resellerId",
          "in" : "path",
          "description" : "The unique ID that identifies the reseller.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Reseller"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Reseller record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Reseller" ],
        "summary" : "Update reseller details",
        "description" : "Update the properties in a specified reseller record.",
        "operationId" : "updateReseller",
        "parameters" : [ {
          "name" : "resellerId",
          "in" : "path",
          "description" : "Alphanumeric identifier (prefixed with letter 'R') returned from reseller creation operation.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "The unique ID that identifies the reseller.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UpdateReseller"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string",
                  "example" : {
                    "resellerId" : "R123ABC",
                    "cspId" : "S123ABC",
                    "companyName" : "Acme",
                    "phone" : "+15555555555",
                    "email" : "john.doe@acme.com"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Reseller record not found.</li>\n<li>503: Duplicate reseller found. The companyName for a reseller must be unique.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "delete" : {
        "tags" : [ "Reseller" ],
        "summary" : "Delete a reseller",
        "description" : "Deletes a reseller record by a specified ID. Resellers cannot be deleted if they are associated with one or more campaigns.",
        "operationId" : "deleteReseller",
        "parameters" : [ {
          "name" : "resellerId",
          "in" : "path",
          "description" : "The unique ID that identifies the reseller.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Reseller record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/excludedMno" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "Retrieve a list of MNOs excluded from a campaign",
        "description" : "Returns an array of MNOs excluded from a campaign when the primary or secondary DCAs accepted it.",
        "operationId" : "getActiveExcludedMnos",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "example" : [ 10017, 10035 ]
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/feedback/{brandId}" : {
      "get" : {
        "tags" : [ "Brand" ],
        "summary" : "Retrieves brand feedback details",
        "description" : "Retrieves brand feedback details using the unique identifier assigned to the brand. This endpoint can be\ninvoked following new brand registration, an appeal, or following a revet. CSPs should only retrieve feedback\ndetails after the brand scoring process is complete (i.e., after receiving the BRAND_IDENTITY_STATUS_UPDATE\nwebhook notification event). The following items may be returned in the Category ID property:\n<ul>\n    <li><b>TAX_ID:</b> Tax ID does not match with the company name or business type.</li>\n    <li><b>STOCK_SYMBOL:</b> Not a public company, or the stock ticker and/or exchange does not match with the legal company name.</li>\n    <li><b>GOVERNMENT_ENTITY:</b> Not recognized as a government entity. Must be a U.S. government entity.</li>\n    <li><b>NONPROFIT:</b> IRS tax exempt subsection status not found.</li>\n    <li><b>WEB_DOMAIN:</b> Not valid or recognized email domain.</li>\n</ul>",
        "operationId" : "getBrandFeedback",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BrandFeedback"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n        <ul>\n        <li>501: Invalid input parameter.</li>\n        <li>502: Brand record not found.</li>\n        <li>526: Brand identity vetting unsuccessful.</li>\n        <li>535: Brand identity vetting is pending.</li>\n        <li>590: TCR internal system error. Please contact TCR support.</li>\n        </ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaignBuilder/termsAndConditions" : {
      "get" : {
        "tags" : [ "Campaign Builder" ],
        "summary" : "Get the campaign builder’s Terms and Conditions",
        "description" : "Retrieve the Terms and Conditions text of the campaign builder. CSPs can use this endpoint to retrieve the latest version of TCR’s Terms and Conditions document to share with customers.",
        "operationId" : "getTermsAndConditions",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TermsAndConditions"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed."
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/settings/cnpMigration" : {
      "get" : {
        "tags" : [ "Settings" ],
        "summary" : "Get the current account’s CNP migration settings",
        "description" : "CNP migration allows CSPs and CNPs to switch connectivity partners for a large number of campaigns with minimal service disruption. This endpoint returns information on the current account’s CNP migration settings. The following properties are currently available:\n<ul>\n<li>migrationSupported: Indicates whether the current account has the CNP migration feature enabled. This property must be set to true in order to initiate or accept/decline CNP migrations on campaigns.</li>\n<li>migrationAutoComplete: Enables automatic acceptance of campaign sharing requests by this CSP or CNP if they are part of both the existing and provisional connectivity chains.</li>\n</ul>\nFor more information, read the <a href=\"https://www.campaignregistry.com/Assets/External%20Campaign%20CNP%20Migration%20Overview.pdf\">CNP Migration Tool</a> documentation.",
        "operationId" : "getCnpMigrationSettings",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CnpMigrationSettings"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>502: CSP record not found.</li>\n<li>504: CSP account inactive.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Settings" ],
        "summary" : "Updates the current account’s CNP migration settings",
        "description" : "CNP migration allows CSPs and CNPs to switch connectivity partners for a large number of campaigns with minimal service disruption. This endpoint updates the current account’s CNP migration settings. The following properties are currently available:\n<ul>\n<li>migrationSupported: This property must be set to true in order to initiate CNP migrations on campaigns.</li>\n<li>migrationAutoComplete: Enables automatic acceptance of campaign sharing requests by this CSP or CNP if they are part of both the existing and provisional connectivity chains.</li>\n</ul>\nFor more information, read the <a href=\"https://www.campaignregistry.com/Assets/External%20Campaign%20CNP%20Migration%20Overview.pdf\">CNP Migration Tool</a> documentation.\n",
        "operationId" : "updateCnpMigrationSettings",
        "requestBody" : {
          "description" : "CNP migration settings to be updated.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/CnpMigrationSettings"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CnpMigrationSettings"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/mnoMetadata" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "Get a campaign’s metadata from all submitted MNOs",
        "description" : "Retrieves a specified campaign’s metadata from all MNOs where it has been submitted. Returns a set of key-value pairs for each MNO ID in the response body.",
        "operationId" : "getCampaignCre",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "object",
                  "example" : {
                    "10017" : {
                      "minMsgSamples" : 1,
                      "msgClass" : "A",
                      "reqSubscriberOptout" : false,
                      "mnoReview" : false,
                      "noEmbeddedPhone" : true,
                      "mno" : "AT&T",
                      "tpm" : 1800,
                      "mmsTpm" : 900,
                      "reqSubscriberHelp" : true,
                      "reqSubscriberOptin" : true,
                      "mnoSupport" : true,
                      "noEmbeddedLink" : true,
                      "qualify" : true
                    },
                    "10035" : {
                      "minMsgSamples" : 1,
                      "reqSubscriberHelp" : true,
                      "reqSubscriberOptout" : false,
                      "reqSubscriberOptin" : true,
                      "mnoReview" : false,
                      "mnoSupport" : true,
                      "brandTier" : "TOP",
                      "noEmbeddedLink" : true,
                      "noEmbeddedPhone" : true,
                      "qualify" : true,
                      "mno" : "T-Mobile"
                    }
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/operationStatus" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "Get a campaign’s status on all submitted MNOs",
        "description" : "Returns a set of key-value pairs in the response body with an MNO ID and the campaign’s operational status on the carrier’s network. <b>Note:</b> MNOs are encouraged, but not required, to report a campaign’s operational status to TCR.\nValid responses include:\n<ul>\n<li><b>REGISTERED:</b> The campaign was approved and is registered with the MNO.</li>\n<li><b>REVIEW:</b> The campaign is currently under review by the MNO.</li>\n<li><b>REJECTED:</b> The campaign was rejected by the MNO.</li>\n<li><b>SUSPENDED:</b> The campaign is suspended on the MNO’s network.</li>\n</ul>",
        "operationId" : "getCampaignOperationStatus",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "object",
                  "example" : {
                    "10017" : "REGISTERED",
                    "10035" : "REVIEW"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand or vetting record not found.</li>\n<li>518: Campaign is expired.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/sharing" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "Get a campaign’s shared status",
        "description" : "Retrieves the shared status of a campaign where the CSP is the immediate connectivity partner. Response will include information on whether the campaign was shared to the CSP or shared upstream by the CSP.",
        "operationId" : "getCampaignSharingChain",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "cnpMigration",
          "in" : "query",
          "description" : "Specifies whether the campaign is undergoing CNP migration.",
          "schema" : {
            "type" : "boolean",
            "default" : false
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CampaignSharingChain"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/nnsr/campaign/{campaignId}/attributes" : {
      "get" : {
        "tags" : [ "nnSR" ],
        "summary" : "Gets campaign attributes from nnSR",
        "description" : "Retrieves the current attributes that are set for the specified campaign on the netnumber Services Registry (nnSR) platform. nnSR provides phone number provisioning for campaigns outside of the TCR system.",
        "operationId" : "getNetNumberCampaignAttributes",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "object",
                  "example" : {
                    "msg_class" : "E",
                    "status" : "7",
                    "brand_id" : "B6YHPELO"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>591: Temporary system error. Wait 30 seconds and try again.</li>\n<li>630: Temporary system error. Number provisioning provider (nnSR) cannot accept requests at this time. Wait 30 seconds and try again.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/nnsr/campaign/{campaignId}/phones" : {
      "get" : {
        "tags" : [ "nnSR" ],
        "summary" : "Get phone numbers provisioned to a campaign",
        "description" : "Returns a list of phone numbers assigned to a specific campaign. Phone numbers are provisioned outside of the TCR system and reported by the netnumber Services Registry (nnSR). This endpoint supports paginated results.",
        "operationId" : "getNetNumberCampaignPhones",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "current",
          "in" : "query",
          "description" : "Filters results on whether to return currently associated phone numbers (true) or previously associated phone numbers (false).",
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The requested page of the result. ",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "description" : "The number of records to return per page in the result.",
          "schema" : {
            "maximum" : 500,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SimplifiedOsrPhoneWithCampaignRecordSet_CSP"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/osr/attributes" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "Deprecated. Gets campaign attributes sent to nnSR",
        "description" : "<p>This endpoint will be removed in a future release. Use GET /nnsr/campaign/{campaignId}/attributes as a replacement.</p>\n<p>Retrieves the current attributes that are set for the specified campaign on the netnumber Services Registry (nnSR) platform.\n   nnSR provides phone number provisioning for campaigns outside of the TCR system.</p>",
        "operationId" : "getOsrCampaignAttributes",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "object",
                  "example" : {
                    "msg_class" : "E",
                    "status" : "7",
                    "brand_id" : "B6YHPELO"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>591: Temporary system error. Wait 30 seconds and try again.</li>\n<li>630: Temporary system error. Number provisioning provider (nnSR) cannot accept requests at this time. Wait 30 seconds and try again.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "deprecated" : true,
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/osr/phones" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "Deprecated. Get phone numbers provisioned to a campaign",
        "description" : "<p>This endpoint will be removed in a future release. Use GET /nnsr/campaign/{campaignId}/phones as a replacement.</p>\n<p>Returns a list of phone numbers assigned to a specific campaign. Phone numbers are provisioned outside of the TCR system\n   and reported by the netnumber Services Registry (nnSR). This endpoint supports paginated results.</p>",
        "operationId" : "getOsrCampaignPhones",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "current",
          "in" : "query",
          "description" : "Filters results on whether to return currently associated phone numbers (true) or previously associated phone numbers (false).",
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The requested page of the result. ",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "description" : "The number of records to return per page in the result.",
          "schema" : {
            "maximum" : 500,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SimplifiedOsrPhoneWithCampaignRecordSet_CSP"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "deprecated" : true,
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/partnerCampaign/{campaignId}" : {
      "get" : {
        "tags" : [ "Partner Campaign" ],
        "summary" : "Get the shared partner campaign’s details",
        "description" : "Get details on a campaign shared with the CSP by a downstream partner.",
        "operationId" : "getPartnerCampaign",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "cnpMigration",
          "in" : "query",
          "description" : "Indicates whether the campaign is in the process of CNP migration.",
          "schema" : {
            "type" : "boolean",
            "default" : false
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SharedCampaignDetails_CSP"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/partnerCampaign/{campaignId}/mnoMetadata" : {
      "get" : {
        "tags" : [ "Partner Campaign" ],
        "summary" : "Get MNO metadata from a shared campaign",
        "description" : "Returns an array with metadata on each MNO where the campaign has been submitted. The response contains information on the carrier terms and requirements for the campaign.",
        "operationId" : "getPartnerCampaignMnoMetadata",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "object",
                  "example" : {
                    "10017" : {
                      "minMsgSamples" : 1,
                      "msgClass" : "A",
                      "reqSubscriberOptout" : false,
                      "mnoReview" : false,
                      "noEmbeddedPhone" : true,
                      "mno" : "AT&T",
                      "tpm" : 1800,
                      "mmsTpm" : 900,
                      "reqSubscriberHelp" : true,
                      "reqSubscriberOptin" : true,
                      "mnoSupport" : true,
                      "noEmbeddedLink" : true,
                      "qualify" : true
                    },
                    "10035" : {
                      "minMsgSamples" : 1,
                      "reqSubscriberHelp" : true,
                      "reqSubscriberOptout" : false,
                      "reqSubscriberOptin" : true,
                      "mnoReview" : false,
                      "mnoSupport" : true,
                      "brandTier" : "TOP",
                      "noEmbeddedLink" : true,
                      "noEmbeddedPhone" : true,
                      "qualify" : true,
                      "mno" : "T-Mobile"
                    }
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/partnerCampaign/{campaignId}/operationStatus" : {
      "get" : {
        "tags" : [ "Partner Campaign" ],
        "summary" : "Get a shared campaign’s operational status from each MNO",
        "description" : "Returns an array containing the status of the shared campaign for each MNO where the campaign has been submitted. MNOs are identified by their network ID. Possible values include: REGISTERED, REVIEW, REJECTED, and SUSPENDED. <b>Note:</b>  MNOs are encouraged, but not required, to report a campaign’s operational status to TCR.",
        "operationId" : "getPartnerCampaignOperationStatus",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "object",
                  "example" : {
                    "10017" : "REGISTERED",
                    "10035" : "REVIEW"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>518: Campaign is expired.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/partnerCampaign/sharedWithMe" : {
      "get" : {
        "tags" : [ "Partner Campaign" ],
        "summary" : "Deprecated. Search campaigns that have been shared with the CSP by downstream partners",
        "description" : "<p>This endpoint will be removed in a future release. Use <code>GET /partnerCampaign/sharedWithMe/search</code> as a replacement</p>.\n<p>Allows the CSP to search all campaigns that have been shared with them by downstream partners. The <code>downstreamCnpId</code> filter can\n   limit campaigns by a particular downstream partner. This endpoint supports paginated results.</p>",
        "operationId" : "listPartnerCampaignsByDownstreamCnp",
        "parameters" : [ {
          "name" : "downstreamCnpId",
          "in" : "query",
          "description" : "Unique identifier of the downstream partner who has shared a campaign with the CSP.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "brandId",
          "in" : "query",
          "description" : "The unique ID that identifies the brand.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filters by the campaign status.",
          "schema" : {
            "type" : "string",
            "enum" : [ "ACTIVE", "EXPIRED" ]
          }
        }, {
          "name" : "sharingStatus",
          "in" : "query",
          "description" : "Filter by the campaign’s sharing status with the CSP.",
          "schema" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string",
              "enum" : [ "PENDING", "ACCEPTED", "DECLINED" ]
            }
          }
        }, {
          "name" : "startDate",
          "in" : "query",
          "description" : "The starting date a campaign was shared with the CSP in YYYY-MM-DD format.",
          "schema" : {
            "pattern" : "20\\d\\d-[0-1]{1}[0-9]{1}-[0-3]{1}[0-9]{1}",
            "type" : "string"
          }
        }, {
          "name" : "endDate",
          "in" : "query",
          "description" : "The ending date a campaign was shared with the CSP in YYYY-MM-DD format.",
          "schema" : {
            "pattern" : "20\\d\\d-[0-1]{1}[0-9]{1}-[0-3]{1}[0-9]{1}",
            "type" : "string"
          }
        }, {
          "name" : "cnpMigration",
          "in" : "query",
          "description" : "Indicates whether the campaign is in the process of CNP migration.",
          "schema" : {
            "type" : "boolean",
            "default" : false
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The requested page of the result. ",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "description" : "The number of records to return per page in the result.",
          "schema" : {
            "maximum" : 500,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "object",
                  "example" : {
                    "records" : [ {
                      "campaignId" : "C123ABC",
                      "status" : "EXPIRED",
                      "createDate" : "2022-07-25T15:56:23.000Z",
                      "brandId" : "B123ABC",
                      "usecase" : "2FA",
                      "subUsecases" : [ ],
                      "description" : "Sample description.",
                      "subscriberOptin" : true,
                      "subscriberOptout" : true,
                      "subscriberHelp" : true,
                      "directLending" : true,
                      "numberPool" : true,
                      "embeddedLink" : true,
                      "embeddedPhone" : true,
                      "termsAndConditions" : true,
                      "ageGated" : true,
                      "sample1" : "Message sample 1.",
                      "sample2" : null,
                      "sample3" : null,
                      "sample4" : null,
                      "sample5" : null,
                      "messageFlow" : null,
                      "helpMessage" : null,
                      "optinKeywords" : null,
                      "optoutKeywords" : null,
                      "helpKeywords" : null,
                      "optinMessage" : null,
                      "optoutMessage" : null,
                      "privacyPolicyLink" : null,
                      "termsAndConditionsLink" : null,
                      "embeddedLinkSample" : null
                    } ],
                    "page" : 1,
                    "totalRecords" : 1
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "deprecated" : true,
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/partnerCampaign/sharedByMe" : {
      "get" : {
        "tags" : [ "Partner Campaign" ],
        "summary" : "Deprecated. Search campaigns that have been shared by the CSP to upstream partners",
        "description" : "<p>This endpoint will be removed in a future release. Use <code>GET /partnerCampaign/sharedByMe/search</code> as a replacement.</p>\n<p>Allows the CSP to search all campaigns that have been shared by them to upstream partners.\n   The <code>upstreamCnpId</code> filter can limit campaigns by a particular upstream partner.\n   This endpoint supports paginated results.</p>",
        "operationId" : "listPartnerCampaignsByUpstreamCnp",
        "parameters" : [ {
          "name" : "upstreamCnpId",
          "in" : "query",
          "description" : "Unique identifier of the upstream partner to whom the CSP has shared a campaign.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "brandId",
          "in" : "query",
          "description" : "The unique ID that identifies the brand.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filters by the campaign status.",
          "schema" : {
            "type" : "string",
            "enum" : [ "ACTIVE", "EXPIRED" ]
          }
        }, {
          "name" : "sharingStatus",
          "in" : "query",
          "description" : "Filter by the campaign’s sharing status with the CSP.",
          "schema" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string",
              "enum" : [ "PENDING", "ACCEPTED", "DECLINED" ]
            }
          }
        }, {
          "name" : "startDate",
          "in" : "query",
          "description" : "The date the campaign was shared with the CSP in YYYY-MM-DD format.",
          "schema" : {
            "pattern" : "20\\d\\d-[0-1]{1}[0-9]{1}-[0-3]{1}[0-9]{1}",
            "type" : "string"
          }
        }, {
          "name" : "endDate",
          "in" : "query",
          "description" : "The date the campaign was shared with the CSP in YYYY-MM-DD format.",
          "schema" : {
            "pattern" : "20\\d\\d-[0-1]{1}[0-9]{1}-[0-3]{1}[0-9]{1}",
            "type" : "string"
          }
        }, {
          "name" : "cnpMigration",
          "in" : "query",
          "description" : "Indicates whether the campaign is in the process of CNP migration.",
          "schema" : {
            "type" : "boolean",
            "default" : false
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The requested page of the result.",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "description" : "The number of records to return per page in the result.",
          "schema" : {
            "maximum" : 500,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "object",
                  "example" : {
                    "records" : [ {
                      "campaignId" : "C123ABC",
                      "status" : "EXPIRED",
                      "createDate" : "2022-05-23T12:30:30.000Z",
                      "brandId" : "B123ABC",
                      "usecase" : "MARKETING",
                      "subUsecases" : [ ],
                      "description" : "Sell the moon",
                      "subscriberOptin" : true,
                      "subscriberOptout" : true,
                      "subscriberHelp" : true,
                      "directLending" : false,
                      "numberPool" : false,
                      "embeddedLink" : false,
                      "embeddedPhone" : false,
                      "termsAndConditions" : true,
                      "ageGated" : false,
                      "sample1" : "Would you like to buy the moon?",
                      "sample2" : null,
                      "sample3" : null,
                      "sample4" : null,
                      "sample5" : null,
                      "messageFlow" : null,
                      "helpMessage" : null,
                      "optinKeywords" : null,
                      "optoutKeywords" : "",
                      "helpKeywords" : "",
                      "optinMessage" : null,
                      "optoutMessage" : null,
                      "privacyPolicyLink" : null,
                      "termsAndConditionsLink" : null,
                      "embeddedLinkSample" : null
                    } ],
                    "page" : 1,
                    "totalRecords" : 1
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "deprecated" : true,
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/partnerCampaign/sharedByMe/search" : {
      "get" : {
        "tags" : [ "Partner Campaign" ],
        "summary" : "Search campaigns that have been shared by the CSP to upstream partners",
        "description" : "<p>Allows the CSP to search all campaigns that have been shared by them to upstream partners.\n   The <code>upstreamCnpId</code> filter can limit campaigns by a particular upstream partner.\n   This endpoint supports paginated results up to a maximum of 10,000 records.</p>",
        "operationId" : "listPartnerCampaignsByUpstreamCnp_1",
        "parameters" : [ {
          "name" : "upstreamCnpId",
          "in" : "query",
          "description" : "Unique identifier of the upstream partner to whom the CSP has shared a campaign.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "brandId",
          "in" : "query",
          "description" : "The unique ID that identifies the brand.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filters by the campaign status.",
          "schema" : {
            "type" : "string",
            "enum" : [ "ACTIVE", "EXPIRED" ]
          }
        }, {
          "name" : "sharingStatus",
          "in" : "query",
          "description" : "Filter by the campaign’s sharing status with the CSP.",
          "schema" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string",
              "enum" : [ "PENDING", "ACCEPTED", "DECLINED" ]
            }
          }
        }, {
          "name" : "startDate",
          "in" : "query",
          "description" : "The date the campaign was shared with the CSP in YYYY-MM-DD format.",
          "schema" : {
            "pattern" : "20\\d\\d-[0-1]{1}[0-9]{1}-[0-3]{1}[0-9]{1}",
            "type" : "string"
          }
        }, {
          "name" : "endDate",
          "in" : "query",
          "description" : "The date the campaign was shared with the CSP in YYYY-MM-DD format.",
          "schema" : {
            "pattern" : "20\\d\\d-[0-1]{1}[0-9]{1}-[0-3]{1}[0-9]{1}",
            "type" : "string"
          }
        }, {
          "name" : "cnpMigration",
          "in" : "query",
          "description" : "Indicates whether the campaign is in the process of CNP migration.",
          "schema" : {
            "type" : "boolean",
            "default" : false
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The requested page of the result.",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "description" : "The number of records to return per page in the result. Max size is 50.",
          "schema" : {
            "maximum" : 50,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SharedCampaignRecordSet"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/partnerCampaign/sharedWithMe/search" : {
      "get" : {
        "tags" : [ "Partner Campaign" ],
        "summary" : "Search campaigns that have been shared with the CSP by downstream partners",
        "description" : "<p>Allows the CSP to search all campaigns that have been shared with them by downstream partners.\n   The <code>downstreamCnpId</code> filter can limit campaigns by a particular downstream partner.\n   This endpoint supports paginated results up to a maximum of 10,000 records.</p>",
        "operationId" : "listPartnerCampaignsSharedWithMe",
        "parameters" : [ {
          "name" : "downstreamCnpId",
          "in" : "query",
          "description" : "Unique identifier of the downstream partner who has shared a campaign with the CSP.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "brandId",
          "in" : "query",
          "description" : "The unique ID that identifies the brand.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filters by the campaign status.",
          "schema" : {
            "type" : "string",
            "enum" : [ "ACTIVE", "EXPIRED" ]
          }
        }, {
          "name" : "sharingStatus",
          "in" : "query",
          "description" : "Filter by the campaign’s sharing status with the CSP.",
          "schema" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string",
              "enum" : [ "PENDING", "ACCEPTED", "DECLINED" ]
            }
          }
        }, {
          "name" : "sharingStartDate",
          "in" : "query",
          "description" : "The starting date a campaign was shared with the CSP in YYYY-MM-DD format.",
          "schema" : {
            "pattern" : "20\\d\\d-[0-1]{1}[0-9]{1}-[0-3]{1}[0-9]{1}",
            "type" : "string"
          }
        }, {
          "name" : "sharingEndDate",
          "in" : "query",
          "description" : "The ending date a campaign was shared with the CSP in YYYY-MM-DD format.",
          "schema" : {
            "pattern" : "20\\d\\d-[0-1]{1}[0-9]{1}-[0-3]{1}[0-9]{1}",
            "type" : "string"
          }
        }, {
          "name" : "cnpMigration",
          "in" : "query",
          "description" : "Indicates whether the campaign is in the process of CNP migration.",
          "schema" : {
            "type" : "boolean",
            "default" : false
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The requested page of the result. ",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "description" : "The number of records to return per page in the result. Max size is 50.",
          "schema" : {
            "maximum" : 50,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SharedCampaignRecordSet"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/pft/brand" : {
      "get" : {
        "tags" : [ "Platform Free Trial" ],
        "summary" : "Retrieve the PFT brand associated with the account",
        "description" : "Gets the brand ID to be used exclusively for registering Platform Free Trial (PFT) use case campaigns (identified by TRIAL in the campaign’s <code>usecase</code> property). PFT access can only be granted on an account by TCR support, who also creates the PFT brand for the CSP. <b>Note:</b> If this endpoint returns error code 502, then it means the PFT brand has not been provisioned.",
        "operationId" : "getPftBrand",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Brand_CSP"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>502: PFT Brand not provisioned for CSP account. Please contact TCR support.</li>\n<li>533: CSP account not enabled for platform free trial feature.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/csp/profile" : {
      "get" : {
        "tags" : [ "Settings" ],
        "summary" : "Gets settings from the profile of the current account",
        "description" : "Retrieves available settings from the profile of the current account. These include:\n<ul>\n<li><b>cspId:</b> The unique ID that identifies the CSP or CNP in the TCR system.</li>\n<li><b>escalateEmail:</b> Email used for contract, business communications, and direct emails from TCR Support.</li>\n<li><b>email:</b> Email used for receiving system events.</li>\n<li><b>techEmail:</b> Not currently in use.</li>\n<li><b>financeEmail:</b> Email used for invoicing and finance communications.</li>\n<li><b>platformFreeTrialEnabled:</b> Indicates whether the Platform Free Trial feature has been enabled on the account.</li>\n<li><b>soleProprietorEnabled:</b> Indicates that the account can create Sole Proprietor brands. CNPs and DCAs must also have this setting enabled in order to receive shared Sole Proprietor campaigns.</li>\n<li><b>ucaasEnabled:</b> Indicates whether the UCaaS feature has been enabled on the account. This provides access to the UCaaS use cases.</li>\n<li><b>publicSafetyEnabled:</b> Indicates whether the Public Safety feature is enabled. This is a restricted use case only available to select accounts.</li>\n<li><b>dpaSigned:</b> Indicates whether a DPA agreement has been signed with the CSP.</li>\n</ul>",
        "operationId" : "getCspProfile",
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CspProfile"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>502: CSP record not found.</li>\n<li>504: CSP account inactive.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Settings" ],
        "summary" : "Update the settings on the current account",
        "description" : "Updates settings on the profile of the current account. These include:\n<ul>\n<li><b>escalateEmail:</b> Email used for contract and business communications and direct emails from TCR Support.</li>\n<li><b>email:</b> Email used for system event notifications</li>\n<li><b>techEmail:</b> Not currently in use.</li>\n<li><b>financeEmail:</b> Email used for invoicing and finance communications.</li>\n</ul>\n<b>Note:</b> Some settings shown in the profile can only be updated by TCR support.\n",
        "operationId" : "updateCspProfile",
        "requestBody" : {
          "description" : "Csp properties to be updated",
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "string",
                "example" : {
                  "escalateEmail" : "support@campaignregistry.com",
                  "email" : "support@campaignregistry.com",
                  "techEmail" : "support@campaignregistry.com",
                  "financeEmail" : "support@campaignregistry.com"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CnpMigrationSettings"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>502: CSP record not found.</li>\n<li>504: CSP account inactive.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/smsOtp/{referenceId}" : {
      "get" : {
        "tags" : [ "Brand" ],
        "summary" : "Get the SMS OTP status",
        "description" : "Retrieves a brand’s SMS one-time password (OTP) status by a CSP-managed <code>referenceId</code> value.\nThis endpoint confirms that the OTP verification was successful and, potentially, its delivery status.\nIf the <code>verifyDate</code> property is present in the response, then the OTP verification was\nsuccessfully completed.\n<b>Note:</b> The <code>deliveryStatus</code> property is only provided if supported by the underlying\nSMS service provider and is not guaranteed to arrive in a timely manner or match the OTP verify status.\nThe <code>deliveryStatus</code> property should only be used to facilitate SMS delivery troubleshooting.\nPossible values for the <code>deliveryStatus</code> property include:\n<ul>\n    <li><b>Null:</b> The SMS service provider hasn't provided any SMS delivery status for the given transaction.</li>\n    <li><b>IN_TRANSIT:</b> SMS message delivery is in progress.</li>\n    <li><b>DELIVERED_GATEWAY:</b> The SMS message was delivered to a carrier gateway. This may be a final status depending on the destination network.</li>\n    <li><b>DELIVERED_HANDSET:</b> The SMS message was delivered to the mobile device. This is a final status. No further updates will be provided.</li>\n    <li><b>FAILED_ROUTING:</b> The SMS message can’t be routed based on the provided phone number. This is a final error status. No further updates will be provided.</li>\n    <li><b>FAILED_BLOCKED:</b> The SMS message was blocked by a service provider or mobile network. This is a final error status. No further updates will be provided.</li>\n    <li><b>FAILED_EXPIRED:</b> The SMS message expired during delivery. This is a final error status. No further updates will be provided.</li>\n    <li><b>FAILED_UNKNOWN:</b> An unknown failure occurred. This is a final error status. No further updates will be provided.</li>\n    <li><b>UNKNOWN_STATUS:</b> The status was not recognized by TCR. Refer to the deliveryStatusDetails property for more information.</li>\n</ul>",
        "operationId" : "getBrandOtp",
        "parameters" : [ {
          "name" : "referenceId",
          "in" : "path",
          "description" : "A unique reference ID that begins with OTP.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SmsOtpStatus"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed."
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/externalVetting" : {
      "get" : {
        "tags" : [ "Brand" ],
        "summary" : "Gets a list of external vetting records for a brand",
        "description" : "Retrieves all external vetting records associated with a brand ID. Records can be queried by an external vetting partner ID, vetting class, or status.",
        "operationId" : "listExternalVets",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "evpId",
          "in" : "query",
          "description" : "The unique ID that identifies an external vetting partner.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "vettingClass",
          "in" : "query",
          "description" : "The type of vetting record. Example: ENHANCED.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "vettingStatus",
          "in" : "query",
          "description" : "The status of the vetting record. Example: PENDING.",
          "required" : true,
          "schema" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "enum" : [ "PENDING", "UNSCORE", "ACTIVE", "FAILED", "EXPIRED" ]
            }
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalVetting"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Brand" ],
        "summary" : "Import an external vetting record",
        "description" : "This endpoint is used to import an external vetting record from a TCR-approved vetting partner. If the\nvetting partner confirms the validity of the record, it will be saved with the brand and used for future\ncampaign qualification.\nThe request body must contain the following properties:\n<ul>\n<li><b>evpId:</b> The vetting partner ID.</li>\n<li><b>vettingId:</b> The unique value of the vetting <code>transactionId</code>.</li>\n</ul>\n<p><b>Note:</b> Import is not supported for the AUTHPLUS vetting class.</p>\nAn optional <code>vettingToken</code> field may be required by the vetting partner. Refer to the table below for full details.\n<table border=\"1\">\n    <thead>\n        <tr>\n            <th>Vetting Provider</th>\n            <th>EvpId</th>\n            <th>Vetting ID Property</th>\n            <th>Vetting Token</th>\n            <th>Notes</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td>Aegis Mobile</td>\n            <td>AEGIS</td>\n            <td>ID</td>\n            <td>Required. Referred to as the Verification Certificate.</td>\n            <td>Supports STANDARD, POLITICAL, and ENHANCED vetting classes.\n                <b>Validation Rules:</b> During import, the following properties\n                must match between the Aegis report and the TCR brand:\n                <ul>\n                    <li>Legal Name</li>\n                    <li>Entity Type</li>\n                </ul>\n            </td>\n        </tr>\n        <tr>\n            <td>Campaign Verify</td>\n            <td>CV</td>\n            <td>Authorization Token</td>\n            <td>N/A</td>\n            <td>Only supports the POLITICAL vetting class.\n                <b>Validation Rules:</b>\n                <ul>\n                    <li>The brand must be a US-based NON_PROFIT entity type without a 501(c) tax exempt status.</li>\n                    <li>Must be a unique token per brand and CSP.</li>\n                </ul>\n            </td>\n        </tr>\n        <tr>\n            <td>WMC Global</td>\n            <td>WMC</td>\n            <td>Transaction ID</td>\n            <td>N/A</td>\n            <td>Only supports the STANDARD vetting class.\n                <b>Validation Rules:</b>\n                <ul><li>The brand must be a US-based PRIVATE_PROFIT or PUBLIC_PROFIT entity type.</li></ul>\n            </td>\n        </tr>\n    </tbody>\n</table>\n",
        "operationId" : "importExternalVet",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Contains the external vetting record to be imported for a brand.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExternalVettingImportRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Successful.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExternalVetting"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand or vetting record not found.</li>\n<li>508: Vetting report has expired.</li>\n<li>520: Vetting report record cannot be found. Please verify that the vettingId and vettingToken (if applicable) are valid.</li>\n<li>525: External vet cannot be imported for this brand.</li>\n<li>538: Vetting report data mismatch. Information in the report does not match brand information.</li>\n<li>539: General vetting report import failure. Please contact the vetting provider for assistance.</li>\n<li>540: Vetting report cannot be imported for brands with active campaigns. Campaign Verify Only.</li>\n<li>541: Vetting report incompatible with brand. Campaign Verify vets require a US-based NON_PROFIT brand without a 501(c) tax exempt status or SOLE_PROPRIETOR entity type.</li>\n<li>543: Vetting report is already associated with another TCR brand. Please request a new vetting report from the vetting provider.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>591: Vetting report cannot be imported because external vetting partner is not responding.</li>\n<li>592: Vetting report cannot be imported due to data constraints.</li>\n<li>620: External vetting provider cannot accept requests at this time. Wait 30 seconds and try again.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Brand" ],
        "summary" : "Request a new external vet for a brand",
        "description" : "Places an order for an external vet via a TCR-approved vetting provider. For detailed instructions, see the <a href=\"https://www.campaignregistry.com/Assets/External Vetting Requests Using the CSP API.pdf\">External Vetting Requests Using the CSP API</a> document.\nTo generate a mock vetting token for use in a CSP non-production testing environment, see the POST <code>/brand/{brandId}/externalVetting/mockCvToken</code> endpoint. For more information, see the <a href=\"https://www.campaignregistry.com/CSP-Non-production-Integration-Testing.pdf\">Non-Production Integration Testing</a> document.\n\n<b>Note:</b> For RCS vets, you must wait 30 days from vet completion before requesting a new one.",
        "operationId" : "orderExternalVet",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Provides information to the external vetting provider as part of the external vetting request.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExternalVettingOrderRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExternalVetting"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>501: Operation declined. Business email address missing from brand information.</li>\n<li>501: Operation declined. Website missing from brand information.</li>\n<li>502: Brand or vetting record not found.</li>\n<li>525: Update the brand’s profile before requesting a re-vet.</li>\n<li>526: Vetting request declined by the vetting provider due to bad data. Please update the brand profile, revet, and try again.</li>\n<li>549: Duplicate vet request within restricted period. Please wait 30 days from vet completion before requesting a new one.</li>\n<li>568: CSP account is not enabled for RCS features.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>591: Temporary system error. Wait 30 seconds and try again.</li>\n<li>592: Operation declined. Vetting request declined by the vetting provider due to an error.</li>\n<li>620: External vetting provider cannot accept requests at this time. Wait 30 seconds and try again.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/asset" : {
      "get" : {
        "tags" : [ "Brand Asset" ],
        "summary" : "Retrieve a list of brand assets from a brand",
        "description" : "Returns a list of brand assets associated with a specified brand. Optional filters can narrow results by the type or name. Response includes the <code>attachmentUuid</code> as well as verification information such as feedback reasons and expiration date (if applicable).",
        "operationId" : "listBrandAsset",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "type",
          "in" : "query",
          "schema" : {
            "type" : "string",
            "enum" : [ "LOGO", "BANNER" ]
          }
        }, {
          "name" : "name",
          "in" : "query",
          "description" : "Display name of the brand asset.",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Successful.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/BrandAsset_CSP"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Please use the below error codes table to identify the cause of error.<table>\n<tbody>\n<tr>\n<td>Error Code&nbsp;</td>\n<td>Error Description&nbsp;</td>\n</tr>\n<tr>\n<td>&nbsp;501</td>\n<td>Invalid input parameter. Brand ID is 7 character long with 'B' letter prefix.</td>\n</tr>\n<tr>\n<td>&nbsp;502</td>\n<td>Brand record not found.</td>\n</tr>\n<tr>\n<td>&nbsp;590</td>\n<td>TCR internal system error.</td>\n</tr>\n</tbody>\n</table>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credential"
          },
          "429" : {
            "description" : "Too Many Requests"
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Brand Asset" ],
        "summary" : "Upload a new brand asset",
        "description" : "Uploads a new brand asset to a specified brand. The following business rules apply:<ul><li>Request body must contain a type of LOGO or BANNER.</li><li>The associated brand cannot be a SOLE_PROPRIETOR.</li><li>Only alphanumeric names are accepted. Spaces, dashes, and underscore characters are also allowed within the name, but leading and trailing spaces are not.</li><li>Assets must have a unique name within the brand.</li><li>Assets must be in the appropriate format (JEPG, JPG or PNG), dimensions (1440 x 448px for banners and 224 x 224px for logos), and within the allowed size (200 KB for banners and 50 KB for logos).</li><li>Up to 50 banners and 50 logos are allowed (for a total of 100 assets) per brand.</li></ul>",
        "operationId" : "uploadBrandAsset",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "multipart/form-data" : {
              "schema" : {
                "required" : [ "name", "type" ],
                "type" : "object",
                "properties" : {
                  "name" : {
                    "type" : "string",
                    "description" : "The display name of the brand asset."
                  },
                  "type" : {
                    "type" : "string"
                  },
                  "url" : {
                    "type" : "string",
                    "description" : "URL of where the file is hosted."
                  },
                  "file" : {
                    "type" : "string",
                    "description" : "Path to the file to upload.",
                    "format" : "binary"
                  }
                }
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>503: Duplicate asset name. Please enter a unique brand asset name.</li>\n<li>544: Unsupported image type. Logo images must have a max file size of 50 KB.</li>\n<li>544: Unsupported image type. Banner images must have a max file size of 200 KB.</li>\n<li>546: Unsupported image type. Banner images must be in JPEG/PNG format.</li>\n<li>546: Unsupported image type. Logo images must be in JPEG/PNG format.</li>\n<li>547: Unsupported image type. Logo images must have dimensions of 224 x 224px.</li>\n<li>547: Unsupported image type. Banner images must have dimensions of 1440 x 448px.</li>\n<li>572: Parsed brand asset name not allowed. Must consist of alphanumeric or ' ', '_', '-' with a length of minimum 3 and maximum 50.</li>\n<li>573: The URL must be valid, HTTPS and publicly available.</li>\n<li>574: Fetching remote file timed out.</li>\n<li>575: URL redirection is forbidden.</li>\n<li>592: Number of assets per brand exceeded. Please delete an existing brand asset before uploading a new one.</li>\n<li>592: Brand assets not supported for Sole Proprietor brands.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credential"
          },
          "429" : {
            "description" : "Too Many Requests"
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/externalVetting/enhancedVettingReport" : {
      "get" : {
        "tags" : [ "Brand" ],
        "summary" : "Gets a list of enhanced vetting reports for a brand",
        "description" : "Retrieves the enhanced vetting reports that are associated with a brand ID.",
        "operationId" : "listEnhancedExternalVets",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/AttachmentInfo"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/appeal/evidence" : {
      "get" : {
        "tags" : [ "Brand" ],
        "summary" : "Gets a list of appeal evidence files for a brand",
        "description" : "Retrieves a list of all appeal evidence files attached to a specified brand.\nThese evidence files could have been used as part of an external vet appeal, identity status appeal, etc.\nSee the <b>Attachment</b> group for API information on downloading and deleting attachments on a brand record.",
        "operationId" : "listAppealEvidence",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/AttachmentInfo"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Brand" ],
        "summary" : "Add evidence files to a brand appeal",
        "description" : "Adds appeal evidence files to a specified brand. These evidence files can be used as part of an external vet appeal, identity status appeal, etc.\nSee the <b>Attachment</b> group for API information on downloading and deleting attachments on a brand record.",
        "operationId" : "uploadAppealEvidence",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "multipart/form-data" : {
              "schema" : {
                "required" : [ "file" ],
                "type" : "object",
                "properties" : {
                  "file" : {
                    "type" : "string",
                    "format" : "binary"
                  }
                }
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AttachmentInfo"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand record not found.</li>\n<li>544: File cannot be uploaded. Maximum file size or the maximum number of files per brand is exceeded.</li>\n<li>546: Unsupported file type. Supported file types include: .jpg, .jpeg, .png, .bmp, .raw, .tiff, .pdf, .docx, .htm, .odt, .rtf, .txt, .xml.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand" : {
      "get" : {
        "tags" : [ "Brand" ],
        "summary" : "Search for registered brands in the TCR system",
        "description" : "Retrieve a list of brands you have registered in TCR along with their properties. Supports any combination of parameters. If supplying <code>state</code>, <code>country</code>, or <code>entityType</code> parameters, only exact matches will be returned. If no parameters are specified, this operation will list all brands that you have registered.\nThis operation supports pagination with a maximum of 500 records per fetch.",
        "operationId" : "listBrands",
        "parameters" : [ {
          "name" : "referenceId",
          "in" : "query",
          "description" : "Reference ID associated with the brand.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "displayName",
          "in" : "query",
          "description" : "DDBA or trade name of the brand. Partial match supported.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "entityType",
          "in" : "query",
          "description" : "Brand entity type. Example: PRIVATE_PROFIT.",
          "schema" : {
            "type" : "string",
            "enum" : [ "PRIVATE_PROFIT", "PUBLIC_PROFIT", "NON_PROFIT", "GOVERNMENT", "SOLE_PROPRIETOR" ]
          }
        }, {
          "name" : "identityStatus",
          "in" : "query",
          "description" : "Brand identity status. Example: UNVERIFIED",
          "schema" : {
            "type" : "string",
            "enum" : [ "SELF_DECLARED", "UNVERIFIED", "VERIFIED", "VETTED_VERIFIED" ]
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Brand status in TCR. Example: DELETED",
          "schema" : {
            "type" : "string",
            "default" : "ACTIVE",
            "enum" : [ "ACTIVE", "DELETED" ]
          }
        }, {
          "name" : "state",
          "in" : "query",
          "description" : "State or province. For US brands, must conform to the 2-letter <a href = \"https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#:~:text=ISO%203166%2D1%20alpha%2D2%20codes%20are%20two%2Dletter,special%20areas%20of%20geographical%20interest.\">ISO 3166-1 alpha-2</a> standard.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "country",
          "in" : "query",
          "description" : "ISO 2-letter abbreviation of country.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ein",
          "in" : "query",
          "description" : "Government-assigned corporate tax ID. In the US, the EIN is a 9-digit number.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "universalEin",
          "in" : "query",
          "description" : "Universal EIN of the Brand.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "resellerId",
          "in" : "query",
          "description" : "Unique reseller ID associated with the brand.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "tag",
          "in" : "query",
          "description" : "Tag associated with the brand.",
          "schema" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }, {
          "name" : "mock",
          "in" : "query",
          "description" : "Filters between real brands (FALSE) and test brands (TRUE). Leave blank to retrieve both.",
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "authenticationPlusCompliant",
          "in" : "query",
          "description" : "Filters brands that have passed 2FA verification. Leave blank to retrieve both.",
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page to retrieve.",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "description" : "Number of records per page. Max size: 500.",
          "schema" : {
            "maximum" : 500,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Brand_CSP"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/agent" : {
      "get" : {
        "tags" : [ "Campaign Verification" ],
        "summary" : "Retrieve a list of agents on an RCS campaign",
        "description" : "Returns a list of Google Agent IDs associated with an RCS campaign.",
        "operationId" : "getCampaignAgent",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/mms" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "Get a list of MMS sample media files on a campaign",
        "description" : "Retrieves a list of all MMS sample media files for a specified campaign. Refer to the endpoints under the Attachment heading for information on downloading and deleting MMS sample media files.",
        "operationId" : "listMmsCampaignMedia",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/AttachmentInfo"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Campaign" ],
        "summary" : "Add an MMS sample media file to a campaign",
        "description" : "Used to add MMS sample media files to a campaign.\nOnly one file per API call is allowed with a max\nfile size of 10 MB. Supported file types include:\n.bmp, .dib, .gif, .jpeg, .jpg, .m2a, .m4a, .m4b,\n.m4p, .m4r, .m4v, .mp1, .mp2, .mp3, .mp4, .mpa, .oga,\n.ogg, .ogm, .ogv, .ogx, .png, .spx, .txt, .wav, .webm.\nRefer to the endpoints under the Attachment heading for\ninformation on downloading and deleting MMS sample media\nfiles.",
        "operationId" : "uploadMmsCampaignMedia",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "multipart/form-data" : {
              "schema" : {
                "required" : [ "file" ],
                "type" : "object",
                "properties" : {
                  "file" : {
                    "type" : "string",
                    "format" : "binary"
                  }
                }
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AttachmentInfo"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>544: File cannot be uploaded. Maximum file size or the maximum number of files per brand is exceeded.</li>\n<li>546: Unsupported file type. Supported file types include: .bmp, .dib, .gif, .jpeg, .jpg, .m2a, .m4a, .m4b, .m4p, .m4r, .m4v, .mp1, .mp2, .mp3, .mp4, .mpa, .oga, .ogg, .ogm, .ogv, .ogx, .png, .spx, .txt, .wav, and .webm.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/supportingDocument" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "Get a list of supporting documents from a campaign",
        "description" : "Retrieves a list of supporting documents attached to a campaign. These can include opt-ins, call-to-actions, terms and conditions documents, or privacy policies. Refer to the endpoints under the Attachment heading for information on downloading and deleting existing supporting documents.",
        "operationId" : "listCampaignSupportingDocuments",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/AttachmentInfo"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Campaign" ],
        "summary" : "Add a supporting document to a campaign",
        "description" : "Adds an optional supporting document to a campaign. Supporting\ndocuments can include an opt-in, call-to-action, terms and\nconditions document, or privacy policy. Supported file types\ninclude: .jpg, .jpeg, .png, .bmp, .tiff, .raw, .pdf, .rtf,\n.xml, .odt, .docx, .htm, .txt. Refer to the endpoints under\nthe Attachment heading for information on downloading and deleting\nexisting supporting documents.",
        "operationId" : "uploadCampaignSupportingDocument",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "multipart/form-data" : {
              "schema" : {
                "required" : [ "file" ],
                "type" : "object",
                "properties" : {
                  "file" : {
                    "type" : "string",
                    "description" : "Path to the file to upload.",
                    "format" : "binary"
                  }
                }
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AttachmentInfo"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>544: File cannot be uploaded. Maximum file size or the maximum number of files per brand is exceeded.</li>\n<li>546: Unsupported file type. Supported file types include: .jpg, .jpeg, .png, .bmp, .tiff, .raw, .pdf, .rtf, .xml, .odt, .docx, .htm, .txt.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/verification" : {
      "get" : {
        "tags" : [ "Campaign Verification" ],
        "summary" : "Retrieves vetting records for an RCS campaign",
        "description" : "Returns a list of vetting records for a specified RCS campaign. An optional <code>vettingStatus</code> query parameter will only retrieve vetting records that correspond with that status. Available statuses include:\n<ul>\n<li><b>PENDING:</b> The RCS campaign verification is in progress.</li>\n<li><b>UNVERIFIED:</b> The RCS campaign failed verification by the external vetting provider.</li>\n<li><b>VERIFIED:</b> The RCS campaign has successfully passed verification by the external vetting provider.</li>\n<li><b>EXPIRED:</b> The expiration date associated with the RCS campaign has passed. The campaign will no longer be active or available to consumers.</li>\n</ul>\n",
        "operationId" : "getCampaignVerification",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "vettingStatus",
          "in" : "query",
          "description" : "Filter results by a specified vetting status.",
          "schema" : {
            "type" : "string",
            "enum" : [ "PENDING", "UNVERIFIED", "VERIFIED", "EXPIRED" ]
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CampaignVerification_CSP"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Campaign Verification" ],
        "summary" : "Submits an RCS campaign for verification",
        "description" : "This endpoint is used to submit an RCS campaign to an external vetting partner for verification.\nIn order for an RCS campaign to complete verification, any associated brand assets must also be successfully verified.\nIf a campaign is submitted with brand assets in a PENDING status, the RCS campaign will also remain PENDING.\n\nIn the request body, specify a Google Agent ID in the <code>agentId</code> property.\n",
        "operationId" : "orderCampaignVerification",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Campaign verification request.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/CampaignVerificationRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CampaignVerification"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign or Agent record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>592: Operation declined. Campaign must be associated with verified logo & banner assets. Campaign agent is already verified.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/search" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "Search campaigns you have registered",
        "description" : "<p>This endpoint does not return mock campaigns. If looking for mock campaigns, use GET /campaign/mock.</p>\n<p>Search for campaigns the CSP has registered by any combination of the available parameters. This operation\n   supports paginated results up to a maximum of 10,000 records and a maximum of 50 records per fetch. Any field\n   supplied must be an exact match. If no parameters are supplied, a full list of campaigns the CSP has registered\n   will be returned. In the response, if the <code>resellerId</code> property of a campaign is set to R000000,\n   this indicates No Reseller.</p>\n<p>If no query parameter is included, then only 10DLC campaigns will be returned.\n   Specify RCS as a <code>channelId</code> query parameter to return RCS campaigns.</p>\n",
        "operationId" : "listCampaignsByES",
        "parameters" : [ {
          "name" : "channelId",
          "in" : "query",
          "description" : "If not provided, defaults to searching 10DLC campaigns. Specify RCS to return RCS campaigns.",
          "schema" : {
            "type" : "string",
            "default" : "10DLC"
          }
        }, {
          "name" : "referenceId",
          "in" : "query",
          "description" : "Reference ID. An identifier managed by the CSP.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "brandId",
          "in" : "query",
          "description" : "The unique ID that identifies the brand.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Status of the campaign.",
          "schema" : {
            "type" : "string",
            "enum" : [ "ACTIVE", "EXPIRED" ]
          }
        }, {
          "name" : "usecase",
          "in" : "query",
          "description" : "Use case of the campaign. Must be an exact match if supplied.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "vertical",
          "in" : "query",
          "description" : "Business segment of the campaign. Must be an exact match if supplied.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "resellerId",
          "in" : "query",
          "description" : "Unique ID of the reseller entered for the campaign. Must be an exact match if supplied.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "autoRenewal",
          "in" : "query",
          "description" : "Whether auto-renew is enabled for the campaign.",
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "upstreamCnpId",
          "in" : "query",
          "description" : "Unique ID of the upstream CNP to whom the campaign has been shared.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "tag",
          "in" : "query",
          "description" : "One or more tags that have been applied to the campaign.",
          "schema" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The requested page of the result.",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "description" : "<p>The number of records to return per page in the result.</p><p><i>Max: 50</i></p>",
          "schema" : {
            "maximum" : 50,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CampaignRecordSet_CSP"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/enum/cnp" : {
      "get" : {
        "tags" : [ "Enum Type" ],
        "summary" : "List connectivity partners",
        "description" : "Returns a list of all possible upstream connectivity partners for a campaign.",
        "operationId" : "listConnectivityPartners",
        "parameters" : [ {
          "name" : "soleProprietorEnabled",
          "in" : "query",
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "cnpMigrationSupported",
          "in" : "query",
          "schema" : {
            "type" : "boolean"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Successful.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string",
                  "example" : {
                    "S123ABC" : "ABC"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credential"
          },
          "429" : {
            "description" : "Too Many Requests"
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/mnoIdsWithDcaElected" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "List MNO IDs where a DCA has been elected",
        "description" : "Retrieves a list of MNO IDs where a DCA has been elected for the campaign.",
        "operationId" : "listMnoIdsWithDcaElected",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "cnpMigration",
          "in" : "query",
          "description" : "Indicates whether the campaign is in the process of CNP migration.",
          "schema" : {
            "type" : "boolean",
            "default" : false
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "object",
                  "example" : [ 10038, 10035 ]
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/mock" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "Search mock campaigns you have registered",
        "description" : "Search for mock campaigns the CSP has registered by any combination of the available parameters. This operation\nsupports paginated results up to a maximum of 10,000 records and a maximum of 50 records per fetch. Any field\nsupplied must be an exact match. If no parameters are supplied, a full list of mock campaigns the CSP has\nregistered will be returned. In the response, if the <code>resellerId</code> property of a campaign is set to\nR000000, this indicates No Reseller.",
        "operationId" : "listMockCampaigns",
        "parameters" : [ {
          "name" : "referenceId",
          "in" : "query",
          "description" : "Reference ID. An identifier managed by the CSP.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "brandId",
          "in" : "query",
          "description" : "The unique ID that identifies the brand.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Status of the campaign.",
          "schema" : {
            "type" : "string",
            "enum" : [ "ACTIVE", "EXPIRED" ]
          }
        }, {
          "name" : "usecase",
          "in" : "query",
          "description" : "Use case of the campaign. Must be an exact match if supplied.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "vertical",
          "in" : "query",
          "description" : "Business segment of the campaign. Must be an exact match if supplied.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "resellerId",
          "in" : "query",
          "description" : "Unique ID of the reseller entered for the campaign. Must be an exact match if supplied.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "autoRenewal",
          "in" : "query",
          "description" : "Whether auto-renew is enabled for the campaign.",
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "tag",
          "in" : "query",
          "description" : "One or more tags that have been applied to the campaign.",
          "schema" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The requested page of the result.",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "description" : "<p>The number of records to return per page in the result.</p><p><i>Max: 50</i></p>",
          "schema" : {
            "maximum" : 50,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CampaignRecordSet_CSP"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign" : {
      "get" : {
        "tags" : [ "Campaign" ],
        "summary" : "Deprecated. Search campaigns you have registered",
        "description" : "<p>This endpoint will be removed in a future release. Use GET /campaign/search as a replacement.\n   If only searching for mock campaigns, use GET /campaign/mock as a replacement.</p>\n<p>Search for campaigns the CSP has registered by any combination of the available parameters. This operation supports\n   pagination with a maximum of 500 records per fetch. Any field supplied must be an exact match. If no parameters are\n   supplied, a full list of campaigns the CSP has registered will be returned. In the response, if the resellerId property\n   of a campaign is set to R000000, this indicates No Reseller.</p>",
        "operationId" : "listCampaigns",
        "parameters" : [ {
          "name" : "referenceId",
          "in" : "query",
          "description" : "Reference ID. An identifier managed by the CSP.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "brandId",
          "in" : "query",
          "description" : "The unique ID that identifies the brand.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Status of the campaign.",
          "schema" : {
            "type" : "string",
            "enum" : [ "ACTIVE", "EXPIRED" ]
          }
        }, {
          "name" : "usecase",
          "in" : "query",
          "description" : "Use case of the campaign. Must be an exact match if supplied.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "vertical",
          "in" : "query",
          "description" : "Business segment of the campaign. Must be an exact match if supplied.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "resellerId",
          "in" : "query",
          "description" : "Unique ID of the reseller entered for the campaign. Must be an exact match if supplied.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "autoRenewal",
          "in" : "query",
          "description" : "Whether auto-renew is enabled for the campaign.",
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "upstreamCnpId",
          "in" : "query",
          "description" : "Unique ID of the upstream CNP to whom the campaign has been shared.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "tag",
          "in" : "query",
          "description" : "One or more tags that have been applied to the campaign.",
          "schema" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }, {
          "name" : "mock",
          "in" : "query",
          "description" : "Whether returned campaigns are attached to a mock brand. Leaving this parameter as null will return both real and test campaigns.",
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The requested page of the result.",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "description" : "The number of records to return per page in the result.",
          "schema" : {
            "maximum" : 500,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CampaignRecordSet_CSP"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "deprecated" : true,
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/migrateCnp/{upstreamCnpId}" : {
      "post" : {
        "tags" : [ "CNP Migration" ],
        "summary" : "Initiate a CNP migration on a campaign",
        "description" : "Begins the migration of a campaign to a new upstream connectivity partner. Only the initiator of a CNP migration is allowed to cancel it.",
        "operationId" : "initiateCnpMigration",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "upstreamCnpId",
          "in" : "path",
          "description" : "Unique identifier of an upstream connectivity partner.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>518: Campaign is expired.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>592: Operation declined. CNP migration cannot be initiated due to data constraints, such as the brand or campaign being suspended or if a migration for the campaign is already in progress.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/nudge" : {
      "post" : {
        "tags" : [ "Campaign" ],
        "summary" : "Send a notice to a CNP in the connectivity chain to take action",
        "description" : "Sends a notification to a CNP in the connectivity chain to take action on the campaign. Useful if\na campaign has been sitting idle in a review state for an extended period of time. The nudgeIntent\nin the request body indicates what action is awaiting review. Available options include:\n<ul>\n<li><b>APPEAL_REJECTION:</b> The campaign is in a rejected status awaiting an appeal in the upstream\nconnectivity chain. For example, given the following connectivity chain: CSP1 → CNP1 → DCA1, where DCA1\nrejects the campaign. The campaign will sit in the CNP1 queue in a rejected status. CSP1 would update the\ncampaign and then send a nudge notification to CNP1 to review the appeal and reshare it with DCA1.</li>\n<li><b>REVIEW:</b> The campaign is in a review status awaiting a party in the upstream connectivity\nchain to take  action. For example, given the following connectivity chain: CSP1 → CNP1 → CNP2, where\nCNP2 has not reviewed a pending campaign for an extended period of time. CSP1 can send a nudge notification\nto CNP2 to review the campaign.</li>\n</ul>\nThe response includes a message on whether the nudge was successful.",
        "operationId" : "nudgeCampaignCnp",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Contains the <code>nudgeIntent</code> attribute and a short description to send with the notification.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/CampaignNudge"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string",
                  "example" : {
                    "message" : "Nudge successful"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign or campaign sharing record not found.</li>\n<li>518: Campaign is expired.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>592: Invalid nudge operation (e.g., trying to nudge a campaign where you are not the CSP).</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/2faEmail" : {
      "post" : {
        "tags" : [ "Brand" ],
        "summary" : "Resend a 2FA email for a non-SOLE_PROPRIETOR brand",
        "description" : "Resends a 2FA email for a brand that has not completed Authentication+ or RCS verification. Used if\na brand business contact has lost their original 2FA email or if the email has expired. Can only be\ntriggered if the brand initiated the 2FA verification process within the last 30 days. If multiple\n2FA emails are sent to the same email address, TCR will rate limit the sending to one every two hours.\nRefer to the <a href = \"https://www.campaignregistry.com/Assets/External-Auth+ProductSpecsDoc.pdf\">Authentication+ documentation</a>\nfor more information.",
        "operationId" : "postBrand2faEmail",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "vettingClass",
          "in" : "query",
          "description" : "The vetting class for resending 2FA Email. Example: RCS, AUTHPLUS",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand record not found.</li>\n<li>565: Unable to resend 2FA. Please submit brand for re-vet.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>592: Operation declined. 2FA verification is already complete.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaignBuilder/brand/{brandId}" : {
      "get" : {
        "tags" : [ "Campaign Builder" ],
        "summary" : "Check a brand’s qualification for all use cases",
        "description" : "Determines if a brand is qualified to run a campaign for all use case types across participating MNOs. If the brand qualifies to run a campaign on one or more MNOs, the response will return any campaign restrictions (e.g., no embedded link s), process requirements (e.g., manual review by the MNO), pricing details (e.g., a surcharge), and any MNO-specific attributes (e.g., message class, which is unique to AT&T).\nIf the brand is not qualified to run a particular use case on an MNO, the CSP should consider having the brand externally vetted in order to receive access. For example, if access to the political use case is necessary, the CSP can consider requesting a political vet on the brand.\nIf no query parameter is included in the request, then only 10DLC use cases will be considered. Specify RCS as a query parameter to search RCS use cases.\n\nThe response will contain the following properties:\n<table border=\"1\">\n    <thead>\n        <tr>\n            <th>Property</th>\n            <th>Data Type</th>\n            <th>Description</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td>usecase</td>\n            <td><code>string</code></td>\n            <td>The name of the use case.</td>\n        </tr>\n        <tr>\n            <td>monthlyFee</td>\n            <td><code>decimal</code></td>\n            <td>The registration fee for the campaign, charged monthly. The campaign will auto-renew unless the renewal is canceled or the campaign is deactivated.</td>\n        </tr>\n        <tr>\n            <td>quarterlyFee</td>\n            <td><code>decimal</code></td>\n            <td>The registration fee for the campaign, charged once every three months. The campaign will auto-renew unless the renewal is canceled or the campaign is deactivated.</td>\n        </tr>\n        <tr>\n            <td>annualFee</td>\n            <td><code>decimal</code></td>\n            <td>The registration fee for the campaign, charged annually. The campaign will auto-renew unless the renewal is canceled or the campaign is deactivated.</td>\n        </tr>\n        <tr>\n            <td>minSubUsecase</td>\n            <td><code>integer</code></td>\n            <td>The minimum number of sub-use cases required when registering a campaign under the specified use case.</td>\n        </tr>\n        <tr>\n            <td>maxSubUsecase</td>\n            <td><code>integer</code></td>\n            <td>The maximum number of sub-use cases allowed when registering a campaign under the desired use case. If the value is 0, then no sub-use case is required.</td>\n        </tr>\n        <tr>\n            <td>mnoMetadata</td>\n            <td><code>array</code></td>\n            <td>Map of MNO metadata where key is the “networkId” of the MNO and value is the MNO’s metadata.</td>\n        </tr>\n    </tbody>\n</table>\nThe MNO metadata property will contain the following attributes:\n<table border=\"1\">\n    <thead>\n        <tr>\n            <th>Property</th>\n            <th>MNO Specific</th>\n            <th>Data Type</th>\n            <th>Description</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td>mno</td>\n            <td>All MNOs</td>\n            <td><code>string</code></td>\n            <td>Name of the MNO.</td>\n        </tr>\n        <tr>\n            <td>mnoSupport</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If false, the specified use case is not supported by the MNO.</td>\n        </tr>\n        <tr>\n            <td>mnoReview</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If true, the submitted campaign is subject to a manual MNO review process. Some MNOs provide campaign review statuses via TCR APIs.</td>\n        </tr>\n        <tr>\n            <td>qualify</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If false, the brand does not qualify for the desired use case on the MNO. The CSP should consider getting the brand vetted by one of TCR’s approved external vetting providers.</td>\n        </tr>\n        <tr>\n            <td>minMsgSamples</td>\n            <td>All MNOs</td>\n            <td><code>integer</code></td>\n            <td>The minimum number of message samples required by the MNO for the desired use case.</td>\n        </tr>\n        <tr>\n            <td>reqSubscriberOptin</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If true, the MNO requires the subscriber to opt-into the campaign before the message can be sent. The opt-in mechanism can be a mobile or web opt-in.</td>\n        </tr>\n        <tr>\n            <td>reqSubscriberOptout</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If true, the MNO requires a campaign to support an opt-out mechanism through stop keywords such as STOP or QUIT. Upon receiving a STOP message from a subscriber, the campaign must immediately stop sending messages to the subscriber.</td>\n        </tr>\n        <tr>\n            <td>reqSubscriberHelp</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If true, the MNO requires the campaign to support an assistance mechanism through help key words such as HELP or INFO.</td>\n        </tr>\n        <tr>\n            <td>noEmbeddedLink</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If true, the MNO does not allow a call-to-action link/URL to be embedded in messages sent to the subscriber.</td>\n        </tr>\n        <tr>\n            <td>noEmbeddedPhone</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If true, the MNO forbids call-to-action phone numbers to be embedded in messages sent to the subscriber.</td>\n        </tr>\n        <tr>\n            <td>msgClass</td>\n            <td>AT&T</td>\n            <td><code>string</code></td>\n            <td>Message class assigned to the campaign by AT&T. Please refer to the AT&T 10DLC guide for a complete list of available message classes and definitions.</td>\n        </tr>\n        <tr>\n            <td>tpm</td>\n            <td>AT&T</td>\n            <td><code>integer</code></td>\n            <td>SMS message TPM (throughput per minute) assigned to the brand for the desired use case.</td>\n        </tr>\n        <tr>\n            <td>mmsTpm</td>\n            <td>AT&T</td>\n            <td><code>integer</code></td>\n            <td>MMS message TPM (throughput per minute) assigned to the brand for the desired use case.</td>\n        </tr>\n        <tr>\n            <td>tpmScope</td>\n            <td>AT&T</td>\n            <td><code>string</code></td>\n            <td>TPM restriction scope. Possible values include: CAMPAIGN or PHONE_NUMBER. If the scope is PHONE_NUMBER, then the TPM rate-limiting is imposed separately for each phone number provisioned to the campaign. A CAMPAIGN level scope indicates rate-limiting imposed for the entire campaign.</td>\n        </tr>\n        <tr>\n            <td>brandTier</td>\n            <td>T-Mobile</td>\n            <td><code>string</code></td>\n            <td>Daily message volume assigned to the campaign based on brand tier or brand qualification. The daily volume restriction applies to brands across all campaigns and CSPs. Please contact your message service provider for updated T-Mobile terms. Possible values: LOW, LOWER_MID, UPPER_MID, TOP</td>\n        </tr>\n        <tr>\n            <td>brandDailyCap</td>\n            <td>T-Mobile</td>\n            <td><code>integer</code></td>\n            <td>The number of messages allowed per day on the T-Mobile network. If the <code>brandTier</code> attribute is UNCAPPED, then this will be NULL.</td>\n        </tr>\n    </tbody>\n</table>\n",
        "operationId" : "qualifyAllUsecases",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "channelId",
          "in" : "query",
          "description" : "If not provided, defaults to searching 10DLC use cases. Specify RCS to check RCS campaign use cases.",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/UsecaseMetadata"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand record not found.</li>\n<li>527: Brand is in a PENDING state waiting for brand scoring to complete. The webhook BRAND_IDENTITY_STATUS_UPDATE event will be sent when the brand is scored and ready for campaign registration.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaignBuilder/brand/{brandId}/usecase/{usecase}" : {
      "get" : {
        "tags" : [ "Campaign Builder" ],
        "summary" : "Check a brand’s qualification for a specific use case",
        "description" : " Determines if a brand is qualified to run a campaign for a specified use case across participating MNOs.  If the brand qualifies to run a campaign on one or more MNOs, the response will return any campaign restrictions  (e.g., no embedded links), process requirements (e.g., manual review by the MNO), pricing details (e.g., a surcharge),  and any MNO-specific attributes (e.g., message class, which is unique to AT&T).\n If the brand is not qualified to run the use case on an MNO, the CSP should consider having the brand externally vetted  in order to receive access. For example, if access to the political use case is necessary, the CSP can consider requesting  a political vet on the brand.\n If no query parameter is included in the request, then only 10DLC use cases will be searched. Specify RCS as  a query parameter to search RCS use cases.\n\n The response will contain the following properties:\n<table border=\"1\">\n     <thead>\n         <tr>\n             <th>Property</th>\n             <th>Data Type</th>\n             <th>Description</th>\n         </tr>\n     </thead>\n     <tbody>\n         <tr>\n             <td>usecase</td>\n             <td><code>string</code></td>\n             <td>The name of the use case.</td>\n         </tr>\n         <tr>\n             <td>monthlyFee</td>\n             <td><code>decimal</code></td>\n             <td>The registration fee for the campaign, charged monthly. The campaign will auto-renew unless the renewal is canceled or the campaign is deactivated.</td>\n         </tr>\n         <tr>\n             <td>quarterlyFee</td>\n             <td><code>decimal</code></td>\n             <td>The registration fee for the campaign, charged once every three months. The campaign will auto-renew unless the renewal is canceled or the campaign is deactivated.</td>\n         </tr>\n         <tr>\n             <td>annualFee</td>\n             <td><code>decimal</code></td>\n             <td>The registration fee for the campaign, charged annually. The campaign will auto-renew unless the renewal is canceled or the campaign is deactivated.</td>\n         </tr>\n         <tr>\n             <td>minSubUsecase</td>\n             <td><code>integer</code></td>\n             <td>The minimum number of sub-use cases required when registering a campaign under the specified use case.</td>\n         </tr>\n         <tr>\n             <td>maxSubUsecase</td>\n             <td><code>integer</code></td>\n             <td>The maximum number of sub-use cases allowed when registering a campaign under the desired use case. If the value is 0, then no sub-use case is required.</td>\n         </tr>\n         <tr>\n             <td>mnoMetadata</td>\n             <td><code>array</code></td>\n             <td>Map of MNO metadata where key is the “networkId” of the MNO and value is the MNO’s metadata.</td>\n         </tr>\n     </tbody>\n </table>\n The MNO metadata property will contain the following attributes:\n <table border=\"1\">\n     <thead>\n         <tr>\n             <th>Property</th>\n             <th>MNO Specific</th>\n             <th>Data Type</th>\n             <th>Description</th>\n         </tr>\n     </thead>\n     <tbody>\n         <tr>\n             <td>mno</td>\n             <td>All MNOs</td>\n             <td><code>string</code></td>\n             <td>Name of the MNO.</td>\n         </tr>\n         <tr>\n             <td>mnoSupport</td>\n             <td>All MNOs</td>\n             <td><code>boolean</code></td>\n             <td>If false, the specified use case is not supported by the MNO.</td>\n         </tr>\n         <tr>\n             <td>mnoReview</td>\n             <td>All MNOs</td>\n             <td><code>boolean</code></td>\n             <td>If true, the submitted campaign is subject to a manual MNO review process. Some MNOs provide campaign review statuses via TCR APIs.</td>\n         </tr>\n         <tr>\n             <td>qualify</td>\n             <td>All MNOs</td>\n             <td><code>boolean</code></td>\n             <td>If false, the brand does not qualify for the desired use case on the MNO. The CSP should consider getting the brand vetted by one of TCR’s approved external vetting providers.</td>\n         </tr>\n         <tr>\n             <td>minMsgSamples</td>\n             <td>All MNOs</td>\n             <td><code>integer</code></td>\n             <td>The minimum number of message samples required by the MNO for the desired use case.</td>\n         </tr>\n         <tr>\n             <td>reqSubscriberOptin</td>\n             <td>All MNOs</td>\n             <td><code>boolean</code></td>\n             <td>If true, the MNO requires the subscriber to opt-into the campaign before the message can be sent. The opt-in mechanism can be a mobile or web opt-in.</td>\n         </tr>\n         <tr>\n             <td>reqSubscriberOptout</td>\n             <td>All MNOs</td>\n             <td><code>boolean</code></td>\n             <td>If true, the MNO requires a campaign to support an opt-out mechanism through stop keywords such as STOP or QUIT. Upon receiving a STOP message from a subscriber, the campaign must immediately stop sending messages to the subscriber.</td>\n         </tr>\n         <tr>\n             <td>reqSubscriberHelp</td>\n             <td>All MNOs</td>\n             <td><code>boolean</code></td>\n             <td>If true, the MNO requires the campaign to support an assistance mechanism through help key words such as HELP or INFO.</td>\n         </tr>\n         <tr>\n             <td>noEmbeddedLink</td>\n             <td>All MNOs</td>\n             <td><code>boolean</code></td>\n             <td>If true, the MNO does not allow a call-to-action link/URL to be embedded in messages sent to the subscriber.</td>\n         </tr>\n         <tr>\n             <td>noEmbeddedPhone</td>\n             <td>All MNOs</td>\n             <td><code>boolean</code></td>\n             <td>If true, the MNO forbids call-to-action phone numbers to be embedded in messages sent to the subscriber.</td>\n         </tr>\n         <tr>\n             <td>msgClass</td>\n             <td>AT&T</td>\n             <td><code>string</code></td>\n             <td>Message class assigned to the campaign by AT&T. Please refer to the AT&T 10DLC guide for a complete list of available message classes and definitions.</td>\n         </tr>\n         <tr>\n             <td>tpm</td>\n             <td>AT&T</td>\n             <td><code>integer</code></td>\n             <td>SMS message TPM (throughput per minute) assigned to the brand for the desired use case.</td>\n         </tr>\n         <tr>\n             <td>mmsTpm</td>\n             <td>AT&T</td>\n             <td><code>integer</code></td>\n             <td>MMS message TPM (throughput per minute) assigned to the brand for the desired use case.</td>\n         </tr>\n         <tr>\n             <td>tpmScope</td>\n             <td>AT&T</td>\n             <td><code>string</code></td>\n             <td>TPM restriction scope. Possible values include: CAMPAIGN or PHONE_NUMBER. If the scope is PHONE_NUMBER, then the TPM rate-limiting is imposed separately for each phone number provisioned to the campaign. A CAMPAIGN level scope indicates rate-limiting imposed for the entire campaign.</td>\n         </tr>\n         <tr>\n             <td>brandTier</td>\n             <td>T-Mobile</td>\n             <td><code>string</code></td>\n             <td>Daily message volume assigned to the campaign based on brand tier or brand qualification. The daily volume restriction applies to brands across all campaigns and CSPs. Please contact your message service provider for updated T-Mobile terms. Possible values: LOW, LOWER_MID, UPPER_MID, TOP</td>\n         </tr>\n         <tr>\n             <td>brandDailyCap</td>\n             <td>T-Mobile</td>\n             <td><code>integer</code></td>\n             <td>The number of messages allowed per day on the T-Mobile network. If the <code>brandTier</code> attribute is UNCAPPED, then this will be NULL.</td>\n         </tr>\n     </tbody>\n </table>\n",
        "operationId" : "qualifySingleUsecase",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "usecase",
          "in" : "path",
          "description" : "The campaign use case name (e.g., 2FA).",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "channelId",
          "in" : "query",
          "description" : "If not provided, defaults to searching 10DLC use cases. Specify RCS to check RCS campaign use cases.",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UsecaseMetadata"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand record not found.</li>\n<li>527: Brand is in a PENDING state waiting for brand scoring to complete. The webhook BRAND_IDENTITY_STATUS_UPDATE event will be sent when the brand is scored and ready for campaign registration.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/resubmit" : {
      "put" : {
        "tags" : [ "Campaign" ],
        "summary" : "Resubmit a campaign to specified MNO IDs",
        "description" : "This endpoint is typically used for two purposes:\n<ol>\n<li>A campaign is missing an MNO campaign operation record for one or more networks, so the CSP wants to\nbackfill those missing records.</li>\n<li>The Carrier Rules Engine (CRE) for specific carriers were updated, which can grant brands better terms\nfor their campaigns. In this instance, the CSP wants to update existing campaigns to reflect newly assigned\nmessage classes. Note: Running this endpoint could potentially downgrade campaign business terms.</li>\n</ol>\nThe response will contain a campaign ID and MNO metadata associated with it.\n<table border=\"1\">\n  <thead>\n    <tr>\n      <th>Property</th>\n      <th>Data Type</th>\n      <th>Description</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>campaignId</td>\n      <td><code>string</code></td>\n      <td>The unique ID that identifies the campaign. This identifier is necessary to update nnSR phone number provisioning.</td>\n    </tr>\n    <tr>\n      <td>mnoMetadata</td>\n      <td><code>array</code></td>\n      <td>Key-value pairs of metadata associated with the MNO.</td>\n    </tr>\n  </tbody>\n</table>\n<b>Possible MNO Metadata</b>\n<table border=\"1\">\n  <thead>\n    <tr>\n      <th>Property</th>\n      <th>MNO Specific</th>\n      <th>Data Type</th>\n      <th>Description</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>mno</td>\n      <td>ALL MNOs</td>\n      <td><code>string</code></td>\n      <td>Name of the MNO.</td>\n    </tr>\n    <tr>\n      <td>mnoSupport</td>\n      <td>All MNOs</td>\n      <td><code>boolean</code></td>\n      <td>If false, the specified use case is not supported by the MNO.</td>\n    </tr>\n    <tr>\n      <td>mnoReview</td>\n      <td>All MNOs</td>\n      <td><code>boolean</code></td>\n      <td>If true, the submitted campaign is subject to a manual MNO review process. Some MNOs provide\n      campaign review statuses via TCR APIs.</td>\n    </tr>\n    <tr>\n      <td>qualify</td>\n      <td>All MNOs</td>\n      <td><code>boolean</code></td>\n      <td>If false, the brand does not qualify for the desired use case on the MNO. The CSP should consider\n      getting the brand vetted by one of TCR’s approved external vetting providers.</td>\n    </tr>\n    <tr>\n      <td>minMsgSamples</td>\n      <td>All MNOs</td>\n      <td><code>integer</code></td>\n      <td>The minimum number of message samples required by the MNO for the desired use case.</td>\n    </tr>\n    <tr>\n      <td>reqSubscriberOptin</td>\n      <td>All MNOs</td>\n      <td><code>boolean</code></td>\n      <td>If true, the MNO requires the subscriber to opt-into the campaign before the message can be sent.\n      The opt-in mechanism can be a mobile or web opt-in.</td>\n    </tr>\n    <tr>\n      <td>reqSubscriberOptout</td>\n      <td>All MNOs</td>\n      <td><code>boolean</code></td>\n      <td>If true, the MNO requires a campaign to support an opt-out mechanism through stop keywords such\n      as STOP or QUIT. Upon receiving a STOP message from a subscriber, the campaign must immediately stop\n      sending messages to the subscriber.</td>\n    </tr>\n    <tr>\n      <td>reqSubscriberHelp</td>\n      <td>All MNOs</td>\n      <td><code>boolean</code></td>\n      <td>If true, the MNO requires the campaign to support an assistance mechanism through help key words\n      such as HELP or INFO.</td>\n    </tr>\n    <tr>\n      <td>noEmbeddedLink</td>\n      <td>All MNOs</td>\n      <td><code>boolean</code></td>\n      <td>If true, the MNO does not allow a call-to-action link/URL to be embedded in messages sent to the\n      subscriber.</td>\n    </tr>\n    <tr>\n      <td>noEmbeddedPhone</td>\n      <td>All MNOs</td>\n      <td><code>boolean</code></td>\n      <td>If true, the MNO forbids call-to-action phone numbers to be embedded in messages sent to the\n      subscriber.</td>\n    </tr>\n    <tr>\n      <td>msgClass</td>\n      <td>AT&T</td>\n      <td><code>string</code></td>\n      <td>Message class assigned to the campaign by AT&T. Please refer to the AT&T 10DLC guide for a\n      complete list of available message classes and definitions.</td>\n    </tr>\n    <tr>\n      <td>tpm</td>\n      <td>AT&T</td>\n      <td><code>integer</code></td>\n      <td>SMS message TPM (throughput per minute) assigned to the brand for the desired use case.</td>\n    </tr>\n    <tr>\n      <td>mmsTpm</td>\n      <td>AT&T</td>\n      <td><code>integer</code></td>\n      <td>MMS message TPM (throughput per minute) assigned to the brand for the desired use case.</td>\n    </tr>\n    <tr>\n      <td>tpmScope</td>\n      <td>AT&T</td>\n      <td><code>string</code></td>\n      <td>TPM restriction scope. Possible values include: CAMPAIGN or PHONE_NUMBER. If the scope is\n      PHONE_NUMBER, then the TPM rate-limiting is imposed separately for each phone number provisioned to\n      the campaign. A CAMPAIGN level scope indicates rate-limiting imposed for the entire campaign.</td>\n    </tr>\n    <tr>\n      <td>brandTier</td>\n      <td>T-Mobile</td>\n      <td><code>string</code></td>\n      <td>Daily message volume assigned to the campaign based on brand tier or brand qualification. The\n      daily volume restriction applies to brands across all campaigns and CSPs. Please contact your message\n      service provider for updated T-Mobile terms. Possible values: LOW, LOWER_MID, UPPER_MID, TOP</td>\n    </tr>\n    <tr>\n      <td>brandDailyCap</td>\n      <td>T-Mobile</td>\n      <td><code>integer</code></td>\n      <td>The number of messages allowed per day on the T-Mobile network. If the <code>brandTier</code>\n      attribute is UNCAPPED, then this will be NULL.</td>\n    </tr>\n  </tbody>\n</table>",
        "operationId" : "resubmitCampaign",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Contains one or more MNO IDs against which to resubmit the campaign.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ResubmitCampaign"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CampaignSubmissionResponse"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>509: Campaign resubmission request rejected. This could be due to:\n<ul>\n<li>Brand not qualifying for the desired use case due to a low brand identity score or a mandatory external vetting requirement.</li>\n<li>Campaign submission is incomplete. Information required by some MNOs is missing (e.g., not enough message samples required by the use case).</li>\n<li>Campaign submission does not comply with MNO mandates (e.g., some use cases require an opt-out).</li>\n</ul>\n</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>591: Temporary system error. Wait 30 seconds and try again.</li>\n<li>630: Temporary system error. Number provisioning provider (nnSR) cannot accept requests at this time. Wait 30 seconds and try again.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/revet" : {
      "put" : {
        "tags" : [ "Brand" ],
        "summary" : "Submit a revet for a brand",
        "description" : "Revetting a brand is necessary if a CSP changes brand information following initial registration. The revet\nverifies the brand’s identity through a third party external vetting provider. If successful, the brand’s\nidentity status is changed to VERIFIED (or VETTED_VERIFIED in some instances). Revets should only be used\nto validate changes to brand information following a successful registration (or to correct information if,\nfor example, an incorrect EIN was entered). If a brand wants to verify attributes that don’t appear after\nregistration (such as a missing tax exempt status or government entity flag), they should submit a brand\nappeal and submit additional documentation to support their claim.",
        "operationId" : "revetBrand",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Brand"
                }
              }
            }
          },
          "202" : {
            "description" : "Accepted, but pending internal vetting.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Brand"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand record not found.</li>\n<li>525: Revet not allowed with identical brand information. Update the brand profile before requesting a re-vet.</li>\n<li>527: Brand registration is pending.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>620: External vetting provider cannot accept requests at this time. Wait 30 seconds and try again.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/smsOtp" : {
      "put" : {
        "tags" : [ "Brand" ],
        "summary" : "Verify an OTP PIN (Sole Proprietor only)",
        "description" : "Only used for SOLE_PROPRIETOR entity types. Verifies a one-time password (OTP) sent to the brand’s\n<code>mobilePhone</code> property. Upon successful OTP verification, the brand is allowed to register\ncampaigns.\n<b>Additional Information</b>\n<ul>\n<li>Sole Proprietor OTP PINs expire after 24 hours.</li>\n<li>Resending an OTP can only be done by the CSP. API users can use the PUT /brand/smsOTP endpoint.</li>\n<li>\nUpon completion of OTP verification:\n<ul>\n<li>A CSP will receive a BRAND_OTP_VERIFIED webhook event.</li>\n<li>The brand’s identity status will change to VERIFIED.</li>\n</ul>\n</li>\n</ul>",
        "operationId" : "verifyBrandOtp",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Contains the OTP PIN sent to the mobile phone number specified in the brand’s <code>mobilePhone</code> parameter.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/VerifySmsOtpRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n        <ul>\n        <li>501: Invalid input parameter.</li>\n        <li>502: Brand record not found.</li>\n        <li>506: Invalid status. OTP PIN cannot be sent to a brand with a VERIFIED status.</li>\n        <li>550: Duplicate threshold detected for brand record. Max duplication threshold exceeded for a brand having the same mobilePhone.</li>\n        <li>552: Unrecognized or expired OTP PIN. OTP PINs are only valid for 24 hours.</li>\n        <li>590: TCR internal system error. Please contact TCR support.</li>\n        <li>591: Temporary system error. Wait 30 seconds and try again.</li>\n        </ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Brand" ],
        "summary" : "Trigger an OTP message (Sole Proprietor only)",
        "description" : "Only used for SOLE_PROPRIETOR entity types as part of brand registration. Triggers the generation of a One-Time\nPassword (OTP) sent to the <code>mobilePhone</code> number specified in a brand’s profile. Campaigns cannot\nbe created for the brand until OTP verification is complete.\n<br/><br/> CSPs must include a <code>pinSms</code> message in the request body that contains one of the following variables:\n<ul>\n<li><b>@OTP_PIN@:</b> Replaced with a random PIN generated by TCR.</li>\n<li><b>@OTP_YES@:</b> Replaced with a YES opt-in keyword.</li>\n</ul>\nOptionally, CSPs can also include a <code>successSms</code> in the request body to send a message\nupon successful OTP completion.\n<br/> <br/> <b>Testing Without a US/Canadian Wireless Number</b>\n<br/> <br/>Developers can register a brand via the CSP API with the attribute <code>mock</code> set to <code>true</code>.\nWhen enabled, all SMS OTP messages will be redirected via a webhook with an event type of\nBRAND_MOCK_OTP.\n<br/> <br/> The OTP PIN will be visible in the webhook payload under the property name <code>otpPin</code>.\nFor more information on how to subscribe to webhooks generated by TCR, please see the\n<a href=\"https://www.campaignregistry.com/Assets/Introduction%20to%20the%20CSP%20API.pdf\">Introduction of the CSP API.</a>",
        "operationId" : "sendBrandOtp",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Defines a list of OTP messages sent to the brand’s <code>mobilePhone</code> number. Only <code>pinSms</code> is required.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/SendSmsOtpRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Successful.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SendSmsOtpResponse"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand record not found.</li>\n<li>506: Invalid status. OTP PIN cannot be sent to a brand with a VERIFIED status.</li>\n<li>550: Duplicate threshold detected for brand record. Max duplication threshold exceeded for a brand having the same mobilePhone.</li>\n<li>551: Unsupported number. Only US or Canadian wireless numbers are supported in the brand mobilePhone property.</li>\n<li>552: Unrecognized or expired OTP PIN. OTP PINs are only valid for 24 hours.</li>\n<li>557: Rate limit for OTP attempts exceeded.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>591: Temporary system error. Wait 30 seconds and try again.</li>\n<li>592: Operation declined. SMS OTP using this endpoint is only available for Sole Proprietor entity types.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaign/{campaignId}/sharing/{upstreamCnpId}" : {
      "put" : {
        "tags" : [ "Campaign" ],
        "summary" : "Share a campaign to an upstream connectivity partner",
        "description" : "This endpoint is used to share a campaign to an upstream CNP. The upstream CNP, identified with the\n<code>upstreamCnpId</code> parameter is given a role-based read-only view of campaign properties to\nfacilitate MNO onboarding. The upstream CNP may share the campaign with additional CNPs until a DCA is\nidentified at the end of the chain. Once the campaign is shared by the downstream CNP, the invitation\ncannot be rescinded or changed until the upstream CNP declines the sharing request.",
        "operationId" : "shareCampaign",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "upstreamCnpId",
          "in" : "path",
          "description" : "The unique ID that identifies the upstream connectivity partner.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CampaignSharingStatus"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand or vetting record not found.</li>\n<li>518: Campaign is expired.</li>\n<li>522: Campaign sharing request declined by upstream CNP.</li>\n<li>536: Operation not supported for a mock brand or campaign.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>592: Operation declined. Rescinding a pending or accepted sharing request is not allowed.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/partnerCampaign/{campaignId}/sharing/{upstreamCnpId}" : {
      "put" : {
        "tags" : [ "Partner Campaign" ],
        "summary" : "Share a campaign to an upstream connectivity partner",
        "description" : "Lets a CSP share a campaign with an upstream connectivity partner identified in the upstreamCnpId parameter. The upstream partner will be given a read only view of the campaign’s properties to facilitate MNO onboarding. If the upstream connectivity partner is a CSP, they will be obliged to share the campaign with their own upstream connectivity partner until the campaign reaches a DCA.\n\n<b>Note:</b> Once a campaign is shared to an upstream connectivity partner, the request cannot be rescinded or modified unless the upstream CNP declines the sharing request.",
        "operationId" : "sharePartnerCampaign",
        "parameters" : [ {
          "name" : "campaignId",
          "in" : "path",
          "description" : "The unique ID that identifies the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "upstreamCnpId",
          "in" : "path",
          "description" : "Unique identifier of the upstream partner to whom the CSP is sharing the campaign.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CampaignSharingStatus"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Campaign record not found.</li>\n<li>518: Campaign is expired.</li>\n<li>523: Loop has been detected in the campaign connectivity chain. Another party in the chain has already accepted.</li>\n<li>562: A secondary DCA who is in a PENDING status in the original connectivity chain cannot receive a sharing request in the provisional connectivity chain.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/campaignBuilder" : {
      "post" : {
        "tags" : [ "Campaign Builder" ],
        "summary" : "Create a new campaign for a brand",
        "description" : "Creates a new campaign in TCR. 10DLC and RCS are supported. If the submitted campaign request meets the requirements for at least one MNO, then the campaign is created in TCR and the registration fee will be charged to the CSP account.\n\n<b>Campaign Properties</b>\n\nThe request body should contain metadata about the 10DLC or RCS campaign. Refer to the following table to see supported information for each campaign type (as indicated by the channel). Some information is required for 10DLC, RCS, or both.\n<table border=\"1\">\n    <thead>\n        <tr>\n            <td>Property</td>\n            <td>Description</td>\n            <td>Validation</td>\n            <td>Channels</td>\n            <td>Required</td>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td>actionTriggerMessages</td>\n            <td>A description of consumer actions that will trigger campaign messages.</td>\n            <td>Max length: 2000 characters</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>ageGated</td>\n            <td>Specifies whether the campaign contains age-gated content.</td>\n            <td>Default value: false</td>\n            <td>10DLC, RCS</td>\n            <td>No</td>\n        </tr>\n        <tr>\n            <td>autoRenewal</td>\n            <td>Indicates whether the campaign will automatically renew each billing period.</td>\n            <td>Default value: true</td>\n            <td>10DLC, RCS</td>\n            <td>No</td>\n        </tr>\n        <tr>\n            <td>bannerName</td>\n            <td>Uploaded and verified banner asset associated with the campaign.</td>\n            <td>Must have successfully completed brand asset verification.</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>brandId</td>\n            <td>The unique ID assigned to the brand.</td>\n            <td>Valid brand identifier</td>\n            <td>10DLC, RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>billingCategory</td>\n            <td>CSPs can select the type of RCS campaign that will run. Options include conversational (for messaging campaigns that expect a back-and-forth exchange with consumers)or nonconversational (for messaging campaigns that expect a minimal amount of replies from consumers).</td>\n            <td>Valid billing category such as CONVERSATIONAL or NON_CONVERSATIONAL</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>channelId</td>\n            <td>Intended delivery channel. Defaults to 10DLC if not specified as RCS.</td>\n            <td>Default value: 10DLC</td>\n            <td>10DLC, RCS</td>\n            <td>Only required for RCS.</td>\n        </tr>\n        <tr>\n            <td>color</td>\n            <td>The color to display on various UI elements of the campaign.</td>\n            <td>Standard hex format (e.g., F5F5F5)</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>description</td>\n            <td>A detailed description of the campaign’s purpose.</td>\n            <td>Minimum length: 40 characters\n                Max length: 4096 characters</td>\n            <td>10DLC</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>directLending</td>\n            <td>Specifies whether the campaign will be used by a brand that provides direct lending.</td>\n            <td>Default value: false</td>\n            <td>10DLC, RCS</td>\n            <td>No</td>\n        </tr>\n        <tr>\n            <td>displayName</td>\n            <td>The RCS campaign name.</td>\n            <td>Max length: 40 characters</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>emails</td>\n            <td>An email address to be associated with the campaign. A single email address is required, but multiple emails are supported.</td>\n            <td>Max number: 3</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>emailLabels</td>\n            <td>The label to display next to the associated email address. Labels for multiple email addresses are supported.</td>\n            <td>Max number: 3</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>embeddedLink</td>\n            <td>Specifies whether the campaign is using an embedded link of any kind. Note that public URL shorteners (e.g., bitly, tinyurl) are not accepted.</td>\n            <td>Default value: false</td>\n            <td>10DLC, RCS</td>\n            <td>Optional, although may affect MNO eligibility. Some MNOs may not approve embedded links in messages.</td>\n        </tr>\n        <tr>\n            <td>embeddedLinkSample</td>\n            <td>If using an embedded link, a sample of the link that will be used in the campaign. Note that public URL shorteners (e.g., bitly, tinyurl) are not accepted.</td>\n            <td>Max length: 255 characters</td>\n            <td>10DLC, RCS</td>\n            <td>No</td>\n        </tr>\n        <tr>\n            <td>embeddedPhone</td>\n            <td>Specifies whether the campaign is using an embedded phone number other than the HELP information contact number.</td>\n            <td>Default value: false</td>\n            <td>10DLC, RCS</td>\n            <td>Optional, although may affect MNO eligibility. Some MNOs may not approve embedded phone numbers in messages.</td>\n        </tr>\n        <tr>\n            <td>helpMessage</td>\n            <td>Sample help message that would be sent to the subscriber.</td>\n            <td>Minimum length: 20 characters:\n                Max length: 1024 characters</td>\n            <td>10DLC, RCS</td>\n            <td>Required if <code>subscriberHelp</code> is set to true. May affect MNO eligibility.</td>\n        </tr>\n        <tr>\n            <td>helpKeywords</td>\n            <td>A list of keywords a subscriber can use to get help or more information from the campaign. Supports keyword phrases with the use of spaces in each entry.</td>\n            <td>Default value: HELP\n                Max length: 255 characters</td>\n            <td>10DLC, RCS</td>\n            <td>Required if <code>subscriberHelp</code> is set to true. May affect MNO eligibility.</td>\n        </tr>\n        <tr>\n            <td>hostingRegion</td>\n            <td>Where the RCS campaign will run.</td>\n            <td>Valid region such as NORTH_AMERICA, EUROPE, or ASIA_PACIFIC</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>logoName</td>\n            <td>Uploaded and verified logo asset associated with the campaign.</td>\n            <td>Must have successfully completed brand asset verification.</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>messageFlow</td>\n            <td>Describes how a subscriber would opt-in to the campaign.</td>\n            <td>Minimum length: 40 characters:\n                Max length: 4096 characters</td>\n            <td>10DLC</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>messageTypes</td>\n            <td>A high-level description of the types of messages that will be sent.</td>\n            <td>Max length: 2000 characters</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>mnoIds</td>\n            <td>The unique identifiers of specific MNOs that the campaign wants to use. See the PUT /campaign/{campaignId}/resubmit endpoint to resubmit a campaign to a specific MNO.</td>\n            <td>Valid MNO network IDs</td>\n            <td>10DLC, RCS</td>\n            <td>No</td>\n        </tr>\n        <tr>\n            <td>numberPool</td>\n            <td>Indicates whether the campaign is using more than 50 phone numbers in a campaign. Some network providers require this information, as it necessitates a different provisioning process.</td>\n            <td>Default value: false</td>\n            <td>10DLC</td>\n            <td>No</td>\n        </tr>\n        <tr>\n            <td>optinFlow</td>\n            <td>A description of how consumers give consent to receive the messaging campaign.</td>\n            <td>Max length: 2000 characters</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>optinKeywords</td>\n            <td>A list of keywords a subscriber uses to opt-in to the campaign. Supports keyword phrases with the use of spaces in each entry.</td>\n            <td>Max length: 255 characters</td>\n            <td>10DLC, RCS</td>\n            <td>Required if <code>subscriberOptIn</code> is set to true. May affect MNO eligibility.</td>\n        </tr>\n        <tr>\n            <td>optinMessage</td>\n            <td>Sample of a message sent to the  subscriber when they opt-in.</td>\n            <td>Minimum length: 20 characters:\n                Max length: 1024 characters</td>\n            <td>10DLC, RCS</td>\n            <td>Required if <code>subscriberOptIn</code> is set to true. May affect MNO eligibility.</td>\n        </tr>\n        <tr>\n            <td>optoutFlow</td>\n            <td>A description of how consumers can tell the brand to stop sending campaign messages.</td>\n            <td>Max length: 2000 characters</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>optoutKeywords</td>\n            <td>A list of keywords a subscriber uses to opt-out of the campaign. Supports keyword phrases with the use of spaces in each entry.</td>\n            <td>Default value: STOP\n                Max length: 255 characters</td>\n            <td>10DLC, RCS</td>\n            <td>Required if <code>subscriberOptOut</code> is set to true. May affect MNO eligibility.</td>\n        </tr>\n        <tr>\n            <td>optoutMessage</td>\n            <td>Sample of a message sent to the  subscriber when they opt-out.</td>\n            <td>Minimum length: 20 characters:\n                Max length: 1024 characters</td>\n            <td>10DLC, RCS</td>\n            <td>Required if <code>subscriberOptOut</code> is set to true. May affect MNO eligibility.</td>\n        </tr>\n        <tr>\n            <td>phones</td>\n            <td>A phone number to be associated with the campaign. A single phone number is required, but multiple numbers are supported.</td>\n            <td>Max number: 3</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>phoneLabels</td>\n            <td>The label to display next to the associated phone number. Labels for multiple phone numbers are supported.</td>\n            <td>Max number: 3</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>privacyPolicyLink</td>\n            <td>A link to the campaign’s privacy policy page.</td>\n            <td>Max length: 2048 characters</td>\n            <td>10DLC, RCS</td>\n            <td>Only required for RCS.</td>\n        </tr>\n        <tr>\n            <td>referenceId</td>\n            <td>A unique reference identifier for the campaign.</td>\n            <td>Max length: 50 characters</td>\n            <td>10DLC, RCS</td>\n            <td>No</td>\n        </tr>\n        <tr>\n            <td>resellerId</td>\n            <td>The unique ID assigned to a reseller. Used to indicate if an additional party sits between the brand and the CSP. If set to a valid reseller, can only be changed to R000000 to indicate No Reseller.\n                Once code R000000 is entered, it cannot be changed.</td>\n            <td>Valid reseller identifier\n                Max length: 8</td>\n            <td>10DLC, RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>sample[1-5]</td>\n            <td>Sample messages that are representative of messages sent as part of the campaign.</td>\n            <td>Minimum length: 20 characters:\n                Max length: 1024 characters</td>\n            <td>10DLC, RCS</td>\n            <td>Optional, although the number of samples may affect MNO eligibility.</td>\n        </tr>\n        <tr>\n            <td>screenshotUrl</td>\n            <td>A hosted image that pertains to the campaign.</td>\n            <td>Must be publicly accessible and use the HTTPS protocol.</td>\n            <td>RCS</td>\n            <td>No</td>\n        </tr>\n        <tr>\n            <td>shortDescription</td>\n            <td>A high-level overview that describes what the campaign is about</td>\n            <td>Max length: 100 characters</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>subscriberHelp</td>\n            <td>Indicates whether the campaign has a help system for subscribers (e.g., keywords such as HELP or INFO).</td>\n            <td>Default value: false</td>\n            <td>10DLC, RCS</td>\n            <td>Optional, although may affect MNO eligibility.</td>\n        </tr>\n        <tr>\n            <td>subscriberOptIn</td>\n            <td>Indicates whether the campaign requires subscriber opt-in before sending messages.</td>\n            <td>Default value: false</td>\n            <td>10DLC, RCS</td>\n            <td>Optional, although may affect MNO eligibility.</td>\n        </tr>\n        <tr>\n            <td>subscriberOptOut</td>\n            <td>Indicates whether the campaign has an opt-out system for subscribers (e.g., keywords such as STOP or QUIT).</td>\n            <td>Default value: false</td>\n            <td>10DLC, RCS</td>\n            <td>Optional, although may affect MNO eligibility.</td>\n        </tr>\n        <tr>\n            <td>subUsecases</td>\n            <td>Some use cases allow CSPs to specify an additional sub-use case. Sub-use cases help MNOs determine the purpose of a campaign.</td>\n            <td>Valid sub-use case names</td>\n            <td>10DLC</td>\n            <td>Required for specific use cases.</td>\n        </tr>\n        <tr>\n            <td>tag</td>\n            <td>List of tags associated with the campaign. Can be used as an organizational system that helps when searching for the campaign.</td>\n            <td>Max length: 255 characters</td>\n            <td>10DLC, RCS</td>\n            <td>No</td>\n        </tr>\n        <tr>\n            <td>technicalContactEmail</td>\n            <td>Email address of the brand technical contact.</td>\n            <td>Max length: 100 characters</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>technicalContactJobTitle</td>\n            <td>Job title of the brand technical contact.</td>\n            <td>Max length: 50 characters</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>technicalContactName</td>\n            <td>Name of a brand contact that can be reached in the event of technical difficulties with the RCS campaign.</td>\n            <td>Max length: 50 characters</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>termsAndConditions</td>\n            <td>Indicates that the registering CSP agrees to TCR’s terms and conditions.</td>\n            <td>Default value: true</td>\n            <td>10DLC</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>termsAndConditionsLink</td>\n            <td>A link to the campaign’s terms and conditions page.</td>\n            <td>Max length: 2048 characters</td>\n            <td>10DLC, RCS</td>\n            <td>Only required for RCS.</td>\n        </tr>\n        <tr>\n            <td>usecase</td>\n            <td>The campaign’s intended use (e.g., 2FA, Customer Care, Marketing).</td>\n            <td>Valid use case names</td>\n            <td>10DLC, RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>videoUrl</td>\n            <td>A hosted video that pertains to the campaign.</td>\n            <td>Must be publicly accessible and use the HTTPS protocol.</td>\n            <td>RCS</td>\n            <td>No</td>\n        </tr>\n        <tr>\n            <td>websites</td>\n            <td>A website URL to be associated with the campaign. A single website URL is required, but multiple URLs are supported.</td>\n            <td>Must be publicly accessible and use the HTTPS protocol. Max number: 3</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n        <tr>\n            <td>websiteLabels</td>\n            <td>The label to display next to the associated website. Labels for multiple websites are supported.</td>\n            <td>Max number: 3</td>\n            <td>RCS</td>\n            <td>Yes</td>\n        </tr>\n    </tbody>\n</table>\n\nNewly created campaigns (10DLC or RCS) are assigned a unique campaign_id which will appear in the response. Also,  any MNO metadata pertaining to the submitted campaign will be returned. Refer to the table below for information contained in the response.\n\nFor 10DLC campaigns, standard use case campaigns are approved upon submission while some special use case campaigns require manual approval by MNOs. CSPs can query a 10DLC campaign’s MNO operational status via the GET /campaign/{campaignId}/operationStatus endpoint. RCS campaign use cases are always approved upon submission.\n\n10DLC campaigns created for mock brands are not functional campaigns. They cannot be shared to upstream connectivity partners and are not registered in the netnumber Services Registry (nnSR). All mock brands are automatically deleted 30 days after registration. The deletion will cascade across all campaigns created from the mock brands. RCS campaigns for mock brands are not supported.\n\nRegardless of the channel, the response will contain the following properties:\n<table border=\"1\">\n    <thead>\n        <th>Property</th>\n        <th>Data Type</th>\n        <th>Description</th>\n    </thead>\n    <tbody>\n        <tr>\n            <td>campaignId</td>\n            <td><code>string</code></td>\n            <td>The unique ID that identifies the campaign. This ID is used for nnSR phone number provisioning.</td>\n        </tr>\n        <tr>\n            <td>mnoMetadata</td>\n            <td><code>array</code></td>\n            <td>Map of MNO metadata where the key is the network ID of the MNO and the value is the associated metadata.</td>\n        </tr>\n    </tbody>\n</table>\n\nThe MNO metadata property will contain the following attributes:\n\n<table border=\"1\">\n    <thead>\n        <tr>\n            <th>Property</th>\n            <th>MNO Specific</th>\n            <th>Data Type</th>\n            <th>Description</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td>mno</td>\n            <td>All MNOs</td>\n            <td><code>string</code></td>\n            <td>Name of the MNO.</td>\n        </tr>\n        <tr>\n            <td>mnoSupport</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If false, the specified use case is not supported by the MNO.</td>\n        </tr>\n        <tr>\n            <td>mnoReview</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If true, the submitted campaign is subject to a manual MNO review process. Some MNOs provide campaign review statuses via TCR APIs.</td>\n        </tr>\n        <tr>\n            <td>qualify</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If false, the brand does not qualify for the desired use case on the MNO. The CSP should consider getting the brand vetted by one of TCR’s approved external vetting providers.</td>\n        </tr>\n        <tr>\n            <td>minMsgSamples</td>\n            <td>All MNOs</td>\n            <td><code>integer</code></td>\n            <td>The minimum number of message samples required by the MNO for the desired use case.</td>\n        </tr>\n        <tr>\n            <td>reqSubscriberOptin</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If true, the MNO requires the subscriber to opt-into the campaign before the message can be sent. The opt-in mechanism can be a mobile or web opt-in.</td>\n        </tr>\n        <tr>\n            <td>reqSubscriberOptout</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If true, the MNO requires a campaign to support an opt-out mechanism through stop keywords such as STOP or QUIT. Upon receiving a STOP message from a subscriber, the campaign must immediately stop sending messages to the subscriber.</td>\n        </tr>\n        <tr>\n            <td>reqSubscriberHelp</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If true, the MNO requires the campaign to support an assistance mechanism through help key words such as HELP or INFO.</td>\n        </tr>\n        <tr>\n            <td>noEmbeddedLink</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If true, the MNO does not allow a call-to-action link/URL to be embedded in messages sent to the subscriber.</td>\n        </tr>\n        <tr>\n            <td>noEmbeddedPhone</td>\n            <td>All MNOs</td>\n            <td><code>boolean</code></td>\n            <td>If true, the MNO forbids call-to-action phone numbers to be embedded in messages sent to the subscriber.</td>\n        </tr>\n        <tr>\n            <td>msgClass</td>\n            <td>AT&T</td>\n            <td><code>string</code></td>\n            <td>Message class assigned to the campaign by AT&T. Please refer to the AT&T 10DLC guide for a complete list of available message classes and definitions.</td>\n        </tr>\n        <tr>\n            <td>tpm</td>\n            <td>AT&T</td>\n            <td><code>integer</code></td>\n            <td>SMS message TPM (throughput per minute) assigned to the brand for the desired use case.</td>\n        </tr>\n        <tr>\n            <td>mmsTpm</td>\n            <td>AT&T</td>\n            <td><code>integer</code></td>\n            <td>MMS message TPM (throughput per minute) assigned to the brand for the desired use case.</td>\n        </tr>\n        <tr>\n            <td>tpmScope</td>\n            <td>AT&T</td>\n            <td><code>string</code></td>\n            <td>TPM restriction scope. Possible values include: CAMPAIGN or PHONE_NUMBER. If the scope is PHONE_NUMBER, then the TPM rate-limiting is imposed separately for each phone number provisioned to the campaign. A CAMPAIGN level scope indicates rate-limiting imposed for the entire campaign.</td>\n        </tr>\n        <tr>\n            <td>brandTier</td>\n            <td>T-Mobile</td>\n            <td><code>string</code></td>\n            <td>Daily message volume assigned to the campaign based on brand tier or brand qualification. The daily volume restriction applies to brands across all campaigns and CSPs. Please contact your message service provider for updated T-Mobile terms. Possible values: LOW, LOWER_MID, UPPER_MID, TOP</td>\n        </tr>\n        <tr>\n            <td>brandDailyCap</td>\n            <td>T-Mobile</td>\n            <td><code>integer</code></td>\n            <td>The number of messages allowed per day on the T-Mobile network. If the <code>brandTier</code> attribute is UNCAPPED, then this will be NULL.</td>\n        </tr>\n    </tbody>\n</table>\n",
        "operationId" : "registerCampaign",
        "requestBody" : {
          "description" : "Campaign request to be submitted",
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "string",
                "example" : {
                  "brandId" : "B123ABC",
                  "channelId" : "10DLC",
                  "usecase" : "2FA",
                  "subUsecases" : [ ],
                  "resellerId" : "R000000",
                  "description" : "This campaign serves as a 2FA messenger so customers can further protect their accounts at sign in.",
                  "embeddedLink" : false,
                  "embeddedPhone" : false,
                  "termsAndConditions" : true,
                  "numberPool" : false,
                  "ageGated" : false,
                  "directLending" : false,
                  "subscriberOptin" : true,
                  "subscriberOptout" : true,
                  "subscriberHelp" : true,
                  "sample1" : "Your 2FA code is XXXXXX. If you did not initiate this authentication please see the security section on our website.",
                  "sample2" : null,
                  "sample3" : null,
                  "sample4" : null,
                  "sample5" : null,
                  "messageFlow" : "Users opt in via a web form at https://www.mysite.com during the registration. Users must explicitly check a checkbox to opt in (default unchecked).",
                  "helpMessage" : "You have accessed help for mysite. If you would like to stop receiving 2FA messages reply with STOP.",
                  "mnoIds" : [ 10035 ],
                  "referenceId" : "twofactor",
                  "autoRenewal" : true,
                  "tag" : [ ],
                  "optinKeywords" : "START,YES",
                  "optoutKeywords" : "STOP",
                  "helpKeywords" : "HELP",
                  "optinMessage" : "Welcome to our company's 2FA messaging service. This service exists to help keep your account secure.",
                  "optoutMessage" : "You have opted out of 2FA messages. You can always turn it back on using our portal.",
                  "privacyPolicyLink" : null,
                  "termsAndConditionsLink" : null,
                  "embeddedLinkSample" : "https://www.mysite.com/account/security"
                }
              },
              "examples" : {
                "10DLC" : {
                  "description" : "10DLC",
                  "value" : {
                    "brandId" : "B123ABC",
                    "channelId" : "10DLC",
                    "usecase" : "2FA",
                    "subUsecases" : [ ],
                    "resellerId" : "R000000",
                    "description" : "This campaign serves as a 2FA messenger so customers can further protect their accounts at sign in.",
                    "embeddedLink" : false,
                    "embeddedPhone" : false,
                    "termsAndConditions" : true,
                    "numberPool" : false,
                    "ageGated" : false,
                    "directLending" : false,
                    "subscriberOptin" : true,
                    "subscriberOptout" : true,
                    "subscriberHelp" : true,
                    "sample1" : "Your 2FA code is XXXXXX. If you did not initiate this authentication please see the security section on our website.",
                    "sample2" : null,
                    "sample3" : null,
                    "sample4" : null,
                    "sample5" : null,
                    "messageFlow" : "Users opt in via a web form at https://www.mysite.com during the registration. Users must explicitly check a checkbox to opt in (default unchecked).",
                    "helpMessage" : "You have accessed help for mysite. If you would like to stop receiving 2FA messages reply with STOP.",
                    "mnoIds" : [ 10035 ],
                    "referenceId" : "twofactor",
                    "autoRenewal" : true,
                    "tag" : [ ],
                    "optinKeywords" : "START,YES",
                    "optoutKeywords" : "STOP",
                    "helpKeywords" : "HELP",
                    "optinMessage" : "Welcome to our company's 2FA messaging service. This service exists to help keep your account secure.",
                    "optoutMessage" : "You have opted out of 2FA messages. You can always turn it back on using our portal.",
                    "privacyPolicyLink" : null,
                    "termsAndConditionsLink" : null,
                    "embeddedLinkSample" : "https://www.mysite.com/account/security"
                  }
                },
                "RCS" : {
                  "description" : "RCS",
                  "value" : {
                    "brandId" : "B123ABC",
                    "channelId" : "RCS",
                    "usecase" : "OTP",
                    "resellerId" : "R000000",
                    "embeddedLink" : false,
                    "embeddedPhone" : false,
                    "ageGated" : false,
                    "directLending" : false,
                    "subscriberOptin" : true,
                    "subscriberOptout" : true,
                    "subscriberHelp" : true,
                    "sample1" : "Your OTP is XXXXXX. If you did not initiate this authentication please see the security section on our website.",
                    "sample2" : null,
                    "sample3" : null,
                    "sample4" : null,
                    "sample5" : null,
                    "helpMessage" : "You have accessed help for mysite. If you would like to stop receiving OTP messages reply with STOP.",
                    "mnoIds" : [ 10035 ],
                    "referenceId" : "onetimepassword",
                    "autoRenewal" : true,
                    "tag" : [ ],
                    "optinKeywords" : "START,YES",
                    "optoutKeywords" : "STOP",
                    "helpKeywords" : "HELP",
                    "optinMessage" : "Welcome to our company's OTP messaging service. This service exists to help keep your account secure.",
                    "optoutMessage" : "You have opted out of OTP messages. You can always turn it back on using our portal.",
                    "privacyPolicyLink" : null,
                    "termsAndConditionsLink" : null,
                    "embeddedLinkSample" : "https://www.mysite.com/account/security",
                    "displayName" : "OTP Campaign",
                    "hostingRegion" : "NORTH_AMERICA",
                    "billingCategory" : "NON_CONVERSATIONAL",
                    "shortDescription" : "This campaign serves as an OTP messenger so customers can further protect their accounts.",
                    "color" : "FFFFFF",
                    "emails" : [ "contact@mysite.com" ],
                    "emailLabels" : [ "Email" ],
                    "phones" : [ "+123456789" ],
                    "phoneLabels" : [ "Phone" ],
                    "websites" : [ "https://www.mysite.com" ],
                    "websiteLabels" : [ "Website" ],
                    "actionTriggerMessages" : "Whenever a customer logs in, they will receive an OTP message for authentication.",
                    "messageTypes" : "OTP messages will be sent for account authentication.",
                    "optinFlow" : "Customers opt-in by providing their phone number for notification.",
                    "optoutFlow" : "Customers opt-out by replying with STOP.",
                    "technicalContactEmail" : "contact@mysite.com",
                    "technicalContactName" : "Jane Doe",
                    "technicalContactJobTitle" : "Manager",
                    "logoName" : "Logo1",
                    "bannerName" : "Banner1",
                    "screenshotUrl" : "https://mysite.com/assets/screenshot.png",
                    "videoUrl" : "https://mysite.com/assets/video.mp4"
                  }
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CampaignSubmissionResponse"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n        <li>501: Invalid input parameter.\n        <li>502: Brand or reseller record not found.\n        <li>503: Duplicate record detected. If referenceID is supplied, it must be unique.\n        <li>509: Campaign request rejected. Causes could include:\n        <ul>\n        <li>Brand not qualifying for the desired use case due to low brand score or mandatory external vetting required.\n        <li>Campaign submission is incomplete. Information required by some MNOs is missing (e.g., the number of message samples required by the use case).</li>\n        <li>Campaign submission doesn't comply with MNO mandates (e.g., subscriber opt-out may be required for some use cases).</li>\n        </ul></li>\n        <li>511: Maximum number of campaigns exceeded. Please contact TCR support to increase then maximum number of campaigns allowed per brand. Other causes could include:\n        <ul>\n        <li>Registering more than one platform free trial (PFT) campaigns per CSP/reseller.</li>\n        <li>Registering more than one sole proprietor (SP) campaign per SP brand. Each SP brand is only allowed one campaign.</li>\n        </ul></li>\n        <li>527: Brand is in a PENDING status waiting for brand scoring to complete. The webhook BRAND_IDENTITY_STATUS_UPDATE event will be sent when the brand is scored and ready for campaign registration.</li>\n        <li>590: TCR internal system error. Please contact TCR support.</li>\n        <li>591: Temporary system error. Wait 30 seconds and try again.</li>\n        <li>630: Temporary system error. Number provisioning provider (nnSR) cannot accept requests at this time. Wait 30 seconds and try again.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/asset/{name}/verify" : {
      "post" : {
        "tags" : [ "Brand Asset" ],
        "summary" : "Verify an existing brand asset",
        "description" : "Submits a brand asset associated with a brand for verification by an external vetting provider. A brand asset must be successfully verified before it can be associated with an RCS campaign. Additional business rules include:\n<ul><li>The associated brand must have a VERIFIED or VETTED_VERIFIED identity status in order to submit brand assets for verification.</li></ul>",
        "operationId" : "verifyBrandAsset",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "name",
          "in" : "path",
          "description" : "The display name of the brand asset.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>525: Operation declined. Submission only allowed for brands in a VERIFIED or VETTED_VERIFIED identity status.</li>\n<li>566: Operation declined. Brand asset already submitted for verification.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n<li>592: Operation declined. Brand asset already verified.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError_CSP"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credential"
          },
          "429" : {
            "description" : "Too Many Requests"
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/tag/name/{name}/recordType/{recordType}/recordId/{recordId}" : {
      "delete" : {
        "tags" : [ "Searchable Keyword Tag" ],
        "summary" : "Delete a tag assigned to a brand or campaign",
        "description" : "Deletes an existing tag that has been assigned to a brand or campaign. <b>Note</b>: Make sure all path parameters are properly URL encoded.",
        "operationId" : "deleteTag",
        "parameters" : [ {
          "name" : "name",
          "in" : "path",
          "description" : "The tag name.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "recordType",
          "in" : "path",
          "description" : "The record type associated with the tag.",
          "required" : true,
          "schema" : {
            "type" : "string",
            "enum" : [ "BRAND", "CAMPAIGN" ]
          }
        }, {
          "name" : "recordId",
          "in" : "path",
          "description" : "The record ID. For brands, this is the <code>brandId</code>. For campaigns, it is the <code>campaignId</code>.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Success"
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>502: Tag not found.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/tag" : {
      "get" : {
        "tags" : [ "Searchable Keyword Tag" ],
        "summary" : "Retrieve a list of tags associated with the account",
        "description" : "Gets a list of tags created under the current CSP account. Returns a paginated list of tags that match the supplied filter criteria. Not specifying any parameters will return all tags.",
        "operationId" : "searchTag",
        "parameters" : [ {
          "name" : "name",
          "in" : "query",
          "description" : "The tag name.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "recordId",
          "in" : "query",
          "description" : "The record ID. For brands, this is the <code>brandId</code>. For campaigns, it is the <code>campaignId</code>.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "recordType",
          "in" : "query",
          "description" : "The record type associated with the tag.",
          "schema" : {
            "type" : "string",
            "enum" : [ "BRAND", "CAMPAIGN" ]
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The requested page of the result.",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "recordsPerPage",
          "in" : "query",
          "description" : "The number of records to return per page in the result. Max size is 500",
          "schema" : {
            "maximum" : 500,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 10
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "object",
                  "example" : {
                    "records" : [ {
                      "name" : "agriculture",
                      "recordType" : "BRAND",
                      "recordId" : "B123ABC"
                    }, {
                      "name" : "companya",
                      "recordType" : "BRAND",
                      "recordId" : "B123ABC"
                    }, {
                      "name" : "test",
                      "recordType" : "CAMPAIGN",
                      "recordId" : "C123ABC"
                    }, {
                      "name" : "campaigna",
                      "recordType" : "CAMPAIGN",
                      "recordId" : "C123ABC"
                    }, {
                      "name" : "campaignb",
                      "recordType" : "CAMPAIGN",
                      "recordId" : "C123ABC"
                    } ],
                    "page" : 1,
                    "totalRecords" : 5
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Invalid input parameter.</li>\n<li>502: Brand or campaign record not found for given <code>recordId</code>.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Searchable Keyword Tag" ],
        "summary" : "Assign a tag to a brand or campaign",
        "description" : "Lets a CSP assign a tag to a given brand or campaign for organization purposes. A maximum of 10 tags are allowed on a brand registered by the CSP. Tag names can be between 1 and 50 characters. While tag names supports UTF-8, punctuation ( ^!\"#$%&'()*+,-./:;<=>?@[]^_`{|}~ ) and space characters are not allowed. All tags are stored as lowercase. ",
        "operationId" : "setTag",
        "requestBody" : {
          "description" : "Tagging object",
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "string",
                "example" : {
                  "name" : "sampletag",
                  "recordType" : "BRAND",
                  "recordId" : "B123ABC"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Successfully set tag",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "object",
                  "example" : {
                    "name" : "sampletag",
                    "recordType" : "BRAND",
                    "recordId" : "B123ABC"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.\n<ul>\n<li>501: Tag name cannot contain punctuation or spaces. Length must be between 1 to 50 characters.</li>\n<li>502: Brand or campaign record not found for given <code>recordId</code>.</li>\n<li>530: Maximum number of tags exceeded per record. Current max value is 10 tags per record.</li>\n<li>531: Brand or campaign record cannot be tagged. CSPs can only apply tags on their own campaigns and brands.</li>\n<li>590: TCR internal system error. Please contact TCR support.</li>\n</ul>",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ApiError"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    },
    "/brand/{brandId}/externalVetting/mockCvToken" : {
      "post" : {
        "tags" : [ "Mock CV Token" ],
        "summary" : "Generate a mock Campaign Verify token for testing environments",
        "description" : "This endpoint allows CSPs to generate mock Campaign Verify (CV) tokens for use in TCR’s QA and Staging environments. These tokens cannot be used in the live Production environment. The following properties are supported in the request body:\n<ul>\n<li><b>locale</b>: Valid entries include <code>federal</code>, <code>state</code>, <code>local</code>, and <code>tribal</code>.\n<li><b>validUntil</b>: Expiration date associated with the token in the format YYYY-MM-DD.\n</ul>",
        "operationId" : "createMockCvToken",
        "parameters" : [ {
          "name" : "brandId",
          "in" : "path",
          "description" : "The unique ID that identifies the brand.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/x-www-form-urlencoded" : {
              "schema" : {
                "type" : "object",
                "properties" : {
                  "locale" : {
                    "type" : "string",
                    "enum" : [ "federal", "state", "local", "tribal" ]
                  },
                  "validUntil" : {
                    "pattern" : "20\\d\\d\\-[0-1]{1}[0-9]{1}\\-[0-3]{1}[0-9]{1}",
                    "type" : "string",
                    "description" : "Token valid until in yyyy-MM-dd format"
                  }
                }
              }
            }
          }
        },
        "responses" : {
          "default" : {
            "description" : "Success",
            "content" : {
              "text/plain" : {
                "schema" : {
                  "type" : "string",
                  "default" : "v|1.0|cvmock|10dlc|XXXXXXXXXXXX"
                }
              }
            }
          },
          "400" : {
            "description" : "Request failed. Refer to the included TCR error code and message for more information.<ul><li>590: TCR internal system error. Please contact TCR support at <a href=\"mailto:support@campaignregistry.com\">support@campaignregistry.com</a>.</li></ul>"
          },
          "401" : {
            "description" : "Unauthorized access. Check your API credentials."
          },
          "429" : {
            "description" : "Too many requests."
          }
        },
        "security" : [ {
          "myBasicAuthSecurity" : [ ]
        } ]
      }
    }
  },
  "components" : {
    "schemas" : {
      "Dca" : {
        "required" : [ "dca2AutoAccept", "displayName", "dpaSigned", "escalateEmail", "id", "soleProprietorEnabled" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "maxLength" : 7,
            "type" : "string",
            "description" : "Unique identifier of the direct connect aggregator"
          },
          "displayName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Display name of the direct connect aggregator."
          },
          "escalateEmail" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Escalate email of the direct connect aggregator."
          },
          "dpaSigned" : {
            "type" : "boolean",
            "description" : "Indicates whether the direct connect aggregator signed the DPA with TCR or not"
          },
          "soleProprietorEnabled" : {
            "type" : "boolean",
            "description" : "Indicates whether the Dca supports sole proprietor campaigns or not."
          },
          "dca2AutoAccept" : {
            "type" : "boolean",
            "description" : "Indicates whether the Secondary DCA is auto-accepting campaign shared by Primary DCA"
          }
        }
      },
      "Mno" : {
        "required" : [ "displayName", "networkId", "osrBitmaskIndex" ],
        "type" : "object",
        "properties" : {
          "networkId" : {
            "minimum" : 10000,
            "type" : "integer",
            "description" : "Unique network identifier assigned to MNO.",
            "format" : "int64"
          },
          "displayName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Display name of the mobile network operator."
          },
          "osrBitmaskIndex" : {
            "maximum" : 32,
            "minimum" : 1,
            "type" : "integer",
            "description" : "nnSR 'campaign_id' property's 'status' attribute holds individual MNO campaign operation status. The 'status' attribute leverages bitmasking technique to store multiple MNOs' operating status. The campaign operation status is reduced to '1' or '0' value where '1' indicate an 'ACTIVE' status and '0' represents every other non-active statuses, including REVIEW, REJECT and SUSPEND. The 'osrBitmaskIndex' holds the bitmask index of the MNO. For example, T-Mobile's bitmask index is 2, which implies T-Mobile's campaign operation status is stored in bit #2, or 3rd bit when counting from right.",
            "format" : "int32"
          }
        }
      },
      "OptionalAttributeName" : {
        "required" : [ "dataType", "description", "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Name or ID of the attribute."
          },
          "dataType" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Data type of the attribute.",
            "enum" : [ "BOOLEAN", "INTEGER", "DECIMAL", "STRING" ]
          },
          "description" : {
            "maxLength" : 1024,
            "type" : "string",
            "description" : "Description of the attribute."
          }
        },
        "description" : "Optional attributes are extension of brand attributes and are not mandatory or applicable to all brands."
      },
      "ExtVettingProvider" : {
        "type" : "object",
        "properties" : {
          "evpId" : {
            "type" : "string"
          },
          "displayName" : {
            "type" : "string"
          },
          "tcrBillable" : {
            "type" : "boolean"
          },
          "vettingClasses" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "vettingInstruction" : {
            "type" : "string"
          }
        }
      },
      "ImmutableMapStringString" : {
        "type" : "object",
        "properties" : {
          "empty" : {
            "type" : "boolean"
          }
        },
        "additionalProperties" : {
          "type" : "string"
        }
      },
      "AppealCategory" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "displayName" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "PublicCompany" : {
        "type" : "object",
        "properties" : {
          "symbol" : {
            "type" : "string"
          },
          "exchange" : {
            "type" : "string",
            "enum" : [ "NONE", "NASDAQ", "NYSE", "AMEX", "AMX", "ASX", "B3", "BME", "BSE", "BZX", "FRA", "ICEX", "JPX", "JSE", "KRX", "LON", "NSE", "NNQS", "OMX", "SEHK", "SGX", "SSE", "STO", "SWX", "SZSE", "TSX", "TWSE", "VSE", "XPAR", "XAMS", "XMIL", "XCSE", "XBRU", "XMAD", "XOSL", "XWAR", "XETR", "XSTU", "XBER", "XMUN", "XHAM", "XHAN", "XDUS", "XEUR", "OTHER" ]
          },
          "iso2" : {
            "type" : "string"
          },
          "isin" : {
            "type" : "string"
          },
          "displayName" : {
            "type" : "string"
          }
        }
      },
      "RecordSetPublicCompany" : {
        "type" : "object",
        "properties" : {
          "records" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PublicCompany"
            }
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalRecords" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "VettingClass" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "enabled" : {
            "type" : "boolean"
          },
          "displayName" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "validityMonths" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "VettingFeedbackCode" : {
        "type" : "object",
        "properties" : {
          "code" : {
            "type" : "string"
          },
          "message" : {
            "type" : "string"
          }
        }
      },
      "EventType" : {
        "type" : "object",
        "properties" : {
          "eventType" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "eventCategory" : {
            "type" : "string",
            "enum" : [ "BRAND", "CSP", "CAMPAIGN", "INCIDENCE", "VETTING" ]
          }
        }
      },
      "WebhookSubscription" : {
        "required" : [ "eventCategory", "webhookEndpoint" ],
        "type" : "object",
        "properties" : {
          "eventCategory" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Use `/webhook/eventCategory` to retrieve events available",
            "enum" : [ "BRAND", "CSP", "CAMPAIGN", "INCIDENCE", "VETTING" ]
          },
          "webhookEndpoint" : {
            "maxLength" : 255,
            "minLength" : 1,
            "type" : "string",
            "description" : "Webhook endpoint to which the events subscribed will be notified"
          }
        },
        "description" : "WebhookSubscription object describes the webhook for event notification subscription."
      },
      "ApiError" : {
        "type" : "object",
        "properties" : {
          "code" : {
            "type" : "integer",
            "description" : "Error code",
            "format" : "int32",
            "example" : 501
          },
          "description" : {
            "type" : "string",
            "description" : "Error description",
            "example" : "Invalid parameter"
          },
          "fields" : {
            "uniqueItems" : true,
            "type" : "array",
            "description" : "Identifies the input parameter names that are causing the error. This replaces the deprecated 'field' property",
            "example" : [ "campaignId" ],
            "items" : {
              "type" : "string",
              "description" : "Identifies the input parameter names that are causing the error. This replaces the deprecated 'field' property",
              "example" : "[\"campaignId\"]"
            }
          }
        },
        "description" : "REST API error response"
      },
      "WebhookResponse" : {
        "type" : "object",
        "properties" : {
          "endpoint" : {
            "type" : "string",
            "description" : "The webhook subscription endpoint",
            "example" : "https://your.server.com/webhooklistener"
          },
          "status" : {
            "type" : "integer",
            "description" : "HTTP Response status code returned by your webhook endpoint",
            "format" : "int32",
            "example" : 200
          },
          "request" : {
            "type" : "string",
            "description" : "The webhook payload submitted to your endpoint",
            "example" : "{\"campaignId\":\"CICPQKB\",\"eventType\":\"CAMPAIGN_SHARE_ADD\"}"
          },
          "response" : {
            "type" : "string",
            "description" : "HTTP Response returned by your webhook endpoint",
            "example" : "OK"
          }
        }
      },
      "ApiError_CSP" : {
        "type" : "object",
        "properties" : {
          "code" : {
            "type" : "integer",
            "description" : "Error code",
            "format" : "int32",
            "example" : 501
          },
          "description" : {
            "type" : "string",
            "description" : "Error description",
            "example" : "Invalid parameter"
          },
          "fields" : {
            "uniqueItems" : true,
            "type" : "array",
            "description" : "Identifies the input parameter names that are causing the error. This replaces the deprecated 'field' property",
            "example" : [ "campaignId" ],
            "items" : {
              "type" : "string",
              "description" : "Identifies the input parameter names that are causing the error. This replaces the deprecated 'field' property",
              "example" : "[\"campaignId\"]"
            }
          }
        },
        "description" : "REST API error response"
      },
      "BrandAssetAppealRequest_CSP" : {
        "required" : [ "appealCategories" ],
        "type" : "object",
        "properties" : {
          "appealCategories" : {
            "type" : "array",
            "description" : "Categories to appeal against.",
            "items" : {
              "type" : "string",
              "description" : "Categories to appeal against."
            }
          },
          "attachmentUuids" : {
            "type" : "array",
            "description" : "Attachment UUIDs of evidence uploaded for brand.",
            "items" : {
              "type" : "string",
              "description" : "Attachment UUIDs of evidence uploaded for brand."
            }
          },
          "explanation" : {
            "maxLength" : 1024,
            "type" : "string",
            "description" : "Appeal details."
          }
        }
      },
      "ExternalVettingAppealRequest" : {
        "required" : [ "appealCategories", "evpId", "vettingId" ],
        "type" : "object",
        "properties" : {
          "appealCategories" : {
            "type" : "array",
            "description" : "Categories to appeal against.",
            "items" : {
              "type" : "string",
              "description" : "Categories to appeal against."
            }
          },
          "attachmentUuids" : {
            "type" : "array",
            "description" : "Attachment UUIDs of evidence uploaded for brand.",
            "items" : {
              "type" : "string",
              "description" : "Attachment UUIDs of evidence uploaded for brand."
            }
          },
          "explanation" : {
            "maxLength" : 1024,
            "type" : "string",
            "description" : "Appeal details."
          },
          "evpId" : {
            "minLength" : 1,
            "type" : "string"
          },
          "vettingId" : {
            "minLength" : 1,
            "type" : "string"
          }
        }
      },
      "BrandAppealRequest" : {
        "required" : [ "appealCategories" ],
        "type" : "object",
        "properties" : {
          "appealCategories" : {
            "type" : "array",
            "description" : "Categories to appeal against.",
            "items" : {
              "type" : "string",
              "description" : "Categories to appeal against."
            }
          },
          "attachmentUuids" : {
            "type" : "array",
            "description" : "Attachment UUIDs of evidence uploaded for brand.",
            "items" : {
              "type" : "string",
              "description" : "Attachment UUIDs of evidence uploaded for brand."
            }
          },
          "explanation" : {
            "maxLength" : 1024,
            "type" : "string",
            "description" : "Appeal details."
          }
        }
      },
      "Brand" : {
        "required" : [ "brandRelationship", "country", "displayName", "email", "entityType", "identityStatus", "mock", "phone" ],
        "type" : "object",
        "properties" : {
          "entityType" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Entity type behind the brand. This is the form of business establishment.",
            "enum" : [ "PRIVATE_PROFIT", "PUBLIC_PROFIT", "NON_PROFIT", "GOVERNMENT", "SOLE_PROPRIETOR" ]
          },
          "cspId" : {
            "type" : "string",
            "description" : "Unique identifier assigned to the csp by the registry.",
            "readOnly" : true
          },
          "brandId" : {
            "type" : "string",
            "description" : "Unique identifier assigned to the brand by the registry.",
            "readOnly" : true
          },
          "status" : {
            "type" : "string",
            "description" : "The status of the brand in TCR system, Read Only.",
            "readOnly" : true,
            "enum" : [ "ACTIVE", "DELETED" ]
          },
          "firstName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "First or given name. Applicable to SOLE_PROPRIETOR entity type.",
            "example" : "John"
          },
          "lastName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Last or Surname. Applicable to SOLE_PROPRIETOR entity type.",
            "example" : "Doe"
          },
          "displayName" : {
            "maxLength" : 255,
            "minLength" : 1,
            "type" : "string",
            "description" : "Display or marketing name of the brand.",
            "example" : "ABC Mobile"
          },
          "companyName" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "(Required for Non-profit/private/public) Legal company name.",
            "example" : "ABC Inc."
          },
          "ein" : {
            "maxLength" : 21,
            "type" : "string",
            "description" : "(Required for Non-profit) Government assigned corporate tax ID. EIN is 9-digits in U.S.",
            "example" : "111111111"
          },
          "einIssuingCountry" : {
            "maxLength" : 2,
            "type" : "string",
            "description" : "ISO2 2 characters country code. Example: US - United States",
            "example" : "US"
          },
          "phone" : {
            "maxLength" : 20,
            "minLength" : 1,
            "type" : "string",
            "description" : "Valid phone number in e.164 international format.",
            "example" : "+12024567890"
          },
          "street" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Street number and name.",
            "example" : "123 6th Ave"
          },
          "city" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "City name",
            "example" : "New York"
          },
          "state" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "State. Must be 2 letters code for United States.",
            "example" : "NY"
          },
          "postalCode" : {
            "maxLength" : 10,
            "type" : "string",
            "description" : "Postal codes. Use 5 digit zipcode for United States",
            "example" : "10001"
          },
          "country" : {
            "maxLength" : 2,
            "minLength" : 1,
            "type" : "string",
            "description" : "ISO2 2 characters country code. Example: US - United States",
            "example" : "US"
          },
          "email" : {
            "maxLength" : 100,
            "minLength" : 1,
            "type" : "string",
            "description" : "Valid email address of brand support contact."
          },
          "stockSymbol" : {
            "maxLength" : 10,
            "type" : "string",
            "description" : "(Required for public company) stock symbol.",
            "example" : "ABC"
          },
          "stockExchange" : {
            "type" : "string",
            "description" : "(Required for public company) stock exchange.",
            "example" : "NASDAQ",
            "enum" : [ "NONE", "NASDAQ", "NYSE", "AMEX", "AMX", "ASX", "B3", "BME", "BSE", "BZX", "FRA", "ICEX", "JPX", "JSE", "KRX", "LON", "NSE", "NNQS", "OMX", "SEHK", "SGX", "SSE", "STO", "SWX", "SZSE", "TSX", "TWSE", "VSE", "XPAR", "XAMS", "XMIL", "XCSE", "XBRU", "XMAD", "XOSL", "XWAR", "XETR", "XSTU", "XBER", "XMUN", "XHAM", "XHAN", "XDUS", "XEUR", "OTHER" ]
          },
          "ipAddress" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "IP address of the browser requesting to create brand identity."
          },
          "website" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Brand website URL and online presence.",
            "example" : "http://www.abcmobile.com"
          },
          "brandRelationship" : {
            "type" : "string",
            "description" : "Brand relationship to the CSP",
            "enum" : [ "BASIC_ACCOUNT", "SMALL_ACCOUNT", "MEDIUM_ACCOUNT", "LARGE_ACCOUNT", "KEY_ACCOUNT" ]
          },
          "vertical" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "(Required for all entity types except sole proprietor) vertical or industry segment of the brand."
          },
          "altBusinessId" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Alternate business identifier"
          },
          "altBusinessIdType" : {
            "type" : "string",
            "description" : "Alternate business identifier type. e.g. DUNS, LEI, GIIN.",
            "enum" : [ "NONE", "DUNS", "GIIN", "LEI" ]
          },
          "universalEin" : {
            "type" : "string",
            "description" : "Universal EIN of Brand, Read Only.",
            "readOnly" : true
          },
          "referenceId" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Caller supplied brand reference ID. If supplied, the value must be unique across all submitted brands. Can be used to prevent duplicate brand registrations."
          },
          "optionalAttributes" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object",
              "description" : "Optional brand attributes. Please refer to GET /enum/optionalAttributeNames for dictionary of optional attribute names."
            },
            "description" : "Optional brand attributes. Please refer to GET /enum/optionalAttributeNames for dictionary of optional attribute names."
          },
          "mock" : {
            "type" : "boolean",
            "description" : "If true, marks the brand as a test brand that does not incur a billable charge on brand subsequent campaign registration."
          },
          "identityStatus" : {
            "type" : "string",
            "description" : "TCR assessment of the brand identification status.",
            "enum" : [ "SELF_DECLARED", "UNVERIFIED", "VERIFIED", "VETTED_VERIFIED" ]
          },
          "createDate" : {
            "type" : "string",
            "description" : "Brand created date.",
            "format" : "date-time"
          },
          "evpVettingScore" : {
            "type" : "integer",
            "description" : "External vetting score.",
            "format" : "int32"
          },
          "evpVettingFeedback" : {
            "type" : "array",
            "description" : "External vetting feedback.",
            "items" : {
              "type" : "string",
              "description" : "External vetting feedback."
            }
          },
          "mobilePhone" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Valid mobile phone number in e.164 international format.",
            "example" : "+12024567890"
          },
          "mobilePhoneVerifiedDate" : {
            "type" : "string",
            "description" : "Mobile phone verified date.",
            "format" : "date-time"
          },
          "businessContactTitle" : {
            "type" : "string",
            "description" : "The title of the business contact for a public profit brand."
          },
          "businessContactFirstName" : {
            "type" : "string",
            "description" : "The first name of the business contact for a public profit brand."
          },
          "businessContactLastName" : {
            "type" : "string",
            "description" : "The last name of the business contact for a public profit brand."
          },
          "businessContactEmail" : {
            "type" : "string",
            "description" : "The email of the business contact for a public profit brand."
          },
          "businessContactEmailVerifiedDate" : {
            "type" : "string",
            "description" : "Business contact email verified date.",
            "format" : "date-time"
          },
          "cspName" : {
            "type" : "string",
            "description" : "Display name of the CSP.",
            "readOnly" : true
          },
          "politicalVettingId" : {
            "type" : "string"
          }
        },
        "description" : "A brand is a business identity behind the campaign."
      },
      "BrandRequest" : {
        "required" : [ "brandRelationship", "country", "displayName", "email", "entityType", "phone" ],
        "type" : "object",
        "properties" : {
          "entityType" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Entity type behind the brand. This is the form of business establishment.",
            "example" : "PRIVATE_PROFIT"
          },
          "firstName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "First or given name. Applicable to SOLE_PROPRIETOR entity type.",
            "example" : "John"
          },
          "lastName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Last or Surname. Applicable to SOLE_PROPRIETOR entity type.",
            "example" : "Doe"
          },
          "displayName" : {
            "maxLength" : 255,
            "minLength" : 1,
            "type" : "string",
            "description" : "Display or marketing name of the brand.",
            "example" : "ABC Mobile"
          },
          "companyName" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "(Required for Non-profit/private/public) Legal company name.",
            "example" : "ABC Inc."
          },
          "ein" : {
            "maxLength" : 21,
            "type" : "string",
            "description" : "(Required for Non-profit) Government assigned corporate tax ID. EIN is 9-digits in U.S.",
            "example" : "111111111"
          },
          "einIssuingCountry" : {
            "maxLength" : 2,
            "type" : "string",
            "description" : "ISO2 2 characters country code. Example: US - United States",
            "example" : "US"
          },
          "phone" : {
            "maxLength" : 20,
            "minLength" : 1,
            "type" : "string",
            "description" : "Valid phone number in e.164 international format.",
            "example" : "+12024567890"
          },
          "street" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Street number and name.",
            "example" : "123 6th Ave"
          },
          "city" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "City name",
            "example" : "New York"
          },
          "state" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "State. Must be 2 letters code for United States.",
            "example" : "NY"
          },
          "postalCode" : {
            "maxLength" : 10,
            "type" : "string",
            "description" : "Postal codes. Use 5 digit zipcode for United States",
            "example" : "10001"
          },
          "country" : {
            "maxLength" : 2,
            "minLength" : 1,
            "type" : "string",
            "description" : "ISO2 2 characters country code. Example: US - United States",
            "example" : "US"
          },
          "email" : {
            "maxLength" : 100,
            "minLength" : 1,
            "type" : "string",
            "description" : "Valid email address of brand support contact.",
            "example" : "johndoe@abc.com"
          },
          "stockSymbol" : {
            "maxLength" : 10,
            "type" : "string",
            "description" : "(Required for public company) stock symbol.",
            "example" : "ABC"
          },
          "stockExchange" : {
            "type" : "string",
            "description" : "(Required for public company) stock exchange.",
            "example" : "NASDAQ"
          },
          "ipAddress" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "IP address of the browser requesting to create brand identity."
          },
          "website" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Brand website URL and online presence.",
            "example" : "http://www.abcmobile.com"
          },
          "brandRelationship" : {
            "type" : "string",
            "description" : "Brand relationship to the CSP",
            "example" : "BASIC_ACCOUNT"
          },
          "vertical" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "(Required for all entity types except sole proprietor) vertical or industry segment of the brand.",
            "example" : "RETAIL"
          },
          "altBusinessId" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Alternate business identifier"
          },
          "altBusinessIdType" : {
            "type" : "string",
            "description" : "Alternate business identifier type. e.g. DUNS, LEI, GIIN."
          },
          "referenceId" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Caller supplied brand reference ID. If supplied, the value must be unique across all submitted brands. Can be used to prevent duplicate brand registrations."
          },
          "mock" : {
            "type" : "boolean",
            "description" : "If true, marks the brand as a test brand that does not incur a billable charge on brand subsequent campaign registration.",
            "example" : false
          },
          "tag" : {
            "uniqueItems" : true,
            "type" : "array",
            "description" : "Tags to be set on the Brand.",
            "nullable" : true,
            "example" : [ ],
            "items" : {
              "type" : "string",
              "description" : "Tags to be set on the Brand.",
              "nullable" : true,
              "example" : "[]"
            }
          },
          "mobilePhone" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Valid mobile phone number in e.164 international format.",
            "example" : "+12024567890"
          },
          "businessContactEmail" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "The email of the business contact for a public profit brand.",
            "example" : "johndoe@abc.com"
          }
        }
      },
      "Reseller" : {
        "required" : [ "companyName", "email", "phone" ],
        "type" : "object",
        "properties" : {
          "resellerId" : {
            "type" : "string",
            "description" : "Unique identifier assigned to the reseller by the registry.",
            "readOnly" : true
          },
          "cspId" : {
            "type" : "string",
            "description" : "Unique identifier assigned to the csp by the registry.",
            "readOnly" : true
          },
          "companyName" : {
            "maxLength" : 100,
            "minLength" : 1,
            "type" : "string",
            "description" : "Display or company name of the reseller.",
            "example" : "Microsoft"
          },
          "phone" : {
            "maxLength" : 20,
            "minLength" : 1,
            "type" : "string",
            "description" : "Valid phone number in e.164 international format.",
            "example" : "+18348365467"
          },
          "email" : {
            "maxLength" : 100,
            "minLength" : 1,
            "type" : "string",
            "description" : "Valid email address of reseller contact.",
            "example" : "john.doe@microsoft.com"
          }
        },
        "description" : "A reseller is a role or business that comes in between csp and brand."
      },
      "CampaignSharingStatus" : {
        "required" : [ "explanation", "rejectionCategory" ],
        "type" : "object",
        "properties" : {
          "downstreamCnpId" : {
            "type" : "string"
          },
          "upstreamCnpId" : {
            "type" : "string"
          },
          "sharingStatus" : {
            "type" : "string",
            "enum" : [ "PENDING", "ACCEPTED", "DECLINED" ]
          },
          "rejectionCategory" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "explanation" : {
            "type" : "string"
          },
          "sharedDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "statusDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "cnpMigration" : {
            "type" : "boolean"
          }
        }
      },
      "ExplanationParam" : {
        "type" : "object",
        "properties" : {
          "explanation" : {
            "type" : "string"
          }
        }
      },
      "Brand_CSP" : {
        "required" : [ "brandRelationship", "country", "displayName", "email", "entityType", "identityStatus", "mock", "phone" ],
        "type" : "object",
        "properties" : {
          "entityType" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Entity type behind the brand. This is the form of business establishment.",
            "enum" : [ "PRIVATE_PROFIT", "PUBLIC_PROFIT", "NON_PROFIT", "GOVERNMENT", "SOLE_PROPRIETOR" ]
          },
          "cspId" : {
            "type" : "string",
            "description" : "Unique identifier assigned to the csp by the registry.",
            "readOnly" : true
          },
          "brandId" : {
            "type" : "string",
            "description" : "Unique identifier assigned to the brand by the registry.",
            "readOnly" : true
          },
          "status" : {
            "type" : "string",
            "description" : "The status of the brand in TCR system, Read Only.",
            "readOnly" : true,
            "enum" : [ "ACTIVE", "DELETED" ]
          },
          "firstName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "First or given name. Applicable to SOLE_PROPRIETOR entity type.",
            "example" : "John"
          },
          "lastName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Last or Surname. Applicable to SOLE_PROPRIETOR entity type.",
            "example" : "Doe"
          },
          "displayName" : {
            "maxLength" : 255,
            "minLength" : 1,
            "type" : "string",
            "description" : "Display or marketing name of the brand.",
            "example" : "ABC Mobile"
          },
          "companyName" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "(Required for Non-profit/private/public) Legal company name.",
            "example" : "ABC Inc."
          },
          "ein" : {
            "maxLength" : 21,
            "type" : "string",
            "description" : "(Required for Non-profit) Government assigned corporate tax ID. EIN is 9-digits in U.S.",
            "example" : "111111111"
          },
          "einIssuingCountry" : {
            "maxLength" : 2,
            "type" : "string",
            "description" : "ISO2 2 characters country code. Example: US - United States",
            "example" : "US"
          },
          "phone" : {
            "maxLength" : 20,
            "minLength" : 1,
            "type" : "string",
            "description" : "Valid phone number in e.164 international format.",
            "example" : "+12024567890"
          },
          "street" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Street number and name.",
            "example" : "123 6th Ave"
          },
          "city" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "City name",
            "example" : "New York"
          },
          "state" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "State. Must be 2 letters code for United States.",
            "example" : "NY"
          },
          "postalCode" : {
            "maxLength" : 10,
            "type" : "string",
            "description" : "Postal codes. Use 5 digit zipcode for United States",
            "example" : "10001"
          },
          "country" : {
            "maxLength" : 2,
            "minLength" : 1,
            "type" : "string",
            "description" : "ISO2 2 characters country code. Example: US - United States",
            "example" : "US"
          },
          "email" : {
            "maxLength" : 100,
            "minLength" : 1,
            "type" : "string",
            "description" : "Valid email address of brand support contact."
          },
          "stockSymbol" : {
            "maxLength" : 10,
            "type" : "string",
            "description" : "(Required for public company) stock symbol.",
            "example" : "ABC"
          },
          "stockExchange" : {
            "type" : "string",
            "description" : "(Required for public company) stock exchange.",
            "example" : "NASDAQ",
            "enum" : [ "NONE", "NASDAQ", "NYSE", "AMEX", "AMX", "ASX", "B3", "BME", "BSE", "BZX", "FRA", "ICEX", "JPX", "JSE", "KRX", "LON", "NSE", "NNQS", "OMX", "SEHK", "SGX", "SSE", "STO", "SWX", "SZSE", "TSX", "TWSE", "VSE", "XPAR", "XAMS", "XMIL", "XCSE", "XBRU", "XMAD", "XOSL", "XWAR", "XETR", "XSTU", "XBER", "XMUN", "XHAM", "XHAN", "XDUS", "XEUR", "OTHER" ]
          },
          "ipAddress" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "IP address of the browser requesting to create brand identity."
          },
          "website" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Brand website URL and online presence.",
            "example" : "http://www.abcmobile.com"
          },
          "brandRelationship" : {
            "type" : "string",
            "description" : "Brand relationship to the CSP",
            "enum" : [ "BASIC_ACCOUNT", "SMALL_ACCOUNT", "MEDIUM_ACCOUNT", "LARGE_ACCOUNT", "KEY_ACCOUNT" ]
          },
          "vertical" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "(Required for all entity types except sole proprietor) vertical or industry segment of the brand."
          },
          "altBusinessId" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Alternate business identifier"
          },
          "altBusinessIdType" : {
            "type" : "string",
            "description" : "Alternate business identifier type. e.g. DUNS, LEI, GIIN.",
            "enum" : [ "NONE", "DUNS", "GIIN", "LEI" ]
          },
          "universalEin" : {
            "type" : "string",
            "description" : "Universal EIN of Brand, Read Only.",
            "readOnly" : true
          },
          "referenceId" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Caller supplied brand reference ID. If supplied, the value must be unique across all submitted brands. Can be used to prevent duplicate brand registrations."
          },
          "optionalAttributes" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object",
              "description" : "Optional brand attributes. Please refer to GET /enum/optionalAttributeNames for dictionary of optional attribute names."
            },
            "description" : "Optional brand attributes. Please refer to GET /enum/optionalAttributeNames for dictionary of optional attribute names."
          },
          "mock" : {
            "type" : "boolean",
            "description" : "If true, marks the brand as a test brand that does not incur a billable charge on brand subsequent campaign registration."
          },
          "identityStatus" : {
            "type" : "string",
            "description" : "TCR assessment of the brand identification status.",
            "enum" : [ "SELF_DECLARED", "UNVERIFIED", "VERIFIED", "VETTED_VERIFIED" ]
          },
          "createDate" : {
            "type" : "string",
            "description" : "Brand created date.",
            "format" : "date-time"
          },
          "mobilePhone" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Valid mobile phone number in e.164 international format.",
            "example" : "+12024567890"
          },
          "mobilePhoneVerifiedDate" : {
            "type" : "string",
            "description" : "Mobile phone verified date.",
            "format" : "date-time"
          },
          "businessContactTitle" : {
            "type" : "string",
            "description" : "The title of the business contact for a public profit brand."
          },
          "businessContactFirstName" : {
            "type" : "string",
            "description" : "The first name of the business contact for a public profit brand."
          },
          "businessContactLastName" : {
            "type" : "string",
            "description" : "The last name of the business contact for a public profit brand."
          },
          "businessContactEmail" : {
            "type" : "string",
            "description" : "The email of the business contact for a public profit brand."
          },
          "businessContactEmailVerifiedDate" : {
            "type" : "string",
            "description" : "Business contact email verified date.",
            "format" : "date-time"
          }
        },
        "description" : "A brand is a business identity behind the campaign."
      },
      "BrandFeedback" : {
        "type" : "object",
        "properties" : {
          "brandId" : {
            "type" : "string"
          },
          "category" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/FeedbackCategory"
            }
          }
        }
      },
      "FeedbackCategory" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "displayName" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "fields" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "errors" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/VettingFeedbackCode"
            }
          }
        }
      },
      "TermsAndConditions" : {
        "type" : "object",
        "properties" : {
          "subTerms" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "CnpMigration" : {
        "type" : "object",
        "properties" : {
          "campaignId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string",
            "enum" : [ "ACTIVE", "COMPLETED", "CANCELLED" ]
          },
          "cancellationReason" : {
            "type" : "string"
          },
          "expirationDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "createDate" : {
            "type" : "string",
            "format" : "date-time"
          }
        }
      },
      "CnpMigrationSettings" : {
        "type" : "object",
        "properties" : {
          "migrationSupported" : {
            "type" : "boolean"
          },
          "migrationAutoComplete" : {
            "type" : "boolean"
          }
        }
      },
      "Campaign_CSP_EX" : {
        "required" : [ "actionTriggerMessages", "bannerName", "billingCategory", "brandId", "campaignId", "color", "cspId", "description", "displayName", "hostingRegion", "logoName", "messageFlow", "messageTypes", "mock", "optinFlow", "optoutFlow", "shortDescription", "subUsecases", "technicalContactEmail", "technicalContactJobTitle", "technicalContactName", "termsAndConditions", "usecase" ],
        "type" : "object",
        "properties" : {
          "campaignId" : {
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier assigned by the registry for a campaign. This identifier is required by the NetNumber nnSR SMS enabling process of 10DLC."
          },
          "cspId" : {
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier of the CSP associated with this campaign."
          },
          "resellerId" : {
            "maxLength" : 8,
            "type" : "string",
            "description" : "Alphanumeric identifier of the reseller that you want to associate with this campaign."
          },
          "status" : {
            "type" : "string",
            "description" : "Current campaign status. Possible values: ACTIVE, EXPIRED. A newly created campaign defaults to ACTIVE status.",
            "enum" : [ "ACTIVE", "EXPIRED" ]
          },
          "createDate" : {
            "type" : "string",
            "description" : "Campaign created date.",
            "format" : "date-time"
          },
          "autoRenewal" : {
            "type" : "boolean",
            "description" : "Campaign subscription auto-renewal status. If true, then campaign will automatically renewal at the end of billing cycle."
          },
          "billedDate" : {
            "type" : "string",
            "description" : "Campaign recent billed date.",
            "format" : "date-time"
          },
          "brandId" : {
            "maxLength" : 8,
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier of the brand associated with this campaign."
          },
          "vertical" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Business/industry segment of this campaign (Deprecated). Must be of defined valid types. Use `/registry/enum/vertical` operation to retrieve verticals available for given brand, vertical combination.",
            "deprecated" : true
          },
          "usecase" : {
            "maxLength" : 50,
            "minLength" : 1,
            "type" : "string",
            "description" : "Campaign usecase. Must be of defined valid types. Use `/registry/enum/usecase` operation to retrieve usecases available for given brand."
          },
          "subUsecases" : {
            "uniqueItems" : true,
            "type" : "array",
            "description" : "Campaign sub-usecases. Must be of defined valid sub-usecase types. Use `/registry/enum/usecase` operation to retrieve list of valid sub-usecases",
            "items" : {
              "type" : "string",
              "description" : "Campaign sub-usecases. Must be of defined valid sub-usecase types. Use `/registry/enum/usecase` operation to retrieve list of valid sub-usecases"
            }
          },
          "channelId" : {
            "type" : "string"
          },
          "description" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Summary description of this campaign."
          },
          "embeddedLink" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include URL link in SMS?",
            "default" : false
          },
          "embeddedPhone" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include phone number in SMS?",
            "default" : false
          },
          "termsAndConditions" : {
            "type" : "boolean",
            "description" : "Is terms & conditions accepted?"
          },
          "numberPool" : {
            "type" : "boolean",
            "description" : "Does campaign utilize pool of phone numbers?",
            "default" : false
          },
          "ageGated" : {
            "type" : "boolean",
            "description" : "Age gated message content in campaign."
          },
          "directLending" : {
            "type" : "boolean",
            "description" : "Direct lending or loan arrangement"
          },
          "subscriberOptin" : {
            "type" : "boolean",
            "description" : "Does campaign require subscriber to opt-in before SMS is sent to subscriber?",
            "default" : false
          },
          "subscriberOptout" : {
            "type" : "boolean",
            "description" : "Does campaign support subscriber opt-out keyword(s)?",
            "default" : false
          },
          "subscriberHelp" : {
            "type" : "boolean",
            "description" : "Does campaign responds to help keyword(s)?",
            "default" : false
          },
          "sample1" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. All campaign use cases require at least 1 message sample."
          },
          "sample2" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 2 or more message samples."
          },
          "sample3" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 3 or more message samples."
          },
          "sample4" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 4 or more message samples."
          },
          "sample5" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 5 message samples."
          },
          "messageFlow" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Message flow description."
          },
          "helpMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Help message of the campaign. MinLength length = 20 when subscriberHelp = true."
          },
          "referenceId" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Caller supplied campaign reference ID. If supplied, the value must be unique across all submitted campaigns. Can be used to prevent duplicate campaign registrations."
          },
          "mock" : {
            "type" : "boolean",
            "description" : "Campaign created from mock brand. Mocked campaign cannot be shared with an upstream CNP."
          },
          "nextRenewalOrExpirationDate" : {
            "type" : "string",
            "description" : "When the campaign would be due for its next renew/bill date.",
            "format" : "date",
            "example" : "2000-01-01"
          },
          "expirationDate" : {
            "type" : "string",
            "description" : "When the campaign was deactivated.",
            "format" : "date-time"
          },
          "optinKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-in keywords. Multiple keywords are comma separated without space.",
            "example" : "START,YES"
          },
          "optoutKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-out keywords. Multiple keywords are comma separated without space.",
            "example" : "STOP",
            "default" : "STOP"
          },
          "helpKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber help keywords. Multiple keywords are comma separated without space.",
            "example" : "HELP",
            "default" : "HELP"
          },
          "optinMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-in message. When subscriberOptin = true, must be empty or length >= 20."
          },
          "optoutMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-out message. MinLength length = 20 when subscriberOptout = true."
          },
          "privacyPolicyLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's privacy policy."
          },
          "termsAndConditionsLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's terms and conditions."
          },
          "embeddedLinkSample" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Sample of an embedded link that will be sent to subscribers."
          },
          "monthlyFee" : {
            "type" : "number",
            "description" : "Monthly fee.",
            "example" : 10.0
          },
          "displayName" : {
            "maxLength" : 40,
            "type" : "string",
            "description" : "The RCS campaign name."
          },
          "hostingRegion" : {
            "type" : "string",
            "description" : "Where the RCS campaign will run.",
            "enum" : [ "NORTH_AMERICA", "EUROPE", "ASIA_PACIFIC" ]
          },
          "billingCategory" : {
            "type" : "string",
            "description" : "CSPs can select the type of RCS campaign that will run. Options include conversational (for messaging campaigns that expect a back-and-forth exchange with consumers)or nonconversational (for messaging campaigns that expect a minimal amount of replies from consumers).",
            "enum" : [ "CONVERSATIONAL", "NON_CONVERSATIONAL" ]
          },
          "shortDescription" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "A high-level overview that describes what the campaign is about"
          },
          "color" : {
            "maxLength" : 6,
            "type" : "string",
            "description" : "The color to display on various UI elements of the campaign."
          },
          "phones" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 50,
              "type" : "string",
              "description" : "A phone number to be associated with the campaign. A single phone number is required, but multiple numbers are supported."
            }
          },
          "phoneLabels" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 25,
              "type" : "string",
              "description" : "The label to display next to the associated phone number. Labels for multiple phone numbers are supported."
            }
          },
          "emails" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 100,
              "type" : "string",
              "description" : "An email address to be associated with the campaign. A single email address is required, but multiple emails are supported."
            }
          },
          "emailLabels" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 25,
              "type" : "string",
              "description" : "The label to display next to the associated email address. Labels for multiple email addresses are supported."
            }
          },
          "websites" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 225,
              "type" : "string",
              "description" : "A website URL to be associated with the campaign. A single website URL is required, but multiple URLs are supported."
            }
          },
          "websiteLabels" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 25,
              "type" : "string",
              "description" : "The label to display next to the associated website. Labels for multiple websites are supported."
            }
          },
          "actionTriggerMessages" : {
            "maxLength" : 2000,
            "type" : "string",
            "description" : "A description of consumer actions that will trigger campaign messages."
          },
          "messageTypes" : {
            "maxLength" : 2000,
            "type" : "string",
            "description" : "A high-level description of the types of messages that will be sent."
          },
          "optinFlow" : {
            "maxLength" : 2000,
            "type" : "string",
            "description" : "A description of how consumers give consent to receive the messaging campaign."
          },
          "optoutFlow" : {
            "maxLength" : 2000,
            "type" : "string",
            "description" : "A description of how consumers can tell the brand to stop sending campaign messages."
          },
          "technicalContactName" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Name of a brand contact that can be reached in the event of technical difficulties with the RCS campaign."
          },
          "technicalContactEmail" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Email address of the brand technical contact."
          },
          "technicalContactJobTitle" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Job title of the brand technical contact."
          },
          "logoName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Uploaded and verified logo asset associated with the campaign."
          },
          "bannerName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Uploaded and verified banner asset associated with the campaign."
          },
          "screenshotUrl" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "A hosted image that pertains to the campaign."
          },
          "videoUrl" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "A hosted video that pertains to the campaign."
          }
        },
        "description" : "Campaign is generated by the 10DLC registry once the corresponding campaign request is approved. Each campaign is assigned a unique identifier - **campaignId**. Once a campaign is activated, limited information is published to the nnSR service for consumption by members of the ecosystem. When a campaign is suspended(reversible) or expired(non-reversible), campaign data is deleted from the nnSR service. Most attributes of campaignare immutable, including **usecase**, **vertical**, **brandId** and **cspId**. "
      },
      "ApiError_CSP_EX" : {
        "type" : "object",
        "properties" : {
          "code" : {
            "type" : "integer",
            "description" : "Error code",
            "format" : "int32",
            "example" : 501
          },
          "description" : {
            "type" : "string",
            "description" : "Error description",
            "example" : "Invalid parameter"
          },
          "fields" : {
            "uniqueItems" : true,
            "type" : "array",
            "description" : "Identifies the input parameter names that are causing the error. This replaces the deprecated 'field' property",
            "example" : [ "campaignId" ],
            "items" : {
              "type" : "string",
              "description" : "Identifies the input parameter names that are causing the error. This replaces the deprecated 'field' property",
              "example" : "[\"campaignId\"]"
            }
          }
        },
        "description" : "REST API error response"
      },
      "Metadata" : {
        "type" : "object",
        "properties" : {
          "mno" : {
            "type" : "string"
          },
          "mnoSupport" : {
            "type" : "boolean"
          },
          "mnoReview" : {
            "type" : "boolean"
          },
          "qualify" : {
            "type" : "boolean"
          },
          "minMsgSamples" : {
            "type" : "integer",
            "format" : "int32"
          },
          "reqSubscriberOptin" : {
            "type" : "boolean"
          },
          "reqSubscriberOptout" : {
            "type" : "boolean"
          },
          "reqSubscriberHelp" : {
            "type" : "boolean"
          },
          "noEmbeddedLink" : {
            "type" : "boolean"
          },
          "noEmbeddedPhone" : {
            "type" : "boolean"
          },
          "msgClass" : {
            "type" : "string"
          },
          "tpm" : {
            "type" : "integer",
            "format" : "int32"
          },
          "mmsTpm" : {
            "type" : "integer",
            "format" : "int32"
          },
          "tpmScope" : {
            "type" : "string"
          },
          "brandTier" : {
            "type" : "string"
          },
          "brandDailyCap" : {
            "type" : "integer",
            "format" : "int32"
          }
        },
        "description" : "<p>Metadata is a hashtable of MNO properties returned from brand use-case qualification or campaign submission.</p><table border=\"1\">\n  <tbody>\n  <tr>\n    <th>Property</th>\n    <th>MNO Specific</th>\n    <th>Data Type</th>\n    <th>Description</th>\n  </tr>\n  <tr>\n    <td>mno</td>\n    <td></td>\n    <td>String</td>\n    <td>Name of the MNO.</td>\n  </tr>\n  <tr>\n    <td>mnoSupport</td>\n    <td></td>\n    <td>Boolean</td>\n    <td>If 'false', then desired usecase cannot be supported by the MNO.</td>\n  </tr>\n  <tr>\n    <td>mnoReview</td>\n    <td></td>\n    <td>Boolean</td>\n    <td>If 'true', then the submitted campaign is subject to MNO (manual) review process. Campaign review status can be\n      access via TCR APIs for some of the MNOs.\n    </td>\n  </tr>\n  <tr>\n    <td>qualify</td>\n    <td></td>\n    <td>Boolean</td>\n    <td>If 'false', then brand does not qualify for the desired usecase on the MNO. CSP might consider getting brand\n      vetted by one of the approved external vetting provider.\n    </td>\n  </tr>\n  <tr>\n    <td>minMsgSamples</td>\n    <td></td>\n    <td>Integer</td>\n    <td>Minimum number of message samples required by MNO for submission of desired usecase.</td>\n  </tr>\n  <tr>\n    <td>reqSubscriberOptin</td>\n    <td></td>\n    <td>Boolean</td>\n    <td>If 'true' then MNO requires the subscriber to opt-into the campaign before the message may be sent to\n      the subscriber. The opt-in mechanism can be mobile or web opt-in.\n    </td>\n  </tr>\n  <tr>\n    <td>reqSubscriberOptout</td>\n    <td></td>\n    <td>Boolean</td>\n    <td>If 'true' then MNO requires the campaign to support an opt-out mechanism through MO stop keywords such as\n      'STOP', 'QUIT'. Upon receive the STOP message from a subscriber, a campaign must stop sending messages to the\n      subscriber immediately.\n    </td>\n  </tr>\n  <tr>\n    <td>reqSubscriberHelp</td>\n    <td></td>\n    <td>Boolean</td>\n    <td>If 'true' then MNO requires a campaign to support a 'help' mechanism through MO help keywords such as 'HELP',\n      'INFO'.\n    </td>\n  </tr>\n  <tr>\n    <td>noEmbeddedLink</td>\n    <td></td>\n    <td>Boolean</td>\n    <td>If 'true' then MNO forbids call-to-action link/URL to be embedded in all messages sent to the subscriber.</td>\n  </tr>\n  <tr>\n    <td>noEmbeddedPhone</td>\n    <td></td>\n    <td>Boolean</td>\n    <td>If 'true' then MNO forbids call-to-action phone number to be embedded in all messages sent to the subscriber.\n    </td>\n  </tr>\n  <tr>\n    <td>msgClass</td>\n    <td>AT&T</td>\n    <td>String</td>\n    <td>Message class qualified by brand for a desired usecase.</td>\n  </tr>\n  <tr>\n    <td>tpm</td>\n    <td>AT&T</td>\n    <td>Integer</td>\n    <td>SMS message TPM(throughput per minute) qualified by the brand for a desired usecase.</td>\n  </tr>\n  <tr>\n    <td>mmsTpm</td>\n    <td>AT&T</td>\n    <td>Integer</td>\n    <td>MMS message TPM(throughput per minute) qualified by the brand for a desired usecase.</td>\n  </tr>\n  <tr>\n    <td>tpmScope</td>\n    <td>AT&T</td>\n    <td>String</td>\n    <td>TPM restriction scope. Possible values: CAMPAIGN, PHONE_NUMBER. If scope is at PHONE_NUMBER level, then the TPM\n      rate-limiting imposed separately for each phone number provisioned to the campaign. CAMPAIGN level scope implies\n      rate-limiting imposed at campaign level.\n    </td>\n  </tr>\n  <tr>\n    <td>brandTier</td>\n    <td>T-Mobile</td>\n    <td>String</td>\n    <td>Daily message volume is restricted based on brand tier or brand qualifcation. The daily volume restriction\n      applies to brand across campaigns and CSPs. Please contact your message service provider for updated T-Mobile\n      terms. Possible values: LOW, LOWER_MID, UPPER_MID, TOP, UNCAPPED\n    </td>\n  </tr>\n  <tr>\n    <td>brandDailyCap</td>\n    <td>T-Mobile</td>\n    <td>Integer</td>\n    <td>Number of messages allowed per day on T-Mobile network. If the brandTier attribute is 'UNCAPPED', then this\n      attribute will be NULL.\n    </td>\n  </tr>\n  </tbody>\n</table>\n"
      },
      "CampaignSharingChain" : {
        "type" : "object",
        "properties" : {
          "sharedWithMe" : {
            "$ref" : "#/components/schemas/CampaignSharingStatus"
          },
          "sharedByMe" : {
            "$ref" : "#/components/schemas/CampaignSharingStatus"
          }
        }
      },
      "SimplifiedOsrPhoneWithCampaignRecordSet_CSP" : {
        "type" : "object",
        "properties" : {
          "records" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/SimplifiedOsrPhoneWithCampaign_CSP"
            }
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalRecords" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "SimplifiedOsrPhoneWithCampaign_CSP" : {
        "type" : "object",
        "properties" : {
          "nnid" : {
            "type" : "string"
          },
          "provisionedDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "current" : {
            "type" : "boolean"
          },
          "campaignUid" : {
            "type" : "string"
          }
        }
      },
      "RecordSetSimplifiedOsrPhoneWithPhone_CSP" : {
        "type" : "object",
        "properties" : {
          "records" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/SimplifiedOsrPhoneWithPhone_CSP"
            }
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalRecords" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "SimplifiedOsrPhoneWithPhone_CSP" : {
        "type" : "object",
        "properties" : {
          "nnid" : {
            "type" : "string"
          },
          "provisionedDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "current" : {
            "type" : "boolean"
          },
          "phoneNumber" : {
            "type" : "string"
          }
        }
      },
      "SharedCampaignBrand_CSP" : {
        "required" : [ "displayName", "email", "phone" ],
        "type" : "object",
        "properties" : {
          "entityType" : {
            "type" : "string",
            "description" : "Entity type behind the brand. This is the form of business establishment.",
            "enum" : [ "PRIVATE_PROFIT", "PUBLIC_PROFIT", "NON_PROFIT", "GOVERNMENT", "SOLE_PROPRIETOR" ]
          },
          "brandId" : {
            "type" : "string",
            "description" : "Unique identifier assigned to the brand by the registry.",
            "readOnly" : true
          },
          "companyName" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "(Required for Non-profit/private/public) Legal company name.",
            "example" : "ABC Inc."
          },
          "website" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Brand website URL and online presence.",
            "example" : "http://www.abcmobile.com"
          },
          "optionalAttributes" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object",
              "description" : "Optional brand attributes. Please refer to GET /enum/optionalAttributeNames for dictionary of optional attribute names."
            },
            "description" : "Optional brand attributes. Please refer to GET /enum/optionalAttributeNames for dictionary of optional attribute names."
          },
          "evpVettingScore" : {
            "type" : "integer",
            "description" : "External vetting score.",
            "format" : "int32"
          },
          "displayName" : {
            "maxLength" : 255,
            "minLength" : 1,
            "type" : "string",
            "description" : "Display or marketing name of the brand.",
            "example" : "ABC Mobile"
          },
          "phone" : {
            "maxLength" : 20,
            "minLength" : 1,
            "type" : "string",
            "description" : "Valid phone number in e.164 international format.",
            "example" : "+12024567890"
          },
          "email" : {
            "maxLength" : 100,
            "minLength" : 1,
            "type" : "string",
            "description" : "Valid email address of brand support contact."
          }
        },
        "description" : "A brand is a business identity behind the campaign."
      },
      "SharedCampaignDetails_CSP" : {
        "required" : [ "brandId", "campaignId", "description", "messageFlow", "termsAndConditions", "usecase" ],
        "type" : "object",
        "properties" : {
          "campaignId" : {
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier assigned by the registry for a campaign. This identifier is required by the NetNumber nnSR SMS enabling process of 10DLC."
          },
          "status" : {
            "type" : "string",
            "description" : "Current campaign status. Possible values: ACTIVE, EXPIRED. A newly created campaign defaults to ACTIVE status.",
            "enum" : [ "ACTIVE", "EXPIRED" ]
          },
          "createDate" : {
            "type" : "string",
            "description" : "Campaign created date.",
            "format" : "date-time"
          },
          "brandId" : {
            "maxLength" : 8,
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier of the brand associated with this campaign."
          },
          "usecase" : {
            "maxLength" : 50,
            "minLength" : 1,
            "type" : "string",
            "description" : "Campaign usecase. Must be of defined valid types. Use `/registry/enum/usecase` operation to retrieve usecases available for given brand."
          },
          "subUsecases" : {
            "uniqueItems" : true,
            "type" : "array",
            "description" : "Campaign sub-usecases. Must be of defined valid sub-usecase types. Use `/registry/enum/usecase` operation to retrieve list of valid sub-usecases",
            "items" : {
              "type" : "string",
              "description" : "Campaign sub-usecases. Must be of defined valid sub-usecase types. Use `/registry/enum/usecase` operation to retrieve list of valid sub-usecases"
            }
          },
          "description" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Summary description of this campaign."
          },
          "subscriberOptin" : {
            "type" : "boolean",
            "description" : "Does campaign require subscriber to opt-in before SMS is sent to subscriber?"
          },
          "subscriberOptout" : {
            "type" : "boolean",
            "description" : "Does campaign support subscriber opt-out keyword(s)?"
          },
          "subscriberHelp" : {
            "type" : "boolean",
            "description" : "Does campaign responds to help keyword(s)?"
          },
          "directLending" : {
            "type" : "boolean",
            "description" : "Direct lending or loan arrangement"
          },
          "numberPool" : {
            "type" : "boolean",
            "description" : "Does campaign utilize pool of phone numbers?"
          },
          "embeddedLink" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include URL link in SMS?"
          },
          "embeddedPhone" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include phone number in SMS?"
          },
          "termsAndConditions" : {
            "type" : "boolean",
            "description" : "Is terms & conditions accepted?"
          },
          "ageGated" : {
            "type" : "boolean",
            "description" : "Age gated message content in campaign."
          },
          "sample1" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. All campaign use cases require at least 1 message sample."
          },
          "sample2" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 2 or more message samples."
          },
          "sample3" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 3 or more message samples."
          },
          "sample4" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 4 or more message samples."
          },
          "sample5" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 5 message samples."
          },
          "messageFlow" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Message flow description."
          },
          "helpMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Help message of the campaign. MinLength length = 20 when subscriberHelp = true."
          },
          "optinKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-in keywords. Multiple keywords are comma separated without space.",
            "example" : "START,YES"
          },
          "optoutKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-out keywords. Multiple keywords are comma separated without space.",
            "example" : "STOP",
            "default" : "STOP"
          },
          "helpKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber help keywords. Multiple keywords are comma separated without space.",
            "example" : "HELP",
            "default" : "HELP"
          },
          "optinMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-in message. When subscriberOptin = true, must be empty or length >= 20."
          },
          "optoutMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-out message. MinLength length = 20 when subscriberOptout = true."
          },
          "privacyPolicyLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's privacy policy."
          },
          "termsAndConditionsLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's terms and conditions."
          },
          "embeddedLinkSample" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Sample of an embedded link that will be sent to subscribers."
          },
          "brand" : {
            "$ref" : "#/components/schemas/SharedCampaignBrand_CSP"
          }
        }
      },
      "SharedCampaign_CSP" : {
        "required" : [ "brandId", "campaignId", "description", "messageFlow", "termsAndConditions", "usecase" ],
        "type" : "object",
        "properties" : {
          "campaignId" : {
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier assigned by the registry for a campaign. This identifier is required by the NetNumber nnSR SMS enabling process of 10DLC."
          },
          "status" : {
            "type" : "string",
            "description" : "Current campaign status. Possible values: ACTIVE, EXPIRED. A newly created campaign defaults to ACTIVE status.",
            "enum" : [ "ACTIVE", "EXPIRED" ]
          },
          "createDate" : {
            "type" : "string",
            "description" : "Campaign created date.",
            "format" : "date-time"
          },
          "brandId" : {
            "maxLength" : 8,
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier of the brand associated with this campaign."
          },
          "usecase" : {
            "maxLength" : 50,
            "minLength" : 1,
            "type" : "string",
            "description" : "Campaign usecase. Must be of defined valid types. Use `/registry/enum/usecase` operation to retrieve usecases available for given brand."
          },
          "subUsecases" : {
            "uniqueItems" : true,
            "type" : "array",
            "description" : "Campaign sub-usecases. Must be of defined valid sub-usecase types. Use `/registry/enum/usecase` operation to retrieve list of valid sub-usecases",
            "items" : {
              "type" : "string",
              "description" : "Campaign sub-usecases. Must be of defined valid sub-usecase types. Use `/registry/enum/usecase` operation to retrieve list of valid sub-usecases"
            }
          },
          "description" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Summary description of this campaign."
          },
          "subscriberOptin" : {
            "type" : "boolean",
            "description" : "Does campaign require subscriber to opt-in before SMS is sent to subscriber?"
          },
          "subscriberOptout" : {
            "type" : "boolean",
            "description" : "Does campaign support subscriber opt-out keyword(s)?"
          },
          "subscriberHelp" : {
            "type" : "boolean",
            "description" : "Does campaign responds to help keyword(s)?"
          },
          "directLending" : {
            "type" : "boolean",
            "description" : "Direct lending or loan arrangement"
          },
          "numberPool" : {
            "type" : "boolean",
            "description" : "Does campaign utilize pool of phone numbers?"
          },
          "embeddedLink" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include URL link in SMS?"
          },
          "embeddedPhone" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include phone number in SMS?"
          },
          "termsAndConditions" : {
            "type" : "boolean",
            "description" : "Is terms & conditions accepted?"
          },
          "ageGated" : {
            "type" : "boolean",
            "description" : "Age gated message content in campaign."
          },
          "sample1" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. All campaign use cases require at least 1 message sample."
          },
          "sample2" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 2 or more message samples."
          },
          "sample3" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 3 or more message samples."
          },
          "sample4" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 4 or more message samples."
          },
          "sample5" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 5 message samples."
          },
          "messageFlow" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Message flow description."
          },
          "helpMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Help message of the campaign. MinLength length = 20 when subscriberHelp = true."
          },
          "optinKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-in keywords. Multiple keywords are comma separated without space.",
            "example" : "START,YES"
          },
          "optoutKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-out keywords. Multiple keywords are comma separated without space.",
            "example" : "STOP",
            "default" : "STOP"
          },
          "helpKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber help keywords. Multiple keywords are comma separated without space.",
            "example" : "HELP",
            "default" : "HELP"
          },
          "optinMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-in message. When subscriberOptin = true, must be empty or length >= 20."
          },
          "optoutMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-out message. MinLength length = 20 when subscriberOptout = true."
          },
          "privacyPolicyLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's privacy policy."
          },
          "termsAndConditionsLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's terms and conditions."
          },
          "embeddedLinkSample" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Sample of an embedded link that will be sent to subscribers."
          }
        },
        "description" : "Campaign is generated by the 10DLC registry once the corresponding campaign request is approved. Each campaign is assigned a unique identifier - **campaignId**. Once a campaign is activated, limited information is published to the nnSR service for consumption by members of the ecosystem. When a campaign is suspended(reversible) or expired(non-reversible), campaign data is deleted from the nnSR service. Most attributes of campaignare immutable, including **usecase**, **vertical**, **brandId** and **cspId**. "
      },
      "RecordSetSharedCampaign" : {
        "type" : "object",
        "properties" : {
          "records" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/SharedCampaign"
            }
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalRecords" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "SharedCampaign" : {
        "required" : [ "brandId", "campaignId", "description", "messageFlow", "termsAndConditions", "usecase" ],
        "type" : "object",
        "properties" : {
          "campaignId" : {
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier assigned by the registry for a campaign. This identifier is required by the NetNumber nnSR SMS enabling process of 10DLC."
          },
          "status" : {
            "type" : "string",
            "description" : "Current campaign status. Possible values: ACTIVE, EXPIRED. A newly created campaign defaults to ACTIVE status.",
            "enum" : [ "ACTIVE", "EXPIRED" ]
          },
          "createDate" : {
            "type" : "string",
            "description" : "Campaign created date.",
            "format" : "date-time"
          },
          "brandId" : {
            "maxLength" : 8,
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier of the brand associated with this campaign."
          },
          "usecase" : {
            "maxLength" : 50,
            "minLength" : 1,
            "type" : "string",
            "description" : "Campaign usecase. Must be of defined valid types. Use `/registry/enum/usecase` operation to retrieve usecases available for given brand."
          },
          "subUsecases" : {
            "uniqueItems" : true,
            "type" : "array",
            "description" : "Campaign sub-usecases. Must be of defined valid sub-usecase types. Use `/registry/enum/usecase` operation to retrieve list of valid sub-usecases",
            "items" : {
              "type" : "string",
              "description" : "Campaign sub-usecases. Must be of defined valid sub-usecase types. Use `/registry/enum/usecase` operation to retrieve list of valid sub-usecases"
            }
          },
          "description" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Summary description of this campaign."
          },
          "subscriberOptin" : {
            "type" : "boolean",
            "description" : "Does campaign require subscriber to opt-in before SMS is sent to subscriber?"
          },
          "subscriberOptout" : {
            "type" : "boolean",
            "description" : "Does campaign support subscriber opt-out keyword(s)?"
          },
          "subscriberHelp" : {
            "type" : "boolean",
            "description" : "Does campaign responds to help keyword(s)?"
          },
          "directLending" : {
            "type" : "boolean",
            "description" : "Direct lending or loan arrangement"
          },
          "numberPool" : {
            "type" : "boolean",
            "description" : "Does campaign utilize pool of phone numbers?"
          },
          "embeddedLink" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include URL link in SMS?"
          },
          "embeddedPhone" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include phone number in SMS?"
          },
          "termsAndConditions" : {
            "type" : "boolean",
            "description" : "Is terms & conditions accepted?"
          },
          "ageGated" : {
            "type" : "boolean",
            "description" : "Age gated message content in campaign."
          },
          "sample1" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. All campaign use cases require at least 1 message sample."
          },
          "sample2" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 2 or more message samples."
          },
          "sample3" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 3 or more message samples."
          },
          "sample4" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 4 or more message samples."
          },
          "sample5" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 5 message samples."
          },
          "messageFlow" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Message flow description."
          },
          "helpMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Help message of the campaign. MinLength length = 20 when subscriberHelp = true."
          },
          "optinKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-in keywords. Multiple keywords are comma separated without space.",
            "example" : "START,YES"
          },
          "optoutKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-out keywords. Multiple keywords are comma separated without space.",
            "example" : "STOP",
            "default" : "STOP"
          },
          "helpKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber help keywords. Multiple keywords are comma separated without space.",
            "example" : "HELP",
            "default" : "HELP"
          },
          "optinMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-in message. When subscriberOptin = true, must be empty or length >= 20."
          },
          "optoutMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-out message. MinLength length = 20 when subscriberOptout = true."
          },
          "privacyPolicyLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's privacy policy."
          },
          "termsAndConditionsLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's terms and conditions."
          },
          "embeddedLinkSample" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Sample of an embedded link that will be sent to subscribers."
          }
        },
        "description" : "Campaign is generated by the 10DLC registry once the corresponding campaign request is approved. Each campaign is assigned a unique identifier - **campaignId**. Once a campaign is activated, limited information is published to the nnSR service for consumption by members of the ecosystem. When a campaign is suspended(reversible) or expired(non-reversible), campaign data is deleted from the nnSR service. Most attributes of campaignare immutable, including **usecase**, **vertical**, **brandId** and **cspId**. "
      },
      "SharedCampaignRecordSet" : {
        "type" : "object",
        "properties" : {
          "records" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/SharedCampaign"
            }
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalRecords" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "CspProfile" : {
        "type" : "object",
        "properties" : {
          "cspId" : {
            "type" : "string"
          },
          "escalateEmail" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "techEmail" : {
            "type" : "string"
          },
          "financeEmail" : {
            "type" : "string"
          },
          "platformFreeTrialEnabled" : {
            "type" : "boolean"
          },
          "soleProprietorEnabled" : {
            "type" : "boolean"
          },
          "ucaasEnabled" : {
            "type" : "boolean"
          },
          "publicSafetyEnabled" : {
            "type" : "boolean"
          },
          "dpaSigned" : {
            "type" : "boolean"
          }
        }
      },
      "SmsOtpStatus" : {
        "required" : [ "brandId" ],
        "type" : "object",
        "properties" : {
          "brandId" : {
            "type" : "string",
            "description" : "Brand ID",
            "example" : "B123456"
          },
          "referenceId" : {
            "type" : "string",
            "description" : "Reference ID for tracking the status of the OTP request.",
            "example" : "OTP1234567"
          },
          "mobilePhone" : {
            "type" : "string",
            "description" : "Mobile phone number receiving the SMS OTP.",
            "example" : "+11234567890"
          },
          "requestDate" : {
            "type" : "string",
            "description" : "SMS OTP initial requested timestamp.",
            "format" : "date-time"
          },
          "verifyDate" : {
            "type" : "string",
            "description" : "OTP verification complete timestamp. ",
            "format" : "date-time"
          },
          "deliveryStatus" : {
            "type" : "string",
            "description" : "The most recent SMS delivery status as provided by SMS service provider, if supported by the SMS service provider. The delivery status information is not guaranteed to be timely or consistent with OTP verify status. This information should only be used to facilitate triaging SMS deliverbility issue.",
            "enum" : [ "DELIVERED_HANDSET", "DELIVERED_GATEWAY", "FAILED_ROUTING", "FAILED_BLOCKED", "FAILED_EXPIRED", "FAILED_UNKNOWN", "UNKNOWN_STATUS", "IN_TRANSIT" ]
          },
          "deliveryStatusDate" : {
            "type" : "string",
            "description" : "Timestamp corresponding to the updated SMS OTP delivery status. This field is null if <i>deliveryStatus</i> is null.",
            "format" : "date-time"
          },
          "deliveryStatusDetails" : {
            "maxLength" : 1024,
            "type" : "string",
            "description" : "OTP SMS delivery status details provided by the OTP SMS service provider, if supported by the SMS service provider."
          }
        },
        "description" : "SMS OTP attempt status details"
      },
      "ExternalVetting" : {
        "type" : "object",
        "properties" : {
          "evpId" : {
            "maxLength" : 10,
            "type" : "string",
            "description" : "External vetting provider ID for the brand."
          },
          "vettingId" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Unique ID that identifies a vetting transaction performed by a vetting provider. This ID is provided by the vetting provider at time of vetting."
          },
          "vettingToken" : {
            "maxLength" : 65535,
            "type" : "string",
            "description" : "Required by some providers for vetting record confirmation."
          },
          "vettingScore" : {
            "maximum" : 100,
            "minimum" : 0,
            "type" : "integer",
            "description" : "Vetting score ranging from 0-100.",
            "format" : "int32",
            "readOnly" : true
          },
          "vettingClass" : {
            "type" : "string",
            "description" : "Identifies the vetting classification."
          },
          "vettingStatus" : {
            "type" : "string",
            "description" : "Identifies the vetting request status.",
            "readOnly" : true,
            "enum" : [ "PENDING", "UNSCORE", "ACTIVE", "FAILED", "EXPIRED" ]
          },
          "reasons" : {
            "type" : "array",
            "description" : "The List of causes for FAILED ExternalVetting.",
            "readOnly" : true,
            "items" : {
              "type" : "string",
              "description" : "The List of causes for FAILED ExternalVetting.",
              "readOnly" : true
            }
          },
          "vettingDetails" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object",
              "description" : "Vetting provider specific details."
            },
            "description" : "Vetting provider specific details."
          },
          "vettedDate" : {
            "type" : "string",
            "description" : "Vetting effective date. This is the date when vetting was completed, or the starting effective date in ISO 8601 format. If this date is missing, then the vetting was not complete or not valid.",
            "format" : "date-time",
            "readOnly" : true
          },
          "createDate" : {
            "type" : "string",
            "description" : "Vetting submission date. This is the date when the vetting request is generated in ISO 8601 format.",
            "format" : "date-time",
            "readOnly" : true
          },
          "validUntil" : {
            "type" : "string",
            "description" : "Date assigned by vendor for vet expiration. This may differ from the actual date the vet expired in TCR (see expiration_date).",
            "format" : "date-time",
            "readOnly" : true
          },
          "expirationDate" : {
            "type" : "string",
            "description" : "Actual date the vet expired in TCR.",
            "format" : "date-time",
            "readOnly" : true
          }
        },
        "description" : "A brand's external vetting information."
      },
      "ExternalVettingImportRequest" : {
        "required" : [ "evpId" ],
        "type" : "object",
        "properties" : {
          "evpId" : {
            "maxLength" : 10,
            "minLength" : 1,
            "type" : "string",
            "description" : "External vetting provider ID recognized by TCR. Use API endpoint /enum/extVettingProvider to view list of supported vetting providers.",
            "example" : "CV"
          },
          "vettingId" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Unique ID that identifies a vetting transaction performed by a vetting provider. This ID is provided by the vetting provider at time of vetting.",
            "example" : "cv|1.0|cvmock|10dlc|###|###"
          },
          "vettingToken" : {
            "maxLength" : 65535,
            "type" : "string",
            "description" : "Required by some providers for vetting record confirmation.",
            "nullable" : true
          }
        },
        "description" : "A brand's external vetting information."
      },
      "AppealIdentityFeedback" : {
        "type" : "object",
        "properties" : {
          "category" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/FeedbackCategory"
            }
          }
        }
      },
      "BrandAppeal" : {
        "type" : "object",
        "properties" : {
          "brandId" : {
            "type" : "string"
          },
          "appealStatus" : {
            "type" : "string",
            "enum" : [ "PENDING", "COMPLETE" ]
          },
          "categoryList" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "attachmentUuidList" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "explanation" : {
            "type" : "string"
          },
          "appealStatusUpdateDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "createDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "appealOutcome" : {
            "$ref" : "#/components/schemas/BrandAppealOutcome"
          }
        }
      },
      "BrandAppealOutcome" : {
        "type" : "object",
        "properties" : {
          "vetStatus" : {
            "type" : "string"
          },
          "optionalAttributes" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            }
          },
          "feedback" : {
            "$ref" : "#/components/schemas/AppealIdentityFeedback"
          }
        }
      },
      "BrandAsset_CSP" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string",
            "enum" : [ "LOGO", "BANNER" ]
          },
          "attachmentUuid" : {
            "type" : "string"
          },
          "reasons" : {
            "type" : "string"
          },
          "verificationDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "validUntil" : {
            "type" : "string",
            "format" : "date-time"
          },
          "expirationDate" : {
            "type" : "string",
            "format" : "date-time"
          }
        }
      },
      "BrandAssetAppeal" : {
        "type" : "object",
        "properties" : {
          "brandId" : {
            "type" : "string"
          },
          "appealStatus" : {
            "type" : "string",
            "enum" : [ "PENDING", "COMPLETE" ]
          },
          "categoryList" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "attachmentUuidList" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "explanation" : {
            "type" : "string"
          },
          "appealStatusUpdateDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "createDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "assetName" : {
            "type" : "string"
          },
          "appealOutcome" : {
            "$ref" : "#/components/schemas/BrandAssetAppealOutcome"
          }
        }
      },
      "BrandAssetAppealFeedback" : {
        "type" : "object",
        "properties" : {
          "reasons" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "BrandAssetAppealOutcome" : {
        "type" : "object",
        "properties" : {
          "vetStatus" : {
            "type" : "string"
          },
          "feedback" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/BrandAssetAppealFeedback"
            }
          }
        }
      },
      "AttachmentInfo" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "fileName" : {
            "type" : "string"
          },
          "mimeType" : {
            "type" : "string"
          }
        }
      },
      "AppealExternalFeedback" : {
        "type" : "object",
        "properties" : {
          "reasons" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "ExternalVettingAppeal" : {
        "type" : "object",
        "properties" : {
          "brandId" : {
            "type" : "string"
          },
          "appealStatus" : {
            "type" : "string",
            "enum" : [ "PENDING", "COMPLETE" ]
          },
          "categoryList" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "attachmentUuidList" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "explanation" : {
            "type" : "string"
          },
          "appealStatusUpdateDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "createDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "evpId" : {
            "type" : "string"
          },
          "vettingId" : {
            "type" : "string"
          },
          "vettingClass" : {
            "type" : "string"
          },
          "appealOutcome" : {
            "$ref" : "#/components/schemas/ExternalVettingAppealOutcome"
          }
        }
      },
      "ExternalVettingAppealOutcome" : {
        "type" : "object",
        "properties" : {
          "vetStatus" : {
            "type" : "string"
          },
          "vetScore" : {
            "type" : "integer",
            "format" : "int32"
          },
          "optionalAttributes" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            }
          },
          "feedback" : {
            "$ref" : "#/components/schemas/AppealExternalFeedback"
          }
        }
      },
      "RecordSetBrand_CSP" : {
        "type" : "object",
        "properties" : {
          "records" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Brand_CSP"
            }
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalRecords" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "CampaignVerification_CSP" : {
        "type" : "object",
        "properties" : {
          "agentId" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "RCS Agent associated with the campaign.",
            "example" : "AGENT123"
          },
          "vettingId" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Unique ID that identifies a vetting transaction performed by a vetting provider. This ID is provided by the vetting provider at time of vetting.",
            "readOnly" : true
          },
          "vettingToken" : {
            "maxLength" : 65535,
            "type" : "string",
            "description" : "Required by some providers for vetting record confirmation.",
            "readOnly" : true
          },
          "vettingStatus" : {
            "type" : "string",
            "description" : "The status of the vetting record.",
            "readOnly" : true,
            "example" : "PENDING",
            "enum" : [ "PENDING", "UNVERIFIED", "VERIFIED", "EXPIRED" ]
          },
          "reasons" : {
            "type" : "array",
            "description" : "The feedback list of the vetting record.",
            "readOnly" : true,
            "items" : {
              "type" : "string",
              "description" : "The feedback list of the vetting record.",
              "readOnly" : true
            }
          },
          "createDate" : {
            "type" : "string",
            "description" : "Verification submission date. This is the date when the verification request is generated in ISO 8601 format.",
            "format" : "date-time",
            "readOnly" : true,
            "example" : "2026-05-27T10:31:19.467Z"
          },
          "vettedDate" : {
            "type" : "string",
            "description" : "Verification effective date. This is the date when verification was completed, or the starting effective date in ISO 8601 format. If this date is missing, then the verification was not complete or not valid.",
            "format" : "date-time",
            "readOnly" : true,
            "example" : "2026-05-27T10:31:19.467Z"
          },
          "validUntil" : {
            "type" : "string",
            "description" : "Date assigned by vendor for verification expiration. This may differ from the actual date the verification expired in TCR (see expiration_date).",
            "format" : "date-time",
            "readOnly" : true,
            "example" : "2026-05-27T10:31:19.467Z"
          },
          "expirationDate" : {
            "type" : "string",
            "description" : "Actual date the verification expired in TCR.",
            "format" : "date-time",
            "readOnly" : true,
            "example" : "2026-05-27T10:31:19.467Z"
          }
        }
      },
      "CampaignRecordSet_CSP" : {
        "type" : "object",
        "properties" : {
          "records" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Campaign_CSP"
            }
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalRecords" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "Campaign_CSP" : {
        "required" : [ "actionTriggerMessages", "bannerName", "billingCategory", "brandId", "campaignId", "color", "cspId", "description", "displayName", "hostingRegion", "logoName", "messageFlow", "messageTypes", "mock", "optinFlow", "optoutFlow", "shortDescription", "subUsecases", "technicalContactEmail", "technicalContactJobTitle", "technicalContactName", "termsAndConditions", "usecase" ],
        "type" : "object",
        "properties" : {
          "campaignId" : {
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier assigned by the registry for a campaign. This identifier is required by the NetNumber nnSR SMS enabling process of 10DLC."
          },
          "cspId" : {
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier of the CSP associated with this campaign."
          },
          "resellerId" : {
            "maxLength" : 8,
            "type" : "string",
            "description" : "Alphanumeric identifier of the reseller that you want to associate with this campaign."
          },
          "status" : {
            "type" : "string",
            "description" : "Current campaign status. Possible values: ACTIVE, EXPIRED. A newly created campaign defaults to ACTIVE status.",
            "enum" : [ "ACTIVE", "EXPIRED" ]
          },
          "createDate" : {
            "type" : "string",
            "description" : "Campaign created date.",
            "format" : "date-time"
          },
          "autoRenewal" : {
            "type" : "boolean",
            "description" : "Campaign subscription auto-renewal status. If true, then campaign will automatically renewal at the end of billing cycle."
          },
          "billedDate" : {
            "type" : "string",
            "description" : "Campaign recent billed date.",
            "format" : "date-time"
          },
          "brandId" : {
            "maxLength" : 8,
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier of the brand associated with this campaign."
          },
          "vertical" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Business/industry segment of this campaign (Deprecated). Must be of defined valid types. Use `/registry/enum/vertical` operation to retrieve verticals available for given brand, vertical combination.",
            "deprecated" : true
          },
          "usecase" : {
            "maxLength" : 50,
            "minLength" : 1,
            "type" : "string",
            "description" : "Campaign usecase. Must be of defined valid types. Use `/registry/enum/usecase` operation to retrieve usecases available for given brand."
          },
          "subUsecases" : {
            "uniqueItems" : true,
            "type" : "array",
            "description" : "Campaign sub-usecases. Must be of defined valid sub-usecase types. Use `/registry/enum/usecase` operation to retrieve list of valid sub-usecases",
            "items" : {
              "type" : "string",
              "description" : "Campaign sub-usecases. Must be of defined valid sub-usecase types. Use `/registry/enum/usecase` operation to retrieve list of valid sub-usecases"
            }
          },
          "channelId" : {
            "type" : "string"
          },
          "description" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Summary description of this campaign."
          },
          "embeddedLink" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include URL link in SMS?",
            "default" : false
          },
          "embeddedPhone" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include phone number in SMS?",
            "default" : false
          },
          "termsAndConditions" : {
            "type" : "boolean",
            "description" : "Is terms & conditions accepted?"
          },
          "numberPool" : {
            "type" : "boolean",
            "description" : "Does campaign utilize pool of phone numbers?",
            "default" : false
          },
          "ageGated" : {
            "type" : "boolean",
            "description" : "Age gated message content in campaign."
          },
          "directLending" : {
            "type" : "boolean",
            "description" : "Direct lending or loan arrangement"
          },
          "subscriberOptin" : {
            "type" : "boolean",
            "description" : "Does campaign require subscriber to opt-in before SMS is sent to subscriber?",
            "default" : false
          },
          "subscriberOptout" : {
            "type" : "boolean",
            "description" : "Does campaign support subscriber opt-out keyword(s)?",
            "default" : false
          },
          "subscriberHelp" : {
            "type" : "boolean",
            "description" : "Does campaign responds to help keyword(s)?",
            "default" : false
          },
          "sample1" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. All campaign use cases require at least 1 message sample."
          },
          "sample2" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 2 or more message samples."
          },
          "sample3" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 3 or more message samples."
          },
          "sample4" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 4 or more message samples."
          },
          "sample5" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 5 message samples."
          },
          "messageFlow" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Message flow description."
          },
          "helpMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Help message of the campaign. MinLength length = 20 when subscriberHelp = true."
          },
          "referenceId" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Caller supplied campaign reference ID. If supplied, the value must be unique across all submitted campaigns. Can be used to prevent duplicate campaign registrations."
          },
          "mock" : {
            "type" : "boolean",
            "description" : "Campaign created from mock brand. Mocked campaign cannot be shared with an upstream CNP."
          },
          "nextRenewalOrExpirationDate" : {
            "type" : "string",
            "description" : "When the campaign would be due for its next renew/bill date.",
            "format" : "date",
            "example" : "2000-01-01"
          },
          "expirationDate" : {
            "type" : "string",
            "description" : "When the campaign was deactivated.",
            "format" : "date-time"
          },
          "optinKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-in keywords. Multiple keywords are comma separated without space.",
            "example" : "START,YES"
          },
          "optoutKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-out keywords. Multiple keywords are comma separated without space.",
            "example" : "STOP",
            "default" : "STOP"
          },
          "helpKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber help keywords. Multiple keywords are comma separated without space.",
            "example" : "HELP",
            "default" : "HELP"
          },
          "optinMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-in message. When subscriberOptin = true, must be empty or length >= 20."
          },
          "optoutMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-out message. MinLength length = 20 when subscriberOptout = true."
          },
          "privacyPolicyLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's privacy policy."
          },
          "termsAndConditionsLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's terms and conditions."
          },
          "embeddedLinkSample" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Sample of an embedded link that will be sent to subscribers."
          },
          "displayName" : {
            "maxLength" : 40,
            "type" : "string",
            "description" : "The RCS campaign name."
          },
          "hostingRegion" : {
            "type" : "string",
            "description" : "Where the RCS campaign will run.",
            "enum" : [ "NORTH_AMERICA", "EUROPE", "ASIA_PACIFIC" ]
          },
          "billingCategory" : {
            "type" : "string",
            "description" : "CSPs can select the type of RCS campaign that will run. Options include conversational (for messaging campaigns that expect a back-and-forth exchange with consumers)or nonconversational (for messaging campaigns that expect a minimal amount of replies from consumers).",
            "enum" : [ "CONVERSATIONAL", "NON_CONVERSATIONAL" ]
          },
          "shortDescription" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "A high-level overview that describes what the campaign is about"
          },
          "color" : {
            "maxLength" : 6,
            "type" : "string",
            "description" : "The color to display on various UI elements of the campaign."
          },
          "phones" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 50,
              "type" : "string",
              "description" : "A phone number to be associated with the campaign. A single phone number is required, but multiple numbers are supported."
            }
          },
          "phoneLabels" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 25,
              "type" : "string",
              "description" : "The label to display next to the associated phone number. Labels for multiple phone numbers are supported."
            }
          },
          "emails" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 100,
              "type" : "string",
              "description" : "An email address to be associated with the campaign. A single email address is required, but multiple emails are supported."
            }
          },
          "emailLabels" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 25,
              "type" : "string",
              "description" : "The label to display next to the associated email address. Labels for multiple email addresses are supported."
            }
          },
          "websites" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 225,
              "type" : "string",
              "description" : "A website URL to be associated with the campaign. A single website URL is required, but multiple URLs are supported."
            }
          },
          "websiteLabels" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 25,
              "type" : "string",
              "description" : "The label to display next to the associated website. Labels for multiple websites are supported."
            }
          },
          "actionTriggerMessages" : {
            "maxLength" : 2000,
            "type" : "string",
            "description" : "A description of consumer actions that will trigger campaign messages."
          },
          "messageTypes" : {
            "maxLength" : 2000,
            "type" : "string",
            "description" : "A high-level description of the types of messages that will be sent."
          },
          "optinFlow" : {
            "maxLength" : 2000,
            "type" : "string",
            "description" : "A description of how consumers give consent to receive the messaging campaign."
          },
          "optoutFlow" : {
            "maxLength" : 2000,
            "type" : "string",
            "description" : "A description of how consumers can tell the brand to stop sending campaign messages."
          },
          "technicalContactName" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Name of a brand contact that can be reached in the event of technical difficulties with the RCS campaign."
          },
          "technicalContactEmail" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Email address of the brand technical contact."
          },
          "technicalContactJobTitle" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Job title of the brand technical contact."
          },
          "logoName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Uploaded and verified logo asset associated with the campaign."
          },
          "bannerName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Uploaded and verified banner asset associated with the campaign."
          },
          "screenshotUrl" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "A hosted image that pertains to the campaign."
          },
          "videoUrl" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "A hosted video that pertains to the campaign."
          }
        },
        "description" : "Campaign is generated by the 10DLC registry once the corresponding campaign request is approved. Each campaign is assigned a unique identifier - **campaignId**. Once a campaign is activated, limited information is published to the nnSR service for consumption by members of the ecosystem. When a campaign is suspended(reversible) or expired(non-reversible), campaign data is deleted from the nnSR service. Most attributes of campaignare immutable, including **usecase**, **vertical**, **brandId** and **cspId**. "
      },
      "RecordSetCampaign_CSP" : {
        "type" : "object",
        "properties" : {
          "records" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Campaign_CSP"
            }
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalRecords" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ResellerRecordSet" : {
        "type" : "object",
        "properties" : {
          "records" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Reseller"
            }
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalRecords" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "RecordSetReseller" : {
        "type" : "object",
        "properties" : {
          "records" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Reseller"
            }
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalRecords" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "CampaignNudge" : {
        "required" : [ "nudgeIntent" ],
        "type" : "object",
        "properties" : {
          "nudgeIntent" : {
            "type" : "string",
            "description" : "Nudge intention. Use API endpoint /enum/nudgeIntent to view list of supported nudge intent."
          },
          "description" : {
            "maxLength" : 1024,
            "type" : "string",
            "description" : "Description of the nudge intention"
          }
        }
      },
      "ExternalVettingOrderRequest" : {
        "required" : [ "evpId" ],
        "type" : "object",
        "properties" : {
          "evpId" : {
            "maxLength" : 10,
            "minLength" : 1,
            "type" : "string",
            "description" : "External vetting provider ID for the brand."
          },
          "vettingClass" : {
            "type" : "string",
            "description" : "Identifies the vetting classification."
          },
          "additionalRequestPayload" : {
            "type" : "string",
            "description" : "Additional brand information in json format. Required for POLITICAL type vets.",
            "example" : "{\"requestorFirstName\":\"John\",\"requestorLastName\":\"Doe\",\"locale\":\"Federal\",\"fecCommitteeTypeCode\":\"Y\",\"committeeId\":\"00000\",\"candidateType\":\"City Mayor\",\"stateLocalCommitteeType\":\"State\",\"localCommitteeState\":\"NC\",\"localCommitteeMunicipality\":\"Some Locality\",\"tribalLocation\":\"US\",\"filingUrl\":\"https://sample.com\",\"filingRecordUrlInstructions\":\"Sample Instructions\",\"filingEmail\":\"contact@example.com\",\"electionDate\":\"2022-12-26\",\"pinPreference\":\"Express\"}"
          }
        }
      },
      "CampaignVerification" : {
        "type" : "object",
        "properties" : {
          "agentId" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "RCS Agent associated with the campaign.",
            "example" : "AGENT123"
          },
          "vettingId" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Unique ID that identifies a vetting transaction performed by a vetting provider. This ID is provided by the vetting provider at time of vetting.",
            "readOnly" : true
          },
          "vettingToken" : {
            "maxLength" : 65535,
            "type" : "string",
            "description" : "Required by some providers for vetting record confirmation.",
            "readOnly" : true
          },
          "vettingStatus" : {
            "type" : "string",
            "description" : "The status of the vetting record.",
            "readOnly" : true,
            "example" : "PENDING",
            "enum" : [ "PENDING", "UNVERIFIED", "VERIFIED", "EXPIRED" ]
          },
          "reasons" : {
            "type" : "array",
            "description" : "The feedback list of the vetting record.",
            "readOnly" : true,
            "items" : {
              "type" : "string",
              "description" : "The feedback list of the vetting record.",
              "readOnly" : true
            }
          },
          "createDate" : {
            "type" : "string",
            "description" : "Verification submission date. This is the date when the verification request is generated in ISO 8601 format.",
            "format" : "date-time",
            "readOnly" : true,
            "example" : "2026-05-27T10:31:19.467Z"
          },
          "vettedDate" : {
            "type" : "string",
            "description" : "Verification effective date. This is the date when verification was completed, or the starting effective date in ISO 8601 format. If this date is missing, then the verification was not complete or not valid.",
            "format" : "date-time",
            "readOnly" : true,
            "example" : "2026-05-27T10:31:19.467Z"
          },
          "validUntil" : {
            "type" : "string",
            "description" : "Date assigned by vendor for verification expiration. This may differ from the actual date the verification expired in TCR (see expiration_date).",
            "format" : "date-time",
            "readOnly" : true,
            "example" : "2026-05-27T10:31:19.467Z"
          },
          "expirationDate" : {
            "type" : "string",
            "description" : "Actual date the verification expired in TCR.",
            "format" : "date-time",
            "readOnly" : true,
            "example" : "2026-05-27T10:31:19.467Z"
          }
        }
      },
      "CampaignVerificationRequest" : {
        "required" : [ "agentId" ],
        "type" : "object",
        "properties" : {
          "agentId" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "RCS Agent associated with the campaign.",
            "example" : "AGENT123"
          }
        }
      },
      "UsecaseMetadata" : {
        "type" : "object",
        "properties" : {
          "usecase" : {
            "type" : "string"
          },
          "monthlyFee" : {
            "type" : "number"
          },
          "quarterlyFee" : {
            "type" : "number"
          },
          "annualFee" : {
            "type" : "number"
          },
          "minSubUsecases" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maxSubUsecases" : {
            "type" : "integer",
            "format" : "int32"
          },
          "greyoutFields" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "mnoMetadata" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Metadata"
            }
          }
        }
      },
      "CampaignSubmissionResponse" : {
        "required" : [ "campaignId" ],
        "type" : "object",
        "properties" : {
          "campaignId" : {
            "maxLength" : 10,
            "minLength" : 1,
            "type" : "string",
            "description" : "Campaign identifier",
            "example" : "C123456"
          },
          "mnoMetadata" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Metadata"
            },
            "description" : "Map of key (MNO network identifier) to value (MNO campaign metadata)."
          }
        }
      },
      "ResubmitCampaign" : {
        "type" : "object",
        "properties" : {
          "mnoIds" : {
            "uniqueItems" : true,
            "type" : "array",
            "example" : [ ],
            "items" : {
              "type" : "integer",
              "format" : "int64"
            }
          }
        },
        "description" : "Re-submit existing campaign"
      },
      "SendSmsOtpResponse" : {
        "type" : "object",
        "properties" : {
          "brandId" : {
            "type" : "string",
            "description" : "Unique identifier assigned to the brand by the registry.",
            "readOnly" : true,
            "example" : "BS2K889"
          },
          "referenceId" : {
            "type" : "string",
            "description" : "Reference ID for querying the delivery status of the OTP request",
            "readOnly" : true,
            "example" : "OTPK6RSGTV"
          }
        },
        "description" : "Response returned from an SMS OTP request submission."
      },
      "SendSmsOtpRequest" : {
        "required" : [ "pinSms" ],
        "type" : "object",
        "properties" : {
          "pinSms" : {
            "type" : "string",
            "description" : "Template OTP message to be sent to the brand's mobilePhone. Must contain either @OTP_PIN@ or @OTP_YES@ macro element. If @OTP_YES@ macro is only with SMS reply confirmation flow.",
            "example" : "Your verification code is @OTP_PIN@"
          },
          "successSms" : {
            "type" : "string",
            "description" : "SMS to be sent to the brand's mobilePhone upon successful SMS reply OTP confirmation. This field is optional.",
            "example" : "Your verification code has been confirmed successfully"
          }
        },
        "description" : "SMS OTP request."
      },
      "CampaignRequest" : {
        "required" : [ "actionTriggerMessages", "bannerName", "billingCategory", "brandId", "color", "displayName", "hostingRegion", "logoName", "messageTypes", "optinFlow", "optoutFlow", "resellerId", "shortDescription", "technicalContactEmail", "technicalContactJobTitle", "technicalContactName", "usecase" ],
        "type" : "object",
        "properties" : {
          "brandId" : {
            "maxLength" : 8,
            "minLength" : 1,
            "type" : "string",
            "description" : "Alphanumeric identifier of the brand associated with this campaign."
          },
          "channelId" : {
            "type" : "string"
          },
          "usecase" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Campaign usecase. Must be of defined valid types. Use `/registry/enum/usecase` operation to retrieve usecases available for given brand."
          },
          "subUsecases" : {
            "uniqueItems" : true,
            "type" : "array",
            "description" : "Campaign sub-usecases. Must be of defined valid sub-usecase types. Use `/registry/enum/usecase` operation to retrieve list of valid sub-usecases",
            "items" : {
              "type" : "string",
              "description" : "Campaign sub-usecases. Must be of defined valid sub-usecase types. Use `/registry/enum/usecase` operation to retrieve list of valid sub-usecases"
            }
          },
          "resellerId" : {
            "maxLength" : 8,
            "type" : "string",
            "description" : "Alphanumeric identifier of the reseller that you want to associate with this campaign."
          },
          "description" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Summary description of this campaign."
          },
          "embeddedLink" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include URL link in SMS?",
            "default" : false
          },
          "embeddedPhone" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include phone number in SMS?",
            "default" : false
          },
          "termsAndConditions" : {
            "type" : "boolean",
            "description" : "Is terms & conditions accepted?",
            "default" : true
          },
          "numberPool" : {
            "type" : "boolean",
            "description" : "Does campaign utilize pool of phone numbers?",
            "default" : false
          },
          "ageGated" : {
            "type" : "boolean",
            "description" : "Age gated message content in campaign.",
            "default" : false
          },
          "directLending" : {
            "type" : "boolean",
            "description" : "Direct lending or loan arrangement",
            "default" : false
          },
          "subscriberOptin" : {
            "type" : "boolean",
            "description" : "Does campaign require subscriber to opt-in before SMS is sent to subscriber?",
            "default" : false
          },
          "subscriberOptout" : {
            "type" : "boolean",
            "description" : "Does campaign support subscriber opt-out keyword(s)?",
            "default" : false
          },
          "subscriberHelp" : {
            "type" : "boolean",
            "description" : "Does campaign responds to help keyword(s)?",
            "default" : false
          },
          "sample1" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. All campaign use cases require at least 1 message sample."
          },
          "sample2" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 2 or more message samples."
          },
          "sample3" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 3 or more message samples."
          },
          "sample4" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 4 or more message samples."
          },
          "sample5" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 5 message samples."
          },
          "messageFlow" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Message flow description."
          },
          "helpMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Help message of the campaign. MinLength length = 20 when subscriberHelp = true."
          },
          "mnoIds" : {
            "uniqueItems" : true,
            "type" : "array",
            "description" : "Submit campaign to given list of MNOs by MNO's network ID. Default is all MNOs if no value provided.",
            "nullable" : true,
            "example" : [ ],
            "items" : {
              "type" : "integer",
              "description" : "Submit campaign to given list of MNOs by MNO's network ID. Default is all MNOs if no value provided.",
              "format" : "int64",
              "nullable" : true
            }
          },
          "referenceId" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Caller supplied campaign reference ID. If supplied, the value must be unique across all submitted campaigns. Can be used to prevent duplicate campaign registrations."
          },
          "autoRenewal" : {
            "type" : "boolean",
            "description" : "Campaign subscription auto-renewal status. If true, then campaign will automatically renewal at the end of billing cycle.",
            "default" : true
          },
          "tag" : {
            "uniqueItems" : true,
            "type" : "array",
            "description" : "Tags to be set on the Campaign.",
            "nullable" : true,
            "example" : [ ],
            "items" : {
              "type" : "string",
              "description" : "Tags to be set on the Campaign.",
              "nullable" : true,
              "example" : "[]"
            }
          },
          "optinKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-in keywords. Multiple keywords are comma separated without space.",
            "example" : "START,YES"
          },
          "optoutKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-out keywords. Multiple keywords are comma separated without space.",
            "example" : "STOP",
            "default" : "STOP"
          },
          "helpKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber help keywords. Multiple keywords are comma separated without space.",
            "example" : "HELP",
            "default" : "HELP"
          },
          "optinMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-in message. When subscriberOptin = true, must be empty or length >= 20."
          },
          "optoutMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-out message. MinLength length = 20 when subscriberOptout = true."
          },
          "privacyPolicyLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's privacy policy."
          },
          "termsAndConditionsLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's terms and conditions."
          },
          "embeddedLinkSample" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Sample of an embedded link that will be sent to subscribers."
          },
          "displayName" : {
            "maxLength" : 40,
            "type" : "string",
            "description" : "The RCS campaign name."
          },
          "hostingRegion" : {
            "type" : "string",
            "description" : "Where the RCS campaign will run.",
            "enum" : [ "NORTH_AMERICA", "EUROPE", "ASIA_PACIFIC" ]
          },
          "billingCategory" : {
            "type" : "string",
            "description" : "CSPs can select the type of RCS campaign that will run. Options include conversational (for messaging campaigns that expect a back-and-forth exchange with consumers)or nonconversational (for messaging campaigns that expect a minimal amount of replies from consumers).",
            "enum" : [ "CONVERSATIONAL", "NON_CONVERSATIONAL" ]
          },
          "shortDescription" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "A high-level overview that describes what the campaign is about"
          },
          "color" : {
            "maxLength" : 6,
            "type" : "string",
            "description" : "The color to display on various UI elements of the campaign."
          },
          "phones" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 50,
              "type" : "string",
              "description" : "A phone number to be associated with the campaign. A single phone number is required, but multiple numbers are supported."
            }
          },
          "phoneLabels" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 25,
              "type" : "string",
              "description" : "The label to display next to the associated phone number. Labels for multiple phone numbers are supported."
            }
          },
          "emails" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 100,
              "type" : "string",
              "description" : "An email address to be associated with the campaign. A single email address is required, but multiple emails are supported."
            }
          },
          "emailLabels" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 25,
              "type" : "string",
              "description" : "The label to display next to the associated email address. Labels for multiple email addresses are supported."
            }
          },
          "websites" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 225,
              "type" : "string",
              "description" : "A website URL to be associated with the campaign. A single website URL is required, but multiple URLs are supported."
            }
          },
          "websiteLabels" : {
            "maxItems" : 3,
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "maxLength" : 25,
              "type" : "string",
              "description" : "The label to display next to the associated website. Labels for multiple websites are supported."
            }
          },
          "actionTriggerMessages" : {
            "maxLength" : 2000,
            "type" : "string",
            "description" : "A description of consumer actions that will trigger campaign messages."
          },
          "messageTypes" : {
            "maxLength" : 2000,
            "type" : "string",
            "description" : "A high-level description of the types of messages that will be sent."
          },
          "optinFlow" : {
            "maxLength" : 2000,
            "type" : "string",
            "description" : "A description of how consumers give consent to receive the messaging campaign."
          },
          "optoutFlow" : {
            "maxLength" : 2000,
            "type" : "string",
            "description" : "A description of how consumers can tell the brand to stop sending campaign messages."
          },
          "technicalContactName" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Name of a brand contact that can be reached in the event of technical difficulties with the RCS campaign."
          },
          "technicalContactEmail" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Email address of the brand technical contact."
          },
          "technicalContactJobTitle" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Job title of the brand technical contact."
          },
          "logoName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Uploaded and verified logo asset associated with the campaign."
          },
          "bannerName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Uploaded and verified banner asset associated with the campaign."
          },
          "screenshotUrl" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "A hosted image that pertains to the campaign."
          },
          "videoUrl" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "A hosted video that pertains to the campaign."
          }
        },
        "description" : "CampaignRequest object describes the campaign to be submitted via '/campaignBuilder/brand/{brandId}/usecase/{usecase}' operation. It is also used in operations for retrieving status of campaign request and for updating a pending request. "
      },
      "UpdateBrand_CSP" : {
        "required" : [ "brandRelationship", "country", "displayName", "email", "entityType" ],
        "type" : "object",
        "properties" : {
          "entityType" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Entity type behind the brand. This is the form of business establishment.",
            "example" : "PRIVATE_PROFIT"
          },
          "firstName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "First or given name. Applicable to SOLE_PROPRIETOR entity type.",
            "example" : "John"
          },
          "lastName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Last or Surname. Applicable to SOLE_PROPRIETOR entity type.",
            "example" : "Doe"
          },
          "displayName" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Display or marketing name of the brand.",
            "example" : "ABC Mobile"
          },
          "companyName" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "(Required for Non-profit/private/public) Legal company name.",
            "example" : "ABC Inc."
          },
          "ein" : {
            "maxLength" : 21,
            "type" : "string",
            "description" : "(Required for Non-profit) Government assigned corporate tax ID. EIN is 9-digits in U.S.",
            "example" : "111111111"
          },
          "einIssuingCountry" : {
            "maxLength" : 2,
            "type" : "string",
            "description" : "ISO2 2 characters country code. Example: US - United States",
            "example" : "US"
          },
          "phone" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Valid phone number in e.164 international format.",
            "example" : "+12024567890"
          },
          "street" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Street number and name.",
            "example" : "123 6th Ave"
          },
          "city" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "City name",
            "example" : "New York"
          },
          "state" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "State. Must be 2 letters code for United States.",
            "example" : "NY"
          },
          "postalCode" : {
            "maxLength" : 10,
            "type" : "string",
            "description" : "Postal codes. Use 5 digit zipcode for United States",
            "example" : "10001"
          },
          "country" : {
            "maxLength" : 2,
            "type" : "string",
            "description" : "ISO2 2 characters country code. Example: US - United States",
            "example" : "US"
          },
          "email" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Valid email address of brand support contact."
          },
          "referenceId" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Caller supplied brand reference ID. If supplied, the value must be unique across all submitted brands. Can be used to prevent duplicate brand registrations."
          },
          "stockSymbol" : {
            "maxLength" : 10,
            "type" : "string",
            "description" : "(Required for public company) stock symbol.",
            "example" : "ABC"
          },
          "stockExchange" : {
            "type" : "string",
            "description" : "(Required for public company) stock exchange.",
            "example" : "NASDAQ"
          },
          "ipAddress" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "IP address of the browser requesting to create brand identity."
          },
          "website" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Brand website URL and online presence.",
            "example" : "http://www.abcmobile.com"
          },
          "brandRelationship" : {
            "type" : "string",
            "description" : "Brand relationship to the CSP",
            "example" : "BASIC_ACCOUNT"
          },
          "vertical" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "(Required for all entity types except sole proprietor) vertical or industry segment of the brand."
          },
          "altBusinessId" : {
            "maxLength" : 50,
            "type" : "string",
            "description" : "Alternate business identifier"
          },
          "altBusinessIdType" : {
            "type" : "string",
            "description" : "Alternate business identifier type. e.g. DUNS, LEI, GIIN."
          },
          "mobilePhone" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Valid mobile phone number in e.164 international format.",
            "example" : "+12024567890"
          },
          "businessContactEmail" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "The email of the business contact for a public profit brand.",
            "example" : "johndoe@abc.com"
          }
        },
        "description" : "A brand is a business or individual identity behind the campaign."
      },
      "UpdateCampaign_CSP" : {
        "type" : "object",
        "properties" : {
          "resellerId" : {
            "maxLength" : 8,
            "type" : "string",
            "description" : "Alphanumeric identifier of the reseller that you want to associate with this campaign."
          },
          "description" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Summary description of this campaign."
          },
          "sample1" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. All campaign use cases require at least 1 message sample."
          },
          "sample2" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 2 or more message samples."
          },
          "sample3" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 3 or more message samples."
          },
          "sample4" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 4 or more message samples."
          },
          "sample5" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Message sample. Some campaign use cases require 5 message samples."
          },
          "messageFlow" : {
            "maxLength" : 4096,
            "minLength" : 40,
            "type" : "string",
            "description" : "Message flow description."
          },
          "helpMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Help message of the campaign. MinLength length = 20 when subscriberHelp = true."
          },
          "autoRenewal" : {
            "type" : "boolean",
            "description" : "Campaign subscription auto-renewal status. If true, then campaign will automatically renewal at the end of billing cycle.",
            "default" : true
          },
          "optinKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-in keywords. Multiple keywords are comma separated without space.",
            "example" : "START,YES"
          },
          "optoutKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber opt-out keywords. Multiple keywords are comma separated without space.",
            "example" : "STOP",
            "default" : "STOP"
          },
          "helpKeywords" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Subscriber help keywords. Multiple keywords are comma separated without space.",
            "example" : "HELP",
            "default" : "HELP"
          },
          "optinMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-in message. When subscriberOptin = true, must be empty or length >= 20."
          },
          "optoutMessage" : {
            "maxLength" : 1024,
            "minLength" : 20,
            "type" : "string",
            "description" : "Subscriber opt-out message. MinLength length = 20 when subscriberOptout = true."
          },
          "privacyPolicyLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's privacy policy."
          },
          "termsAndConditionsLink" : {
            "maxLength" : 2048,
            "type" : "string",
            "description" : "Link to the campaign's terms and conditions."
          },
          "embeddedLinkSample" : {
            "maxLength" : 255,
            "type" : "string",
            "description" : "Sample of an embedded link that will be sent to subscribers."
          },
          "numberPool" : {
            "type" : "boolean",
            "description" : "Does campaign utilize pool of phone numbers?"
          },
          "embeddedLink" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include URL link in SMS?"
          },
          "embeddedPhone" : {
            "type" : "boolean",
            "description" : "Does message generated by the campaign include phone number in SMS?"
          },
          "ageGated" : {
            "type" : "boolean",
            "description" : "Age gated message content in campaign."
          },
          "directLending" : {
            "type" : "boolean",
            "description" : "Direct lending or loan arrangement"
          }
        },
        "description" : "Update existing campaign"
      },
      "UpdateCampaignServiceProvider" : {
        "type" : "object",
        "properties" : {
          "escalateEmail" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "techEmail" : {
            "type" : "string"
          },
          "financeEmail" : {
            "type" : "string"
          }
        }
      },
      "UpdateReseller" : {
        "required" : [ "companyName", "email", "phone" ],
        "type" : "object",
        "properties" : {
          "companyName" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Display or company name of the reseller.",
            "example" : "Microsoft"
          },
          "phone" : {
            "maxLength" : 20,
            "type" : "string",
            "description" : "Valid phone number in e.164 international format.",
            "example" : "+18348365467"
          },
          "email" : {
            "maxLength" : 100,
            "type" : "string",
            "description" : "Valid email address of reseller contact.",
            "example" : "john.doe@microsoft.com"
          }
        },
        "description" : "A reseller is a role or business that comes in between csp and brand."
      },
      "BrandAssetResponse_CSP" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string",
            "enum" : [ "LOGO", "BANNER" ]
          },
          "attachmentUuid" : {
            "type" : "string"
          }
        }
      },
      "VerifySmsOtpRequest" : {
        "type" : "object",
        "properties" : {
          "otpPin" : {
            "type" : "string",
            "description" : "OTP pin received on brand representative's mobile phone to be verified",
            "example" : "123456"
          }
        },
        "description" : "Verify SMS OTP request."
      },
      "RecordSetTag" : {
        "type" : "object",
        "properties" : {
          "records" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Tag"
            }
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalRecords" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "Tag" : {
        "required" : [ "name", "recordId", "recordType" ],
        "type" : "object",
        "properties" : {
          "name" : {
            "maxLength" : 50,
            "minLength" : 1,
            "type" : "string",
            "description" : "Name of the tag. Case-insensitive. Space and puncuation not allowed"
          },
          "recordType" : {
            "type" : "string",
            "description" : "Type of record. Options: BRAND or CAMPAIGN"
          },
          "recordId" : {
            "maxLength" : 7,
            "minLength" : 1,
            "type" : "string",
            "description" : "ID of the brand or campaign."
          }
        },
        "description" : "Searchable keyword attached to a Brand or Campaign."
      }
    },
    "securitySchemes" : {
      "myBasicAuthSecurity" : {
        "type" : "http",
        "scheme" : "basic"
      }
    }
  }
}