{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/sinch/main/json-schema/sinch-campaign-schema.json", "title": "Campaign", "description": "Campaign content", "x-generated": "2026-10-08", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/sinch-us-shortcode-campaigns-api-openapi.yml#/components/schemas/Campaign", "allOf": [ { "$ref": "#/$defs/BasicCampaign" }, { "type": "object", "properties": { "description": { "description": "Campaign description", "type": "string" }, "trafficCharge": { "$ref": "#/$defs/TrafficCharge" }, "scRequested": { "$ref": "#/$defs/ScRequested" }, "brandId": { "$ref": "#/$defs/BrandId" }, "customerCare": { "$ref": "#/$defs/CustomerCare" }, "contentDefinitions": { "description": "You can configure specific flows to fit your needs. You can check the documentation for more information about flows. Each campaign must contain at least one content definition at submission time.", "type": "array", "items": { "$ref": "#/$defs/ContentDefinition" } }, "termsAndConditions": { "$ref": "#/$defs/TermsAndConditions" }, "privacyPolicy": { "$ref": "#/$defs/PrivacyPolicy" }, "complianceEmails": { "$ref": "#/$defs/ComplianceEmails" }, "contactEmails": { "$ref": "#/$defs/ContactEmails" }, "callbackUrl": { "$ref": "#/$defs/CallbackUrl" }, "isMigrated": { "$ref": "#/$defs/IsMigrated" }, "carrierOrders": { "description": "List of carrier orders.", "type": "array", "items": { "$ref": "#/$defs/CarrierOrder" } }, "campaignAttachments": { "description": "Attachments linked to this campaign request.", "type": "array", "items": { "$ref": "#/$defs/CampaignAttachment" } }, "logs": { "description": "All transitions applied to this campaign", "type": "array", "items": { "$ref": "#/$defs/CampaignLog" } }, "notes": { "description": "Notes used to contact customer and agents regarding this campaign.", "type": "array", "items": { "$ref": "#/$defs/Note" } }, "smsApp": { "$ref": "#/$defs/smsApp" }, "mmsApp": { "$ref": "#/$defs/mmsApp" }, "mmsMoUrl": { "$ref": "#/$defs/mmsMoUrl" }, "mmsDrUrl": { "$ref": "#/$defs/mmsDrUrl" } } } ], "$defs": { "BasicCampaign": { "description": "List of campaigns returns a subset of data from campaign object", "properties": { "campaignId": { "description": "Campaign ID", "type": "string" }, "name": { "description": "Campaign name", "type": "string" }, "shortcode": { "$ref": "#/$defs/Shortcode" }, "status": { "$ref": "#/$defs/CampaignStatus" }, "createdAt": { "description": "Campaign creation date", "type": "string", "format": "date-time" }, "updatedAt": { "description": "Campaign update date", "type": "string", "format": "date-time" } }, "type": "object" }, "BrandId": { "description": "Brand ID created in the Brands API, US_SHORT_CODE_REGISTRY type. This field is required when sc_requested is true. Brand must be provided to the US Short Code Registry to be approved. Brand must exist and not be rejected at submission time (incomplete or pending brands are allowed) Brands approval must be completed in order to complete the campaign registration.", "type": "string" }, "CallbackUrl": { "description": "Callback URL that will be used to notify about campaign order updates. There are four different events that will be sent - CARRIER_ORDER_NOTE - CARRIER_ORDER_STATUS_UPDATE - CAMPAIGN_NOTE - CAMPAIGN_STATUS_UPDATE See callback documentation in submit endpoint section.", "type": "string", "format": "uri" }, "CampaignAttachment": { "description": "Attachment linked to this campaign request.", "properties": { "attachmentId": { "description": "Attachment ID", "type": "string" }, "name": { "description": "Attachment name", "type": "string" }, "description": { "description": "Attachment description", "type": "string" } } }, "CampaignLog": { "description": "A transition applied to a campaign", "properties": { "previousStatus": { "$ref": "#/$defs/CampaignStatus" }, "currentStatus": { "$ref": "#/$defs/CampaignStatus" }, "createdAt": { "description": "Log creation date", "type": "string", "format": "date-time" } }, "type": "object" }, "CampaignStatus": { "description": "Campaign status", "enum": [ "DRAFT", "PENDING_REVIEW", "REVIEWING", "READY_CARRIER_SUBMISSION", "CARRIER_SUBMITTED", "COMPLETED", "CANCELLED", "DEPROVISIONED", "AWAITING_CLIENT_UPDATE" ], "x-enumDescriptions": { "DRAFT": "A working draft campaign, not submitted for review", "PENDING_REVIEW": "Submitted campaign, waiting for review", "REVIEWING": "An agent is actively reviewing the campaign", "READY_CARRIER_SUBMISSION": "Agent has completed review and is ready to submit to carriers", "CARRIER_SUBMITTED": "Campaign information has been submitted to carriers (at this point follow carrier order status updates)", "COMPLETED": "Campaign has been approved by all carriers and is ready for use", "CANCELLED": "Campaign has been cancelled", "DEPROVISIONED": "An approved campaign that has been deprovisioned and is no longer in use", "AWAITING_CLIENT_UPDATE": "Some information must be edited or added to the campaign to continue the review process" }, "format": "enum", "type": "string" }, "CarrierOrder": { "description": "Carrier order linked to country specific carriers that must be configured for this campaign.", "properties": { "carrierOrderId": { "description": "Carrier order ID", "type": "string" }, "carrierId": { "description": "Carrier ID. Carrier IDs and names must be retrieved from /carriers endpoint.", "type": "string" }, "carrierName": { "description": "Carrier name. Carrier IDs and names must be retrieved from /carriers endpoint.", "type": "string" }, "status": { "$ref": "#/$defs/CarrierOrderStatus" }, "notes": { "description": "Notes regarding carrier configuration.", "type": "array", "items": { "$ref": "#/$defs/Note" } }, "logs": { "description": "All transitions applied to this carrier order", "type": "array", "items": { "$ref": "#/$defs/CarrierOrderLog" } }, "createdAt": { "description": "Carrier order creation date", "type": "string", "format": "date-time" }, "updatedAt": { "description": "Carrier order update date", "type": "string", "format": "date-time" } }, "type": "object" }, "CarrierOrderLog": { "description": "A transition applied to a carrier order", "properties": { "previousStatus": { "$ref": "#/$defs/CarrierOrderStatus" }, "currentStatus": { "$ref": "#/$defs/CarrierOrderStatus" }, "createdAt": { "description": "Log creation date", "type": "string", "format": "date-time" } }, "type": "object" }, "CarrierOrderStatus": { "description": "Carrier order status", "enum": [ "PENDING", "SUBMITTED", "APPROVED", "REJECTED", "PROVISIONED_BY_CARRIER", "PROVISIONED_BY_SINCH", "CLIENT_CERTIFICATION_REQUESTED", "CARRIER_CERTIFICATION_REQUESTED", "CERTIFIED", "DEPROVISIONED", "CERTIFICATION_FAILURE", "CANCELLED" ], "x-enumDescriptions": { "PENDING": "Campaign has not been submitted yet to the carrier.", "SUBMITTED": "Campaign has been submitted to the carrier.", "APPROVED": "Campaign has been approved by carrier.", "REJECTED": "Campaign has not been approved by carrier.", "PROVISIONED_BY_CARRIER": "Short Code has been approved and configured on Sinch’s bind by this carrier.", "PROVISIONED_BY_SINCH": "Short Code has been set up on client’s account.", "CLIENT_CERTIFICATION_REQUESTED": "Campaign is ready to be tested by Sinch Team (to test opt-in and auto-responses such as HELP and STOP)", "CARRIER_CERTIFICATION_REQUESTED": "Campaign has passed Sinch testing and is pending certification/testing with the Carrier(not all carriers require this) where they will test opt-in and auto-responses for HELP and STOP.", "CERTIFIED": "Campaign has passed certification on this carrier and it is now LIVE! Ready for live traffic", "DEPROVISIONED": "Used when cancelling the connectivity part with this carrier.", "CERTIFICATION_FAILURE": "Testing failed. It can be due to keyword and auto-responses not set up as described in the campaign or the call to action is not live or not compliant.", "CANCELLED": "When the overall SC Campaign is not longer active with all carriers and the SC lease is cancelled." }, "format": "enum", "type": "string" }, "ComplianceEmails": { "description": "Compliance emails that will be used to contact compliance team. Mandatory at submission time.", "type": "array", "items": { "type": "string", "format": "email" } }, "ContactEmails": { "description": "Contact emails that will be used to contact about campaign order status. If you plan to set a callback url, please ignore this field", "type": "array", "items": { "type": "string", "format": "email" } }, "ContentDefinition": { "description": "This is where the client would provide important information about their short code campaign(s) – what the call to action is (how is the short code advertised and how consent is collected), whether it’s a one-time or subscription/recurring campaign, and example messages (example messages of what the brand will be sending once live)", "properties": { "messageType": { "description": "Message type that will be used in the content definition.", "format": "enum", "type": "string" }, "contentType": { "description": "Content type that will be used in the content definition.", "type": "string" }, "subscription": { "description": "Content definition subscription type.", "type": "string" }, "messageFlow": { "$ref": "#/$defs/MessageFlow" } }, "type": "object" }, "CustomerCare": { "description": "Customer care info that end customers will see. Mandatory at submission time.", "properties": { "optOutKeywords": { "description": "These are keywords end users can use to unsubscribe from the short program. Acceptable Opt-out keywords are STOP, END, CANCEL, UNSUBSCRIBE, QUIT, REVOKE, OPTOUT, OPT-OUT. Max length is 100 characters.", "type": "string" }, "optOutMtText": { "description": "The outgoing message that the brand needs to send to acknowledge the opt out and informing subscribers that they will no longer receive further messages. This responsibility generally falls on the brand/client (exceptions on 2FA/OTP campaigns as they are not recurring programs)", "type": "string" }, "helpMtText": { "description": "The help message is a message sent in response to when end users are requesting help by testing the keyword HELP. This message should include a phone number, email address or URL leading to the support contact page.", "type": "string" }, "email": { "description": "Customer care email that will be used to contact customer care.", "type": "string", "format": "email" }, "website": { "description": "Customer care website that will be used to contact customer care.", "type": "string", "format": "uri" }, "phoneNumber": { "description": "Customer care phone number that will be used to contact customer care.", "type": "string", "format": "phone" } }, "type": "object" }, "IsMigrated": { "description": "Indicates the campaign is migrated from another provided or another customer Sinch account. It is required to submit the campaign details in dashboard when it’s a migration.", "type": "boolean" }, "MessageFlow": { "description": "Message flow that will be used in the content definition. Contains the call to action, opt in and sample alert.", "properties": { "callToAction": { "description": "Call to action that will be used in the content definition.", "type": "string" }, "optIn": { "description": "Opt-in message that will be used in the content definition.", "type": "string" }, "sampleAlert": { "description": "Sample alert that will be used in the content definition.", "type": "string" } }, "type": "object" }, "Note": { "description": "Notes used to contact customer and agents.", "properties": { "author": { "description": "Author. It can be either a customer or an agent.", "enum": [ "CUSTOMER", "AGENT" ], "x-enumDescriptions": { "CUSTOMER": "Customer", "AGENT": "Agent" }, "format": "enum", "type": "string" }, "text": { "description": "Note text", "type": "string" }, "createdAt": { "description": "Note creation date", "type": "string", "format": "date-time" } }, "type": "object" }, "PrivacyPolicy": { "description": "Provide the URL to your company’s Privacy Policy, which outlines how you collect, use, and protect customers' personal information. If you do not have a URL, please enter the full text of your Privacy Policy. Mandatory at submission time.", "properties": { "text": { "description": "Privacy policy text.", "type": "string" }, "url": { "description": "Privacy policy URL", "type": "string", "format": "uri" } }, "type": "object" }, "ScRequested": { "description": "Customer needs Sinch to lease a short code for them. When sc_requested is true, customers need to provide an existing brand ID, not rejected.", "type": "boolean" }, "Shortcode": { "description": "Short codes configured for the campaign. Short code must be provided when sc_requested is false. There are two options (1) if customers have their own short code (sc_requested=true), we would ask that they provide the short code number in this field and also attach a copy of their latest short code receipt upon submitting the campaign. (2) If customers have elected that Sinch lease the code (sc_requested=false), this field should be blank, and Sinch will fill it once short code has been procured.", "type": "string" }, "TermsAndConditions": { "description": "Provide the URL to your company’s Terms and Conditions, which explain the rules and guidelines for using your services. If you do not have a URL, please provide the full text of your Terms and Conditions. Mandatory at submission time.", "properties": { "text": { "description": "Terms and conditions text.", "type": "string" }, "url": { "description": "Terms and conditions URL", "type": "string", "format": "uri" } }, "type": "object" }, "TrafficCharge": { "description": "Campaign traffic charge type.", "enum": [ "STANDARD", "FREE_TO_END_USER" ], "x-enumDescriptions": { "STANDARD": "Standard rates apply to send and receive for end users. Sinch customers will be charged for MT/MO messages.", "FREE_TO_END_USER": "Sinch customers will be charged at a higher MT/MO rate while end users will not be charged." }, "format": "enum", "type": "string" }, "mmsApp": { "description": "The MMS routing profile app", "type": "string" }, "mmsDrUrl": { "description": "Location where DR messages will be delivered. A specific URL for Delivery Receipt at the shortcode level. This parameter is optional and allows for overriding the account-level DR URL. If a value is provided, all DR notifications for this shortcode will be sent to the specified URL. If it is not provided, notifications will continue to be sent to the default URL configured at the account level.", "type": "string" }, "mmsMoUrl": { "description": "Location where MO messages will be delivered. A specific URL for Mobile Originated at the shortcode level. This parameter is optional and allows for overriding the account-level MO URL. If a value is provided, all MO notifications for this shortcode will be sent to the specified URL. If it is not provided, notifications will continue to be sent to the default URL configured at the account level.", "type": "string" }, "smsApp": { "description": "The SMS routing profile app", "type": "string" } } }