Customer.io · Schema

Inbox message

For inbox messages, you must include `body_json`.

Behavioral DataBroadcastCampaignsCDPCustomer DataCustomer Data PlatformData IngestionEmailEvent TrackingMarketing AutomationMessagingPush NotificationsSegmentsSMSTransactional EmailA2A

Properties

Name Type Description
name string The name of the newsletter.
recipients object Filter conditions that define the newsletter's recipients. Combine `segment` and `attribute` conditions with `and`, `or`, and `not` operators.
send_now boolean If `true`, the newsletter is sent immediately after creation. You cannot set both `send_now` and `scheduled_at`.
scheduled_at integer A Unix timestamp indicating when to send the newsletter. The time must be in the future. You cannot set both `send_now` and `scheduled_at`.
subscription_topic_id integer The newsletter audience's subscription topic ID. Required when [subscription center](/journeys/channels/subscriptions/center/#enable-sub-center) is enabled; otherwise sends to globally subscribed prof
rate_limit_email_rate integer Maximum number of messages per time period. **NOTE:** Though this states `email_rate`, you can use this for other message channels. Only fixed rate limits are supported, not [daily ramp limits](/journ
rate_limit_time_period integer Time period in seconds for rate limiting. Must be one of 60 (minute), 3600 (hour), or 86400 (day).
rate_limit_spread boolean When `true`, spreads messages evenly across the time period. Otherwise, it sends as fast as possible up to the limit in each period.
type string The channel type for the newsletter.
body_json string JSON body content for the inbox message, as a stringified JSON object. The fields you include depend on how you [set up your inbox](/journeys/channels/in-app/inbox/setup/): - `topics`—array, topics yo
View JSON Schema on GitHub

JSON Schema

customer-io-create-inbox-newsletter-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/customer-io/main/json-schema/customer-io-create-inbox-newsletter-schema.json",
  "title": "Inbox message",
  "description": "For inbox messages, you must include `body_json`.",
  "x-generated": "2026-10-12",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/customer-io-newsletters-api-openapi.yml#/components/schemas/createInboxNewsletter",
  "allOf": [
    {
      "type": "object",
      "required": [
        "name",
        "type",
        "recipients"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 190,
          "description": "The name of the newsletter."
        },
        "recipients": {
          "type": "object",
          "description": "Filter conditions that define the newsletter's recipients. Combine `segment` and `attribute` conditions with `and`, `or`, and `not` operators.\n",
          "properties": {
            "and": {
              "type": "array",
              "description": "An array of conditions that must all be true.",
              "items": {
                "type": "object"
              }
            },
            "or": {
              "type": "array",
              "description": "An array of conditions where at least one must be true.",
              "items": {
                "type": "object"
              }
            },
            "not": {
              "type": "object",
              "description": "A condition or group of conditions to exclude."
            },
            "segment": {
              "type": "object",
              "description": "A segment condition.",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "The ID of a segment."
                }
              }
            },
            "attribute": {
              "type": "object",
              "description": "A customer attribute condition.",
              "properties": {
                "field": {
                  "type": "string",
                  "description": "The attribute name."
                },
                "operator": {
                  "type": "string",
                  "description": "The comparison operator.",
                  "enum": [
                    "eq",
                    "exists"
                  ]
                },
                "value": {
                  "type": "string",
                  "description": "The value to compare against. Required when `operator` is `eq`."
                },
                "inverse": {
                  "type": "boolean",
                  "description": "Set to `true` for \"is not equal\" or \"does not exist\"."
                }
              }
            }
          }
        },
        "send_now": {
          "type": "boolean",
          "description": "If `true`, the newsletter is sent immediately after creation. You cannot set both `send_now` and `scheduled_at`."
        },
        "scheduled_at": {
          "type": "integer",
          "format": "unix timestamp",
          "description": "A Unix timestamp indicating when to send the newsletter. The time must be in the future. You cannot set both `send_now` and `scheduled_at`."
        },
        "subscription_topic_id": {
          "type": "integer",
          "description": "The newsletter audience's subscription topic ID. Required when [subscription center](/journeys/channels/subscriptions/center/#enable-sub-center) is enabled; otherwise sends to globally subscribed profiles."
        }
      }
    },
    {
      "type": "object",
      "description": "Optional newsletter rate limiting. If you set `rate_limit_email_rate` or `rate_limit_time_period`, set both; `rate_limit_spread` can be set alone.",
      "properties": {
        "rate_limit_email_rate": {
          "type": "integer",
          "minimum": 1,
          "description": "Maximum number of messages per time period. **NOTE:** Though this states `email_rate`, you can use this for other message channels. Only fixed rate limits are supported, not [daily ramp limits](/journeys/send/broadcasts/newsletters/#daily-ramp).\n"
        },
        "rate_limit_time_period": {
          "type": "integer",
          "enum": [
            60,
            3600,
            86400
          ],
          "description": "Time period in seconds for rate limiting. Must be one of 60 (minute), 3600 (hour), or 86400 (day)."
        },
        "rate_limit_spread": {
          "type": "boolean",
          "description": "When `true`, spreads messages evenly across the time period. Otherwise, it sends as fast as possible up to the limit in each period."
        }
      }
    },
    {
      "type": "object",
      "required": [
        "body_json"
      ],
      "properties": {
        "type": {
          "type": "string",
          "description": "The channel type for the newsletter.",
          "enum": [
            "inbox"
          ]
        },
        "body_json": {
          "type": "string",
          "description": "JSON body content for the inbox message, as a stringified JSON object. The fields you include depend on how you [set up your inbox](/journeys/channels/in-app/inbox/setup/):\n- `topics`—array, topics your audience can filter by in their inbox\n- `type`—string, context that helps render the inbox message\n- `properties`—object, your message info like the title, body, link, and image\n- `expiration`—object; if omitted, the message expires after 30 days. Otherwise set `type` (`relative` or `absolute`), `unit` (`seconds`, `minutes`, `hours`, or `days`; relative only), and `value` (number of units, or a unix timestamp if absolute)\n"
        }
      }
    }
  ]
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/customer-io-create-inbox-newsletter"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.