schema { query: Query mutation: Mutation subscription: Subscription } "A brand represents a label under which an organization does business." type Brand { id: BrandID brandId: String! brandEntityType: EntityType! firstName: String lastName: String displayName: String! companyName: String ein: String einIssuingCountry: String technicalContactPhoneNumber: String commercialContactPhoneNumber: String financialContactPhoneNumber: String street: String city: String state: String postalCode: String country: String technicalContactEmail: String! commercialContactEmail: String! financialContactEmail: String! stockSymbol: String stockExchange: StockExchangeEnum ipAddress: String website: String brandRelationship: BrandRelationshipEnum vertical: VerticalEnum altBusinessId: String altBusinessIdType: AlternateBusinessIdTypeEnum registrationScore: Int! @deprecated(reason: "Registration scores are no longer supported, please use the identity status instead.") identityStatus: IdentityStatus! registrationDate: DateTime! referenceId: String tags: [String!] campaigns: [Campaign] @cost(complexity: 5) "The organization that owns this brand.\n\n\n**Returns:**\nThe organization." organization: Organization @cost(complexity: 5) } "A campaign represents a set of phone numbers for a brand being used to send out text messages." type Campaign { id: CampaignID campaignId: String! referenceId: String campaignStatus: CampaignStatus! sharingStatus: CampaignSharingStatus! vertical: VerticalEnum usecase: String subUsecases: [String!] description: String embeddedLink: Boolean! embeddedPhone: Boolean! numberPool: Boolean! ageGated: Boolean! directLending: Boolean! subscriberOptin: Boolean! subscriberOptout: Boolean! "Subscriber opt-in message. When subscriberOptin = true, must be empty or length >= 20." optinMessage: String "Subscriber opt-out message. MinLength length = 20 when subscriberOptout = true." optoutMessage: String "Indication if campaign responds to help keyword(s)." subscriberHelp: Boolean! optinKeywords: String "Subscriber opt-out keywords. Multiple keywords are comma separated without space." optoutKeywords: String "Subscriber help keywords. Multiple keywords are comma separated without space. Default: STOP" helpKeywords: String "Campaign subscription auto-renewal status. If true, then campaign will automatically renewal at the end of billing cycle. Default: HELP" messageFlow: String helpMessage: String autoRenewal: Boolean! affiliateMarketing: Boolean! @deprecated(reason: "Removed from upstream API, will always return 'false'") registrationDate: DateTime! sampleMessages: [String!]! tags: [String!] "When sharing this campaign was unsuccessful, this field contains the reason." sharingExplanation: String "The brand this campaign belongs to.\n\n\n**Returns:**\nThe brand." brand: Brand @cost(complexity: 5) "The MNO metadata belonging to the campaign.\n\n\n**Returns:**\nThe mno metadata." mnoMetadata: [MnoMetaData] @cost(complexity: 5) "The TNIDs associated with this campaign.\n\n\n**Returns:**\nThe TNIDs" tnids: [Tnid] @cost(complexity: 5) } type CampaignRegistrationStatus { netNumberRegistered: Boolean! syniverseRegistered: Boolean! lastUpdate: DateTime! @deprecated(reason: "Last update is now split to separate NetNumber and Syniverse timestamps") syniverseRequested: DateTime! syniverseLastResponse: String syniverseLastResponded: DateTime! netNumberLastResponse: String netNumberLastResponded: DateTime! } type ChainOfCustodyItem { id: String name: String type: String legalFormation: String city: String state: String country: String sellsTo: ChainOfCustodyItem } "Something that happened which might be of importance." type EventEntry { id: ID event: String! eventCategory: String! description: String timestamp: DateTime! "The organization this event relates to.\n\n\n**Returns:**\nThe organization." organization: Organization! @cost(complexity: 5) "The brand this event relates to.\n\n\n**Returns:**\nThe brand." brand: Brand @cost(complexity: 5) "The campaign this event relates to.\n\n\n**Returns:**\nThe campaign." campaign: Campaign @cost(complexity: 5) } type ExternalVetting { "External vetting provider ID for the brand." evpId: String "Unique ID that identifies a vetting transaction performed by a vetting provider. This ID is provided by the vetting provider at time of vetting." vettingId: String "Required by some providers for vetting record confirmation." vettingToken: String "Vetting score ranging from 0-100." vettingScore: Int "Identifies the vetting classification." vettingClass: VettingClass! "Identifies the vetting request status." vettingStatus: VettingStatus! "The List of causes for FAILED ExternalVetting." reasons: [String] "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." vettedDate: DateTime "Vetting submission date. This is the date when the vetting request is generated in ISO 8601 format." createDate: DateTime! } type MnoMetaData { mnoId: Long! mnoName: String! mnoSupport: Boolean! mnoReview: Boolean! qualify: Boolean! minimumMessageSamples: Int! requireSubscriberOptin: Boolean! requireSubscriberOptout: Boolean! requireSubscriberHelp: Boolean! noEmbeddedLink: Boolean! noEmbeddedPhone: Boolean! surcharge: Float! messageClass: String throughputPerMinute: Int! brandTier: String } "The starting point for all GraphQL mutations." type Mutation { "Create a brand.\n\n\n**Returns:**\nThe brand." createBrand("The input." input: CreateBrandInput): Brand @authorize(policy: "AddBrand", apply: BEFORE_RESOLVER) @deprecated(reason: "Blocking brand creation is no longer supported.") "Create a brand in a non-blocking (async) operation.\n\n\n**Returns:**\nThe brand." createBrandNonBlocking("The input." input: CreateBrandInput): Brand @authorize(policy: "AddBrand", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Update a brand.\n\n\n**Returns:**\nThe brand." updateBrand("The input." input: UpdateBrandInput): Brand @authorize(policy: "ModifyBrand", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Updates the logo of a brand.\n\n\n**Returns:**\nThe brand." uploadBrandLogo("The input." input: UpdateBrandLogoInput): Brand @authorize(policy: "ModifyBrand", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Delete a brand.\n\n\n**Returns:**\nBoolean indicating the result of the request." deleteBrand("The input." input: DeleteBrandInput): Boolean! @authorize(policy: "ModifyBrand", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Send a request for a Brand to be vetted externally." requestBrandExternalVetting("The RequestBrandExternalVettinginput object." input: RequestBrandExternalVettingInput): ExternalVetting @authorize(policy: "ExternalVetting", apply: BEFORE_RESOLVER) @cost(complexity: 5) createCampaign(input: CreateCampaignInput): Campaign @authorize(policy: "AddCampaign", apply: BEFORE_RESOLVER) @cost(complexity: 5) updateCampaign(input: UpdateCampaignInput): Campaign @authorize(policy: "ModifyCampaign", apply: BEFORE_RESOLVER) @cost(complexity: 5) deactivateCampaign(input: DeactivateCampaignInput): Campaign @authorize(policy: "ModifyCampaign", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Add numbers to an existing campaign." addNumbersToCampaign(input: AddNumbersToCampaignInput): Campaign @authorize(policy: "AddNumbersToCampaign", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Remove numbers from an existing campaign." removeNumbersFromCampaign(input: RemoveNumbersFromCampaignInput): Campaign @authorize(policy: "RemoveNumbersFromCampaign", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Update an existing organization.\n\n\n**Returns:**\nThe updated organization." updateOrganization("The input." input: UpdateOrganizationInput): Organization @authorize(policy: "ManageOrganization", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Updates the logo of a organization.\n\n\n**Returns:**\nThe organization." uploadOrganizationLogo("The input." input: UpdateOrganizationLogoInput): Organization @authorize(policy: "ManageOrganization", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Add a partner (new organization) to an existing organization.\n\n\n**Returns:**\nThe created partner organization." createPartner("The input." input: CreatePartnerInput): Organization @authorize(policy: "ManagePartner", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Delete a partner (existing organization)\n\n\n**Returns:**\nThe deleted partner organization" deletePartner("The input." input: DeletePartnerInput): Organization @authorize(policy: "DeletePartner", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Create a new TN.ID\n\n\n**Returns:**\nThe created TN.ID" createTnid("The input object." input: CreateTnidInput): Tnid @authorize(policy: "AddTnid", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Update a TN.ID" updateTnid("The input object." input: UpdateTnidInput): Tnid @authorize(policy: "ModifyTnid", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Use this mutation to login.\n\n\n**Returns:**\nA JWT token." login("The input." input: LoginUserInput): String @cost(complexity: 5) "Use this mutation to refresh the authorization token.\n\n\n**Returns:**\nA JWT token." refreshLogin("The input." input: RefreshUserInput): String @cost(complexity: 5) "Request a password reset." requestUserPasswordReset("The input." input: RequestUserPasswordResetInput): Boolean! @cost(complexity: 5) "Resets a users password using a reset token received from the CancellationToken) action." resetUserPassword("The input." input: ResetUserPasswordInput): ResetUserPasswordResult @cost(complexity: 5) "Add a user. When a user exists, 409 (Conflict) is returned.\n\n\n**Returns:**\nThe created user." addUser("The input." input: CreateUserInput): User @authorize(policy: "SuperAdmin", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Update a user. The user id is mandatory.\n\n\n**Returns:**\nThe updated user." updateUser("The input." input: UpdateUserInput): User @authorize(policy: "SuperAdmin", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Update a user's password. The user id is mandatory.\n\n\n**Returns:**\nThe updated user." updateUserPassword("The input." input: UpdateUserPasswordInput): Boolean! @authorize(policy: "SuperAdmin", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Delete a user. The user id is mandatory.\n\n\n**Returns:**\nBoolean indicating the result of the request." deleteUser("The input." input: DeleteUserInput): Boolean! @authorize(policy: "SuperAdmin", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Add a webhook.\n\n\n**Returns:**\nThe created user." addWebhook("The input." input: CreateWebhookInput): Webhook @authorize(policy: "SuperAdmin", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Update a webhook.\n\n\n**Returns:**\nThe updated user." updateWebhook("The input." input: UpdateWebhookInput): Webhook @authorize(policy: "SuperAdmin", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Delete a webhook.\n\n\n**Returns:**\nBoolean indicating the result of the request." deleteWebhook("The input." input: DeleteWebhookInput): Boolean! @authorize(policy: "SuperAdmin", apply: BEFORE_RESOLVER) @cost(complexity: 5) } type Nnid { id: String start: DateTime! end: DateTime } "An organization." type Organization { id: OrganizationID status: OrganizationStatusEnum! tcrResellerId: String! tcrCspId: String! brandName: String legalName: String! registrationCountry: String! ein: String vertical: VerticalEnum! legalFormation: OrganizationType websiteUri: String! summary: String address: String! city: String! state: String postalCode: String! country: String! commercialContactEmail: String commercialContactPhoneNumber: String technicalContactEmail: String technicalContactPhoneNumber: String financialContactEmail: String financialContactPhoneNumber: String "The partners of this organizations.\n\n\n**Returns:**\nThe partners." partners: [Organization] @cost(complexity: 5) "The brands this organization has.\n\n\n**Returns:**\nThe organizations." brands: [Brand] @cost(complexity: 5) } "Represents a token permission" type Permission { "Contains the name of the permission." name: String! "The description of the permission." description: String! } "The starting point for all GraphQL queries." type Query { events(organizationId: OrganizationID limit: Int!): [EventEntry] @authorize(policy: "QueryEvents", apply: BEFORE_RESOLVER) "Retrieve system statistics for a specific organization.\n\n\n**Returns:**\nThe statistics." statistics("The organization id." organizationId: OrganizationID): Statistics @authorize(policy: "QueryStatistics", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Retrieve a brand by it's identifier.\n\n\n**Returns:**\nThe organization." brand("The id of the brand." id: BrandID!): Brand @authorize(policy: "QueryBrand", apply: BEFORE_RESOLVER) @cost(complexity: 5) brands(organizationId: OrganizationID! where: BrandFilterInput): [Brand] @authorize(policy: "QueryBrands", apply: BEFORE_RESOLVER) "Get external vetting information." brandExternalVettingStatus("The RequestVettingStatusinput object." input: RequestVettingStatusInput): [ExternalVetting] @authorize(policy: "ExternalVetting", apply: BEFORE_RESOLVER) @cost(complexity: 5) campaign(id: CampaignID!): Campaign @authorize(policy: "QueryCampaign", apply: BEFORE_RESOLVER) @cost(complexity: 5) campaigns(organizationId: OrganizationID! where: CampaignFilterInput): [Campaign] @authorize(policy: "QueryCampaigns", apply: BEFORE_RESOLVER) "Retrieve a usecase by it's name.\n\n\n**Returns:**\nThe usecase." usecase("The brand id." brandId: BrandID! "The name of the use case." name: String!): Usecase @authorize(policy: "QueryUsecases", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Retrieve all applicable usecase to a brand.\n\n\n**Returns:**\nThe usecases." usecases("The brand id." brandId: BrandID!): [Usecase] @authorize(policy: "QueryUsecases", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Get the status of the registration at Syniverse and NetNumber." registrationStatus("The 6-character campaign id as registered at The Campaign Registry, Syniverse and NetNumber." campaignId: String! "The longcode" longCode: String!): CampaignRegistrationStatus @cost(complexity: 5) searchNumbers(tns: [String]): [Tnid] @authorize(policy: "QueryNumbers", apply: BEFORE_RESOLVER) @cost(complexity: 5) tnidHistory(tn: String): [TnidHistory] @authorize(policy: "QueryNumbers", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Retrieve an organization by it's identifier.\n\n\n**Returns:**\nThe organization." organization("The id of the organization." id: OrganizationID!): Organization @authorize(policy: "QueryOrganization", apply: BEFORE_RESOLVER) @cost(complexity: 5) organizations: [Organization] @authorize(policy: "QueryOrganizations", apply: BEFORE_RESOLVER) "Get a user by its id.\n\n\n**Returns:**\nThe user." user("The id." id: ID!): User @authorize(policy: "SuperAdmin", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Get a list of all users.\n\n\n**Returns:**\nThe users." users: [User] @authorize(policy: "SuperAdmin", apply: BEFORE_RESOLVER) @cost(complexity: 5) "Get a list of all roles.\n\n\n**Returns:**\nThe roles." roles: [UserRole] @authorize(policy: "SuperAdmin", apply: BEFORE_RESOLVER) @cost(complexity: 5) webhook(id: ID!): Webhook @authorize(policy: "SuperAdmin", apply: BEFORE_RESOLVER) @cost(complexity: 5) webhooks: [Webhook] @authorize(policy: "SuperAdmin", apply: BEFORE_RESOLVER) } type ResetUserPasswordResult { success: Boolean! message: String } type Statistics { activeCampaigns: Long! activeBrands: Long! activePhoneNumbers: Long! pendingEvents: Long! } type Subscription { organizationAdded: Organization organizationUpdated: Organization organizationDeleted: Organization campaignAdded: Campaign campaignUpdated: Campaign brandAdded: Brand brandUpdated: Brand brandDeleted: UUID! tnidAdded: Tnid tnidUpdated: Tnid } type Tnid { phoneNumber: String dateAdded: DateTime! doNotOriginate: Boolean! nnids: [Nnid] @cost(complexity: 5) chainOfCustody: ChainOfCustodyItem "The Campaigns associated with this tnid.\n\n\n**Returns:**\nThe TNIDs" campaigns: [Campaign] @cost(complexity: 5) wallets: [Wallet] } type TnidHistory { transactionId: String timestamp: DateTime! isDeleted: Boolean! value: Tnid } "Represents a secure token." type Token { "A unique identifier that identifies the token." id: String! "The date and time the token was created and activated" created: DateTime! "The date and time the token will expire of is expired." expiration: DateTime "A collection of permissions" permissions: [Permission] } type Usecase { usecaseName: String monthlyFee: Float! quarterlyFee: Float! annualFee: Float! minimumSubUsecases: Int! maximumSubUsecases: Int! mnoMetadata: [MnoMetaData] } "An user who is authorized to access the application within a certain scope." type User { id: ID username: String! email: String firstName: String lastName: String enabled: Boolean! "The user roles assigned to the user.\n\n\n**Returns:**\nThe roles." roles: [UserRole] @cost(complexity: 5) "The organizations the user is allowed to access.\n\n\n**Returns:**\nThe organizations." organizations: [Organization] @cost(complexity: 5) } type UserRole { id: ID name: String! description: String } "Represents an entity where tokens are stored." type Wallet { "Contains the type of the wallet." type: String! "Contains a collection of tokens." tokens: [Token] } type Webhook { id: ID enabled: Boolean! name: String! protocol: ProtocolType! subject: String endpoint: String authenticationType: AuthenticationType userName: String tokenLocation: TokenLocation triggers: [ActionType!]! } "The input for adding longcodes to an existing campaign." input AddNumbersToCampaignInput { "The 6-character Campaign ID used for registration at The Campaign Registry, Syniverse and NetNumber." id: CampaignID "The longcode(s) to add to the campaign. These should be in E164 format but not start with a plus '+' character." longcodes: [String] } input BooleanOperationFilterInput { eq: Boolean neq: Boolean } input BrandFilterInput { and: [BrandFilterInput!] or: [BrandFilterInput!] id: ComparableGuidOperationFilterInput brandId: StringOperationFilterInput brandEntityType: EntityTypeOperationFilterInput firstName: StringOperationFilterInput lastName: StringOperationFilterInput displayName: StringOperationFilterInput companyName: StringOperationFilterInput ein: StringOperationFilterInput einIssuingCountry: StringOperationFilterInput technicalContactPhoneNumber: StringOperationFilterInput commercialContactPhoneNumber: StringOperationFilterInput financialContactPhoneNumber: StringOperationFilterInput street: StringOperationFilterInput city: StringOperationFilterInput state: StringOperationFilterInput postalCode: StringOperationFilterInput country: StringOperationFilterInput technicalContactEmail: StringOperationFilterInput commercialContactEmail: StringOperationFilterInput financialContactEmail: StringOperationFilterInput stockSymbol: StringOperationFilterInput stockExchange: NullableOfStockExchangeEnumOperationFilterInput ipAddress: StringOperationFilterInput website: StringOperationFilterInput brandRelationship: NullableOfBrandRelationshipEnumOperationFilterInput vertical: NullableOfVerticalEnumOperationFilterInput altBusinessId: StringOperationFilterInput altBusinessIdType: NullableOfAlternateBusinessIdTypeEnumOperationFilterInput registrationScore: ComparableInt32OperationFilterInput identityStatus: NullableOfIdentityStatusOperationFilterInput registrationDate: ComparableDateTimeOperationFilterInput referenceId: StringOperationFilterInput tags: ListStringOperationFilterInput campaigns: ListFilterInputTypeOfCampaignFilterInput } input CampaignFilterInput { and: [CampaignFilterInput!] or: [CampaignFilterInput!] id: ComparableGuidOperationFilterInput campaignId: StringOperationFilterInput referenceId: StringOperationFilterInput campaignStatus: CampaignStatusOperationFilterInput sharingStatus: CampaignSharingStatusOperationFilterInput vertical: NullableOfVerticalEnumOperationFilterInput usecase: StringOperationFilterInput subUsecases: ListStringOperationFilterInput description: StringOperationFilterInput embeddedLink: BooleanOperationFilterInput embeddedPhone: BooleanOperationFilterInput numberPool: BooleanOperationFilterInput ageGated: BooleanOperationFilterInput directLending: BooleanOperationFilterInput subscriberOptin: BooleanOperationFilterInput subscriberOptout: BooleanOperationFilterInput "Subscriber opt-in message. When subscriberOptin = true, must be empty or length >= 20." optinMessage: StringOperationFilterInput "Subscriber opt-out message. MinLength length = 20 when subscriberOptout = true." optoutMessage: StringOperationFilterInput "Indication if campaign responds to help keyword(s)." subscriberHelp: BooleanOperationFilterInput optinKeywords: StringOperationFilterInput "Subscriber opt-out keywords. Multiple keywords are comma separated without space." optoutKeywords: StringOperationFilterInput "Subscriber help keywords. Multiple keywords are comma separated without space. Default: STOP" helpKeywords: StringOperationFilterInput "Campaign subscription auto-renewal status. If true, then campaign will automatically renewal at the end of billing cycle. Default: HELP" messageFlow: StringOperationFilterInput helpMessage: StringOperationFilterInput autoRenewal: BooleanOperationFilterInput affiliateMarketing: BooleanOperationFilterInput registrationDate: ComparableDateTimeOperationFilterInput sampleMessages: ListStringOperationFilterInput tags: ListStringOperationFilterInput "When sharing this campaign was unsuccessful, this field contains the reason." sharingExplanation: StringOperationFilterInput } input CampaignSharingStatusOperationFilterInput { eq: CampaignSharingStatus neq: CampaignSharingStatus in: [CampaignSharingStatus!] nin: [CampaignSharingStatus!] } input CampaignStatusOperationFilterInput { eq: CampaignStatus neq: CampaignStatus in: [CampaignStatus!] nin: [CampaignStatus!] } input ComparableDateTimeOperationFilterInput { eq: DateTime neq: DateTime in: [DateTime!] nin: [DateTime!] gt: DateTime ngt: DateTime gte: DateTime ngte: DateTime lt: DateTime nlt: DateTime lte: DateTime nlte: DateTime } input ComparableGuidOperationFilterInput { eq: UUID neq: UUID in: [UUID!] nin: [UUID!] gt: UUID ngt: UUID gte: UUID ngte: UUID lt: UUID nlt: UUID lte: UUID nlte: UUID } input ComparableInt32OperationFilterInput { eq: Int neq: Int in: [Int!] nin: [Int!] gt: Int ngt: Int gte: Int ngte: Int lt: Int nlt: Int lte: Int nlte: Int } input CreateBrandInput { "The id of the organization" organizationId: OrganizationID "The entity type of the brand" entityType: BrandEntityTypeEnum! "The first name" firstName: String "The last name" lastName: String "The display name" displayName: String "The company name" companyName: String "The Ein number" ein: String "The issuing country of the ein" einIssuingCountry: String "The commercial phone number" commercialContactPhoneNumber: String "The technical contact phone number" technicalContactPhoneNumber: String "The financial contact number" financialContactPhoneNumber: String "The street name" street: String "The city" city: String "The state (US)" state: String "The postal code" postalCode: String "The country" country: String "The technical contact e-mail address" technicalContactEmail: String "The commercial contact e-mail address" commercialContactEmail: String "The financial contact e-mail address" financialContactEmail: String "The stock symbol" stockSymbol: String "The stock exchange" stockExchange: StockExchangeEnum "The ip address" ipAddress: String "The website address" website: String "The relationship of this brand" brandRelationship: BrandRelationshipEnum "The vertical of this brand" vertical: VerticalEnum "The alternate business id type" altBusinessId: String "The alternate business id type" altBusinessIdType: AlternateBusinessIdTypeEnum "Tags to add to the brand" tags: [String] "The logo of the brand to add" logoFile: Upload mock: Boolean! = false } input CreateCampaignInput { brandId: BrandID vertical: VerticalEnum usecase: String subUsecases: [String] description: String embeddedLink: Boolean! embeddedPhone: Boolean! numberPool: Boolean! directLending: Boolean! subscriberOptin: Boolean! subscriberOptout: Boolean! subscriberHelp: Boolean! sampleMessages: [String] messageFlow: String helpMessage: String mnoIds: [Long!] referenceId: String autoRenewal: Boolean! "Deprecated: Removed from upstream API" affiliateMarketing: Boolean! ageGated: Boolean! tags: [String] phoneNumbers: [String] "Is terms and conditions accepted?" termsAndConditions: Boolean! "Subscriber opt-in keywords. Multiple keywords are comma separated without space." optinKeywords: String "Subscriber opt-out keywords. Multiple keywords are comma separated without space." optoutKeywords: String "Subscriber help keywords. Multiple keywords are comma separated without space." helpKeywords: String "Subscriber opt-in message." optinMessage: String "Subscriber opt-out message." optoutMessage: String } input CreatePartnerInput { organizationId: OrganizationID legalFormation: OrganizationType! legalName: String ein: String vertical: VerticalEnum! registrationCountry: String websiteUri: String summary: String address: String city: String state: String postalCode: String country: String commercialContactEmail: String commercialContactPhoneNumber: String technicalContactEmail: String technicalContactPhoneNumber: String financialContactEmail: String financialContactPhoneNumber: String logo: Upload } "Represents a TN.ID." input CreateTnidInput { "The phonenumber to create, formatted in E164." phoneNumber: String "Flag indicating whether the number can only be used for inbound calls." doNotOriginate: Boolean "A collection of Wallets." wallets: [WalletInput] } input CreateUserInput { enabled: Boolean! firstName: String lastName: String userName: String email: String password: String roles: [UUID!] organizations: [UUID!] } input CreateWebhookInput { enabled: Boolean! name: String! protocol: ProtocolType! endpoint: String subject: String authenticationType: AuthenticationType userName: String password: String token: String tokenLocation: TokenLocation triggers: [ActionType!]! } input DeactivateCampaignInput { id: CampaignID } input DeleteBrandInput { id: BrandID } input DeletePartnerInput { organizationId: OrganizationID } input DeleteUserInput { id: ID } input DeleteWebhookInput { id: ID } input EntityTypeOperationFilterInput { eq: EntityType neq: EntityType in: [EntityType!] nin: [EntityType!] } input ListFilterInputTypeOfCampaignFilterInput { all: CampaignFilterInput none: CampaignFilterInput some: CampaignFilterInput any: Boolean } input ListStringOperationFilterInput { all: StringOperationFilterInput none: StringOperationFilterInput some: StringOperationFilterInput any: Boolean } input LoginUserInput { username: String password: String } input NullableOfAlternateBusinessIdTypeEnumOperationFilterInput { eq: AlternateBusinessIdTypeEnum neq: AlternateBusinessIdTypeEnum in: [AlternateBusinessIdTypeEnum] nin: [AlternateBusinessIdTypeEnum] } input NullableOfBrandRelationshipEnumOperationFilterInput { eq: BrandRelationshipEnum neq: BrandRelationshipEnum in: [BrandRelationshipEnum] nin: [BrandRelationshipEnum] } input NullableOfIdentityStatusOperationFilterInput { eq: IdentityStatus neq: IdentityStatus in: [IdentityStatus] nin: [IdentityStatus] } input NullableOfStockExchangeEnumOperationFilterInput { eq: StockExchangeEnum neq: StockExchangeEnum in: [StockExchangeEnum] nin: [StockExchangeEnum] } input NullableOfVerticalEnumOperationFilterInput { eq: VerticalEnum neq: VerticalEnum in: [VerticalEnum] nin: [VerticalEnum] } "Represents a token permission" input PermissionInput { "Contains the name of the permission." name: String! "The description of the permission." description: String! } input RefreshUserInput { refreshToken: String } "The input for removing longcodes from an existing campaign." input RemoveNumbersFromCampaignInput { "The 6-character Campaign ID used for registration at The Campaign Registry, Syniverse and NetNumber." id: CampaignID "The longcode(s) to add to the campaign. These should be in E164 format but not start with a plus '+' character." longcodes: [String] } input RequestBrandExternalVettingInput { "The Id of the Brand." id: BrandID "The vetting class Valid values are Standard, Political and Enhanced." vettingClass: VettingClass! "The id of the external vetting provider." externalVettingProviderId: String } input RequestUserPasswordResetInput { emailAddress: String } input RequestVettingStatusInput { "The Id of the Brand." id: BrandID "An array of vetting statuses to query" vettingStatus: [VettingStatus!]! "The vetting status to filter on." vettingClass: VettingClass "The vetting provider id to filter on." externalVettingProviderId: String } input ResetUserPasswordInput { resetToken: String newPassword: String } input StringOperationFilterInput { and: [StringOperationFilterInput!] or: [StringOperationFilterInput!] eq: String neq: String contains: String ncontains: String in: [String] nin: [String] startsWith: String nstartsWith: String endsWith: String nendsWith: String } "Represents a secure token." input TokenInput { "A unique identifier that identifies the token." id: String! "The date and time the token was created and activated" created: DateTime! "The date and time the token will expire of is expired." expiration: DateTime "A collection of permissions" permissions: [PermissionInput] } input UpdateBrandInput { id: BrandID organizationId: OrganizationID entityType: BrandEntityTypeEnum! firstName: String lastName: String displayName: String companyName: String ein: String einIssuingCountry: String commercialContactPhoneNumber: String technicalContactPhoneNumber: String financialContactPhoneNumber: String street: String city: String state: String postalCode: String country: String technicalContactEmail: String commercialContactEmail: String financialContactEmail: String stockSymbol: String stockExchange: StockExchangeEnum ipAddress: String website: String brandRelationship: BrandRelationshipEnum vertical: VerticalEnum altBusinessId: String altBusinessIdType: AlternateBusinessIdTypeEnum tags: [String] logo: Upload } input UpdateBrandLogoInput { id: BrandID logo: Upload } input UpdateCampaignInput { "The id of the campaign" id: CampaignID "Message flow description." messageFlow: String "Help message of the campaign. MinLength length = 20 when subscriberHelp = true." helpMessage: String "Subscriber opt-in message. When subscriberOptin = true, must be empty or length >= 20." optinMessage: String "Subscriber opt-out message. MinLength length = 20 when subscriberOptout = true." optoutMessage: String "Subscriber opt-in keywords. Multiple keywords are comma separated without space." optinKeywords: String "Subscriber opt-out keywords. Multiple keywords are comma separated without space." optoutKeywords: String "Subscriber help keywords. Multiple keywords are comma separated without space." helpKeywords: String "Campaign subscription auto-renewal status. If true, then campaign will automatically renewal at the end of billing cycle." autoRenewal: Boolean "Message sample. Some campaign tiers require 1 or more message samples." sampleMessages: [String] "Tags." tags: [String] } input UpdateOrganizationInput { organizationId: OrganizationID legalFormation: OrganizationType! ein: String vertical: VerticalEnum! registrationCountry: String websiteUri: String summary: String address: String city: String state: String postalCode: String country: String commercialContactEmail: String commercialContactPhoneNumber: String technicalContactEmail: String technicalContactPhoneNumber: String financialContactEmail: String financialContactPhoneNumber: String } input UpdateOrganizationLogoInput { id: OrganizationID logo: Upload } "Represents an object for updating a TN.ID" input UpdateTnidInput { "The phonenumber to create, formatted in E164." phoneNumber: String "Flag indicating whether the number can only be used for inbound calls." doNotOriginate: Boolean "A collection of Wallets." wallets: [WalletInput] } input UpdateUserInput { id: UUID! enabled: Boolean! firstName: String lastName: String userName: String email: String roles: [UUID!] organizations: [UUID!] } input UpdateUserPasswordInput { userId: UUID! password: String } input UpdateWebhookInput { id: UUID! enabled: Boolean! name: String! protocol: ProtocolType! endpoint: String subject: String authenticationType: AuthenticationType userName: String password: String token: String tokenLocation: TokenLocation triggers: [ActionType!]! } "Represents an entity where tokens are stored." input WalletInput { "Contains the type of the wallet." type: String! "Contains a collection of tokens." tokens: [TokenInput] } enum ActionType { NETNUMBER_CAMPAIGN_REGISTERED SYNIVERSE_CAMPAIGN_TO_NUMBER_POOL_ADDED SYNIVERSE_CAMPAIGN_FROM_NUMBER_POOL_DELETED SYNIVERSE_NUMBER_TO_CAMPAIGN_ADDED SYNIVERSE_NUMBER_FROM_CAMPAIGN_DELETED TNID_CAMPAIGN_CREATED TNID_CAMPAIGN_UPDATED TNID_BRAND_CREATED TNID_BRAND_UPDATED } enum AlternateBusinessIdTypeEnum { NONE DUNS GIIN LEI } enum ApplyPolicy { BEFORE_RESOLVER AFTER_RESOLVER } enum AuthenticationType { NONE BASIC TOKEN } enum BrandEntityTypeEnum { PRIVATE_PROFIT PUBLIC_PROFIT NON_PROFIT GOVERNMENT } enum BrandRelationshipEnum { BASIC_ACCOUNT SMALL_ACCOUNT MEDIUM_ACCOUNT LARGE_ACCOUNT KEY_ACCOUNT } enum CampaignSharingStatus { ACCEPTED PENDING DECLINED } enum CampaignStatus { ACTIVE EXPIRED } enum EntityType { PRIVATE_PROFIT PUBLIC_PROFIT NON_PROFIT GOVERNMENT SOLE_PROPRIETOR } enum IdentityStatus { "Applicable to Sole-Proprietor entity type. TCR does not make attempt to verify the brand information." SELF_DECLARED "Is unable to verify or identify the existence of the brand. An UNVERIFIED brand is not permitted to run a 10DLC campaign." UNVERIFIED "Is able to verify the information and identify the existence of the organization. A VERIFIED brand is permitted to run standard 10DLC campaigns across all MNO networks." VERIFIED "Brand with an external STANDARD class vet. A VETTED_VERIFIED brand may potentially gain access to higher throughput and additional use-cases across some MNO networks." VETTED_VERIFIED "Brand is waiting to be vetted." VERIFICATION_PENDING } enum OrganizationStatusEnum { VERIFICATION_REQUIRED ACTIVE DISABLED } enum OrganizationType { PRIVATE_PROFIT PUBLIC_PROFIT NON_PROFIT GOVERNMENT SOLE_PROPRIETOR } enum ProtocolType { HTTP SMTP } enum StockExchangeEnum { 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 } enum TokenLocation { HEADER FORMFIELD BODY QUERY_STRING } enum VerticalEnum { PROFESSIONAL REAL_ESTATE HEALTHCARE HUMAN_RESOURCES ENERGY ENTERTAINMENT RETAIL TRANSPORTATION AGRICULTURE INSURANCE POSTAL EDUCATION HOSPITALITY FINANCIAL POLITICAL GAMBLING LEGAL CONSTRUCTION NGO MANUFACTURING GOVERNMENT TECHNOLOGY COMMUNICATION } enum VettingClass { STANDARD POLITICAL ENHANCED } enum VettingStatus { PENDING UNSCORE ACTIVE FAILED EXPIRED } directive @authorize("The name of the authorization policy that determines access to the annotated resource." policy: String "Roles that are allowed to access the annotated resource." roles: [String!] "Defines when when the resolver shall be executed.By default the resolver is executed after the policy has determined that the current user is allowed to access the field." apply: ApplyPolicy! = BEFORE_RESOLVER) repeatable on SCHEMA | OBJECT | FIELD_DEFINITION "The cost directives is used to express the complexity of a field." directive @cost("Defines the complexity of the field." complexity: Int! = 1 "Defines field arguments that act as complexity multipliers." multipliers: [MultiplierPath!] defaultMultiplier: Int) on FIELD_DEFINITION "The `@defer` directive may be provided for fragment spreads and inline fragments to inform the executor to delay the execution of the current fragment to indicate deprioritization of the current fragment. A query with `@defer` directive will cause the request to potentially return multiple responses, where non-deferred data is delivered in the initial response and data deferred is delivered in a subsequent response. `@include` and `@skip` take precedence over `@defer`." directive @defer("If this argument label has a value other than null, it will be passed on to the result of this defer directive. This label is intended to give client applications a way to identify to which fragment a deferred result belongs to." label: String "Deferred when true." if: Boolean) on FRAGMENT_SPREAD | INLINE_FRAGMENT "The `@specifiedBy` directive is used within the type system definition language to provide a URL for specifying the behavior of custom scalar definitions." directive @specifiedBy("The specifiedBy URL points to a human-readable specification. This field will only read a result for scalar types." url: String!) on SCALAR "The `@stream` directive may be provided for a field of `List` type so that the backend can leverage technology such as asynchronous iterators to provide a partial list in the initial response, and additional list items in subsequent responses. `@include` and `@skip` take precedence over `@stream`." directive @stream("If this argument label has a value other than null, it will be passed on to the result of this stream directive. This label is intended to give client applications a way to identify to which fragment a streamed result belongs to." label: String "The initial elements that shall be send down to the consumer." initialCount: Int! = 0 "Streamed when true." if: Boolean) on FIELD "The unique identifier of an brand." scalar BrandID "The unique identifier of an brand." scalar CampaignID "The `DateTime` scalar represents an ISO-8601 compliant date time type." scalar DateTime @specifiedBy(url: "https:\/\/www.graphql-scalars.com\/date-time") "The `Long` scalar type represents non-fractional signed whole 64-bit numeric values. Long can represent values between -(2^63) and 2^63 - 1." scalar Long "The multiplier path scalar represents a valid GraphQL multiplier path string." scalar MultiplierPath "The unique identifier of an organization." scalar OrganizationID scalar UUID @specifiedBy(url: "https:\/\/tools.ietf.org\/html\/rfc4122") "The `Upload` scalar type represents a file upload." scalar Upload