openapi: 3.1.0 info: title: SlickText API (Legacy Platform) version: 2026-04-29 summary: Initial machine-readable spec for the published legacy SlickText API docs. description: | This OpenAPI document captures the legacy SlickText API documented under `/docs/v1`. The legacy platform differs materially from the newer API: - it uses `https://api.slicktext.com/v1` - it authenticates with HTTP Basic auth - write operations use `application/x-www-form-urlencoded` - several POST endpoints multiplex behavior through an `action` form field The spec is intentionally conservative where the prose docs do not enumerate every field or every request-body variation exhaustively. Shapes remain useful for retrieval, validation, and SDK bootstrapping without overstating undocumented behavior. jsonSchemaDialect: https://json-schema.org/draft/2020-12/schema servers: - url: https://api.slicktext.com/v1 description: Legacy API base URL security: - basicAuth: [] tags: - name: Account - name: Contacts - name: Messages - name: Textwords - name: Text Numbers - name: Coupons - name: Contests - name: Opt Outs - name: Shortlinks - name: Analytics - name: Webhooks paths: /account: get: tags: [Account] operationId: getLegacyAccount summary: Retrieve account information responses: '200': description: Account retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/AccountResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /contacts: get: tags: [Contacts] operationId: listLegacyContacts summary: Retrieve all contacts description: Supports exact-match filters on returned fields, plus `subscribedAfter` and `subscribedBefore`. parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' - $ref: '#/components/parameters/SubscribedAfter' - $ref: '#/components/parameters/SubscribedBefore' responses: '200': description: Contacts retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/ContactsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' post: tags: [Contacts] operationId: mutateLegacyContactsCollection summary: Opt in or edit a contact description: | The legacy contacts collection endpoint multiplexes several write operations through the required `action` form field: - `OPTIN` - `OPTINWITHAUTOREPLY` - `DOUBLEOPTIN` - `EDIT` requestBody: $ref: '#/components/requestBodies/LegacyContactsCollectionAction' responses: '200': description: Contact mutation succeeded. content: application/json: schema: $ref: '#/components/schemas/ContactCollectionMutationResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /contacts/{id}: get: tags: [Contacts] operationId: getLegacyContact summary: Retrieve a specific contact parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Contact retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/ContactsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' post: tags: [Contacts] operationId: mutateLegacyContactById summary: Opt out or delete a contact description: The action is selected by the required `action` form field on the resource endpoint. parameters: - $ref: '#/components/parameters/Id' requestBody: $ref: '#/components/requestBodies/LegacyContactByIdAction' responses: '200': description: Contact mutation succeeded. content: application/json: schema: $ref: '#/components/schemas/LegacySuccessResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /messages: get: tags: [Messages] operationId: listLegacyMessages summary: Retrieve all messages description: Supports `limit`, `offset`, `sentAfter`, and `sentBefore` query filters. parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' - $ref: '#/components/parameters/SentAfter' - $ref: '#/components/parameters/SentBefore' responses: '200': description: Messages retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/MessagesResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' post: tags: [Messages] operationId: mutateLegacyMessagesCollection summary: Send or schedule a message description: The action is selected by the required `action` form field and must be either `SEND` or `SCHEDULE`. requestBody: $ref: '#/components/requestBodies/LegacyMessagesCollectionAction' responses: '200': description: Message mutation succeeded. content: application/json: schema: $ref: '#/components/schemas/MessageResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /messages/{id}: get: tags: [Messages] operationId: getLegacyMessage summary: Retrieve a specific message parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Message retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/MessageResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' post: tags: [Messages] operationId: deleteLegacyMessage summary: Delete a scheduled or unsent message parameters: - $ref: '#/components/parameters/Id' requestBody: $ref: '#/components/requestBodies/LegacyMessageDeleteAction' responses: '200': description: Message deletion succeeded. content: application/json: schema: $ref: '#/components/schemas/LegacySuccessResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /messages/{id}/log: get: tags: [Messages] operationId: getLegacyMessageLog summary: Retrieve a message send log parameters: - $ref: '#/components/parameters/Id' - $ref: '#/components/parameters/PageKey' - $ref: '#/components/parameters/To' responses: '200': description: Message log retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/MessageLogResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /textwords: get: tags: [Textwords] operationId: listLegacyTextwords summary: Retrieve all textwords parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: Textwords retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/TextwordsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /textwords/{id}: get: tags: [Textwords] operationId: getLegacyTextword summary: Retrieve a specific textword parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Textword retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/TextwordResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /textwords/{id}/contacts: get: tags: [Textwords] operationId: listLegacyTextwordContacts summary: Retrieve a textword's contacts parameters: - $ref: '#/components/parameters/Id' - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: Textword contacts retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/ContactsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' post: tags: [Textwords] operationId: deleteLegacyTextwordSubscribers summary: Delete a textword's contacts parameters: - $ref: '#/components/parameters/Id' requestBody: $ref: '#/components/requestBodies/DeleteTextwordSubscribersAction' responses: '200': description: Contacts deleted successfully. content: application/json: schema: $ref: '#/components/schemas/ContactsDeletedResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /textwords/{id}/messages: get: tags: [Textwords] operationId: listLegacyTextwordMessages summary: Retrieve a textword's messages parameters: - $ref: '#/components/parameters/Id' - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: Textword messages retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/MessagesResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /textwords/{id}/segments: get: tags: [Textwords] operationId: listLegacyTextwordSegments summary: Retrieve a textword's segments parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Textword segments retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/SegmentsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /textwords/{id}/customfields: get: tags: [Textwords] operationId: listLegacyTextwordCustomFields summary: Retrieve a textword's custom fields parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Custom fields retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/CustomFieldsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /coupons: get: tags: [Coupons] operationId: listLegacyCoupons summary: Retrieve all coupons parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: Coupons retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/CouponsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /coupons/{id}: get: tags: [Coupons] operationId: getLegacyCoupon summary: Retrieve a specific coupon parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Coupon retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/CouponResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /contests: get: tags: [Contests] operationId: listLegacyContests summary: Retrieve all contests parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: Contests retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/ContestsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /contests/{id}: get: tags: [Contests] operationId: getLegacyContest summary: Retrieve a specific contest parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Contest retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/ContestResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /optouts: get: tags: [Opt Outs] operationId: listLegacyOptOuts summary: Retrieve all opt outs parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: Opt outs retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/OptOutsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /optouts/{id}: get: tags: [Opt Outs] operationId: getLegacyOptOut summary: Retrieve a specific opt out parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Opt out retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/OptOutResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /deactivatedNumbers: get: tags: [Contacts] operationId: listLegacyDeactivatedNumbers summary: Retrieve deactivated numbers parameters: - $ref: '#/components/parameters/Date' responses: '200': description: Deactivated numbers retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/DeactivatedNumbersResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /textnumbers: get: tags: [Text Numbers] operationId: listLegacyTextNumbers summary: Retrieve all text numbers parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: Text numbers retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/TextNumbersResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /textnumbers/{id}: get: tags: [Text Numbers] operationId: getLegacyTextNumber summary: Retrieve a specific text number parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Text number retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/TextNumberResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /shortlinks: get: tags: [Shortlinks] operationId: listLegacyShortlinks summary: Retrieve all shortlinks parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: Shortlinks retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/ShortlinksResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /shortlinks/{id}: get: tags: [Shortlinks] operationId: getLegacyShortlinkById summary: Retrieve a specific shortlink by id parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Shortlink retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/ShortlinkResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /shortlinks/hash-{hash}: get: tags: [Shortlinks] operationId: getLegacyShortlinkByHash summary: Retrieve a specific shortlink by hash parameters: - $ref: '#/components/parameters/Hash' responses: '200': description: Shortlink retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/ShortlinkResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /shortlinks/{id}/contacts: get: tags: [Shortlinks] operationId: listLegacyShortlinkContactsById summary: Retrieve contacts who clicked a shortlink by id parameters: - $ref: '#/components/parameters/Id' - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: Shortlink contacts retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/ContactsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /shortlinks/hash-{hash}/contacts: get: tags: [Shortlinks] operationId: listLegacyShortlinkContactsByHash summary: Retrieve contacts who clicked a shortlink by hash parameters: - $ref: '#/components/parameters/Hash' - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: Shortlink contacts retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/ContactsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /analytics/textwords/{id}: get: tags: [Analytics] operationId: getLegacyTextwordAnalytics summary: Retrieve textword analytics parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Analytics retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/AnalyticsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /analytics/messages/{id}: get: tags: [Analytics] operationId: getLegacyMessageAnalytics summary: Retrieve campaign/message analytics parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Analytics retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/AnalyticsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /analytics/coupons/{id}: get: tags: [Analytics] operationId: getLegacyCouponAnalytics summary: Retrieve coupon analytics parameters: - $ref: '#/components/parameters/Id' responses: '200': description: Analytics retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/AnalyticsResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' webhooks: legacyEventDelivery: post: tags: [Webhooks] summary: Legacy webhook delivery description: | Legacy webhook deliveries POST a single form field named `data` containing a JSON string payload. Requests include `X-Slicktext-Signature`, an HMAC-MD5 hexadecimal digest of the `data` field using your webhook secret as the key. parameters: - $ref: '#/components/parameters/LegacyWebhookSignature' requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object required: [data] properties: data: type: string description: JSON string containing the event payload. responses: '200': description: Return a 2xx response within 5 seconds to acknowledge receipt. components: securitySchemes: basicAuth: type: http scheme: basic description: Supply your public key as the username and your private key as the password. parameters: Id: name: id in: path required: true schema: type: string description: Resource identifier. Hash: name: hash in: path required: true schema: type: string description: Shortlink hash. Limit: name: limit in: query schema: type: integer minimum: 1 maximum: 10000 description: Number of items to return. The legacy docs default to 20 and allow up to 10,000. Offset: name: offset in: query schema: type: integer minimum: 0 description: Number of items to skip before returning results. SubscribedAfter: name: subscribedAfter in: query schema: type: string description: Return contacts subscribed after the given `YYYY-MM-DD HH:MM:SS` timestamp in Pacific time. SubscribedBefore: name: subscribedBefore in: query schema: type: string description: Return contacts subscribed before the given `YYYY-MM-DD HH:MM:SS` timestamp in Pacific time. SentAfter: name: sentAfter in: query schema: type: string description: Return messages sent after the given `YYYY-MM-DD HH:MM:SS` timestamp in Pacific time. SentBefore: name: sentBefore in: query schema: type: string description: Return messages sent before the given `YYYY-MM-DD HH:MM:SS` timestamp in Pacific time. PageKey: name: pageKey in: query schema: type: string description: Pagination cursor for message send logs. To: name: to in: query schema: type: string description: Filter message log items by destination phone number. Date: name: date in: query schema: type: string format: date description: Date filter for retrieving deactivated numbers. LegacyWebhookSignature: name: X-Slicktext-Signature in: header required: true schema: type: string description: HMAC-MD5 hex digest of the `data` form field using the webhook secret. requestBodies: LegacyContactsCollectionAction: required: true content: application/x-www-form-urlencoded: schema: oneOf: - $ref: '#/components/schemas/LegacyContactOptInRequest' - $ref: '#/components/schemas/LegacyContactOptInWithAutoReplyRequest' - $ref: '#/components/schemas/LegacyContactDoubleOptInRequest' - $ref: '#/components/schemas/LegacyContactEditRequest' examples: optIn: summary: Opt in a contact without an auto reply value: action: OPTIN textword: 43434439 number: '+13334445555' firstName: John lastName: Smith doubleOptIn: summary: Start double opt in for a contact value: action: DOUBLEOPTIN textword: 43434439 number: '+13334445555' doubleOptInMessage: Reply YES to confirm your subscription. LegacyContactByIdAction: required: true content: application/x-www-form-urlencoded: schema: oneOf: - $ref: '#/components/schemas/LegacyContactOptOutRequest' - $ref: '#/components/schemas/LegacyDeleteRequest' examples: optOut: summary: Record an irreversible opt out value: action: OPTOUT delete: summary: Remove the contact from the list without recording an opt out value: action: DELETE LegacyMessagesCollectionAction: required: true content: application/x-www-form-urlencoded: schema: oneOf: - $ref: '#/components/schemas/LegacyMessageSendRequest' - $ref: '#/components/schemas/LegacyMessageScheduleRequest' examples: send: summary: Send a message immediately value: action: SEND textword: 111 body: API demo message campaign: API demo schedule: summary: Schedule a message for later delivery value: action: SCHEDULE textword: 111 body: Scheduled API demo message scheduled: '2013-06-23 20:45:00' LegacyMessageDeleteAction: required: true content: application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/LegacyDeleteRequest' DeleteTextwordSubscribersAction: required: true content: application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/LegacyDeleteSubscribersRequest' responses: BadRequest: description: Bad Request content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' Forbidden: description: Forbidden content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' NotFound: description: Not Found content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' InternalServerError: description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' schemas: LegacyMeta: type: object properties: limit: type: [integer, string, 'null'] offset: type: [integer, string, 'null'] total: type: [integer, string, 'null'] success: type: [boolean, string, 'null'] link: type: [string, 'null'] additionalProperties: true LegacyLinks: type: object properties: self: type: [string, 'null'] next: type: [string, 'null'] message: type: [string, 'null'] additionalProperties: true LegacyErrorResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' error: type: object properties: message: type: string additionalProperties: true additionalProperties: true LegacySuccessResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' additionalProperties: true Account: type: object properties: id: type: [integer, string, 'null'] company: type: [string, 'null'] characterLimit: type: [integer, string, 'null'] additionalProperties: true Contact: type: object properties: id: type: [integer, string] number: type: [string, 'null'] city: type: [string, 'null'] state: type: [string, 'null'] zipCode: type: [integer, string, 'null'] country: type: [string, 'null'] textword: type: [integer, string, 'null'] subscribedDate: type: [string, 'null'] firstName: type: [string, 'null'] lastName: type: [string, 'null'] birthDate: type: [string, 'null'] email: type: [string, 'null'] optInMethod: type: [string, 'null'] additionalProperties: true Message: type: object properties: id: type: [integer, string] campaign: type: [string, 'null'] body: type: [string, 'null'] textword: type: [integer, string, 'null'] contact: type: [integer, string, 'null'] contactID: type: [integer, string, 'null'] count: type: [integer, string, 'null'] deleted: type: [integer, string, 'null'] sent: type: [string, 'null'] scheduled: type: [string, 'null'] source: type: [string, 'null'] mediaUrl: type: [string, 'null'] additionalProperties: true Textword: type: object properties: id: type: [integer, string] word: type: [string, 'null'] autoReply: type: [string, 'null'] added: type: [string, 'null'] optOuts: type: [integer, string, 'null'] contactsCount: type: [integer, string, 'null'] textNumber: type: [integer, string, 'null'] additionalProperties: true Coupon: type: object additionalProperties: true Contest: type: object additionalProperties: true OptOut: type: object additionalProperties: true TextNumber: type: object additionalProperties: true Shortlink: type: object properties: id: type: [integer, string] name: type: [string, 'null'] url: type: [string, 'null'] hash: type: [string, 'null'] clickCount: type: [integer, string, 'null'] isSmart: type: [integer, string, 'null'] created: type: [string, 'null'] shortUrl: type: [string, 'null'] additionalProperties: true Segment: type: object additionalProperties: true CustomField: type: object additionalProperties: true AccountResponse: type: object properties: links: $ref: '#/components/schemas/LegacyLinks' account: $ref: '#/components/schemas/Account' additionalProperties: true ContactsResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' contacts: type: array items: $ref: '#/components/schemas/Contact' additionalProperties: true ContactMutationResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' contact: $ref: '#/components/schemas/Contact' additionalProperties: true PendingContactMutationResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' pendingContact: $ref: '#/components/schemas/Contact' additionalProperties: true ContactCollectionMutationResponse: oneOf: - $ref: '#/components/schemas/ContactMutationResponse' - $ref: '#/components/schemas/PendingContactMutationResponse' MessagesResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' messages: type: array items: $ref: '#/components/schemas/Message' additionalProperties: true MessageResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' message: $ref: '#/components/schemas/Message' additionalProperties: true MessageLogItem: type: object properties: contact: type: [integer, string, 'null'] to: type: [string, 'null'] from: type: [string, 'null'] status: type: [string, 'null'] enum: [failed, sent to carrier, delivered, undelivered, null] created: type: [string, 'null'] updated: type: [string, 'null'] additionalProperties: true MessageLogMeta: allOf: - $ref: '#/components/schemas/LegacyMeta' - type: object properties: isLastPage: type: [integer, boolean, string, 'null'] nextPageKey: type: [string, 'null'] MessageLogResponse: type: object properties: meta: $ref: '#/components/schemas/MessageLogMeta' links: $ref: '#/components/schemas/LegacyLinks' items: type: array items: $ref: '#/components/schemas/MessageLogItem' additionalProperties: true TextwordsResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' textwords: type: array items: $ref: '#/components/schemas/Textword' additionalProperties: true TextwordResponse: type: object properties: links: $ref: '#/components/schemas/LegacyLinks' textword: $ref: '#/components/schemas/Textword' additionalProperties: true SegmentsResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' segments: type: array items: $ref: '#/components/schemas/Segment' additionalProperties: true CustomFieldsResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' customfields: type: array items: $ref: '#/components/schemas/CustomField' additionalProperties: true CouponsResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' coupons: type: array items: $ref: '#/components/schemas/Coupon' additionalProperties: true CouponResponse: type: object properties: links: $ref: '#/components/schemas/LegacyLinks' coupon: $ref: '#/components/schemas/Coupon' additionalProperties: true ContestsResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' contests: type: array items: $ref: '#/components/schemas/Contest' additionalProperties: true ContestResponse: type: object properties: links: $ref: '#/components/schemas/LegacyLinks' contest: $ref: '#/components/schemas/Contest' additionalProperties: true OptOutsResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' optouts: type: array items: $ref: '#/components/schemas/OptOut' additionalProperties: true OptOutResponse: type: object properties: links: $ref: '#/components/schemas/LegacyLinks' optout: $ref: '#/components/schemas/OptOut' additionalProperties: true DeactivatedNumbersResponse: type: object additionalProperties: true TextNumbersResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' textnumbers: type: array items: $ref: '#/components/schemas/TextNumber' additionalProperties: true TextNumberResponse: type: object properties: links: $ref: '#/components/schemas/LegacyLinks' textnumber: $ref: '#/components/schemas/TextNumber' additionalProperties: true ShortlinksResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' links: $ref: '#/components/schemas/LegacyLinks' shortlinks: type: array items: $ref: '#/components/schemas/Shortlink' additionalProperties: true ShortlinkResponse: type: object properties: links: $ref: '#/components/schemas/LegacyLinks' shortlink: $ref: '#/components/schemas/Shortlink' additionalProperties: true AnalyticsResponse: type: object description: Analytics payloads vary across legacy endpoints. additionalProperties: true ContactsDeletedResponse: type: object properties: meta: $ref: '#/components/schemas/LegacyMeta' contactsDeleted: type: [integer, string] additionalProperties: true LegacyActionBase: type: object properties: action: type: string required: [action] additionalProperties: true LegacyContactOptInRequest: allOf: - $ref: '#/components/schemas/LegacyActionBase' - type: object properties: action: const: OPTIN textword: type: [integer, string] number: type: string required: [action, textword, number] LegacyContactOptInWithAutoReplyRequest: allOf: - $ref: '#/components/schemas/LegacyActionBase' - type: object properties: action: const: OPTINWITHAUTOREPLY textword: type: [integer, string] number: type: string required: [action, textword, number] LegacyContactDoubleOptInRequest: allOf: - $ref: '#/components/schemas/LegacyActionBase' - type: object properties: action: const: DOUBLEOPTIN textword: type: [integer, string] number: type: string doubleOptInMessage: type: string required: [action, textword, number] LegacyContactEditRequest: allOf: - $ref: '#/components/schemas/LegacyActionBase' - type: object properties: action: const: EDIT id: type: [integer, string] textword: type: [integer, string] number: type: string required: [action] anyOf: - required: [id] - required: [textword, number] LegacyContactOptOutRequest: allOf: - $ref: '#/components/schemas/LegacyActionBase' - type: object properties: action: const: OPTOUT required: [action] LegacyDeleteRequest: allOf: - $ref: '#/components/schemas/LegacyActionBase' - type: object properties: action: const: DELETE required: [action] LegacyDeleteSubscribersRequest: allOf: - $ref: '#/components/schemas/LegacyActionBase' - type: object properties: action: const: DELETESUBSCRIBERS required: [action] LegacyMessageSendRequest: allOf: - $ref: '#/components/schemas/LegacyActionBase' - type: object properties: action: const: SEND textword: type: [integer, string] contact: type: [integer, string] body: type: string campaign: type: string segment: type: [integer, string] mediaUrl: type: string required: [action, body] anyOf: - required: [textword] - required: [contact] LegacyMessageScheduleRequest: allOf: - $ref: '#/components/schemas/LegacyActionBase' - type: object properties: action: const: SCHEDULE textword: type: [integer, string] contact: type: [integer, string] body: type: string scheduled: type: string campaign: type: string segment: type: [integer, string] mediaUrl: type: string required: [action, body, scheduled] anyOf: - required: [textword] - required: [contact]