Courier User Profiles API

The User Profiles API from Courier — 2 operation(s) for user profiles.

Operations 8

GET /profiles/{user_id} Get a profile #
POST /profiles/{user_id} Create a profile #
PUT /profiles/{user_id} Replace a profile #
PATCH /profiles/{user_id} Update a profile #
DELETE /profiles/{user_id} Delete a profile #
GET /profiles/{user_id}/lists Get list subscriptions #
POST /profiles/{user_id}/lists Subscribe to one or more lists #
DELETE /profiles/{user_id}/lists Delete list subscriptions #

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/courier-user-profiles-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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.

OpenAPI Specification

courier-user-profiles-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Courier Audiences User Profiles API
  description: The Courier REST API.
  version: '1.0'
servers:
- url: https://api.courier.com
  description: Production
tags:
- name: User Profiles
paths:
  /profiles/{user_id}:
    get:
      description: Returns the specified user profile.
      operationId: profiles_get
      tags:
      - User Profiles
      parameters:
      - name: user_id
        in: path
        description: A unique identifier representing the user associated with the requested profile.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProfileGetResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
      summary: Get a profile
      security:
      - BearerAuth: []
    post:
      description: Merge the supplied values with an existing profile or create a new profile if one doesn't already exist.
      operationId: profiles_create
      tags:
      - User Profiles
      parameters:
      - name: user_id
        in: path
        description: A unique identifier representing the user associated with the requested profile.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MergeProfileResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
      summary: Create a profile
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                profile:
                  type: object
                  additionalProperties: true
              required:
              - profile
    put:
      description: "When using `PUT`, be sure to include all the key-value pairs required by the recipient's profile. \nAny key-value pairs that exist in the profile but fail to be included in the `PUT` request will be \nremoved from the profile. Remember, a `PUT` update is a full replacement of the data. For partial updates, \nuse the [Patch](https://www.courier.com/docs/reference/profiles/patch/) request."
      operationId: profiles_replace
      tags:
      - User Profiles
      parameters:
      - name: user_id
        in: path
        description: A unique identifier representing the user associated with the requested user profile.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReplaceProfileResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
      summary: Replace a profile
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                profile:
                  type: object
                  additionalProperties: true
              required:
              - profile
    patch:
      operationId: profiles_mergeProfile
      tags:
      - User Profiles
      parameters:
      - name: user_id
        in: path
        description: A unique identifier representing the user associated with the requested user profile.
        required: true
        schema:
          type: string
      responses:
        '204':
          description: ''
      summary: Update a profile
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProfileUpdateRequest'
    delete:
      description: Deletes the specified user profile.
      operationId: profiles_delete
      tags:
      - User Profiles
      parameters:
      - name: user_id
        in: path
        description: A unique identifier representing the user associated with the requested user profile.
        required: true
        schema:
          type: string
      responses:
        '204':
          description: ''
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
      summary: Delete a profile
      security:
      - BearerAuth: []
  /profiles/{user_id}/lists:
    get:
      description: Returns the subscribed lists for a specified user.
      operationId: profiles_getListSubscriptions
      tags:
      - User Profiles
      parameters:
      - name: user_id
        in: path
        description: A unique identifier representing the user associated with the requested user profile.
        required: true
        schema:
          type: string
      - name: cursor
        in: query
        description: A unique identifier that allows for fetching the next set of message statuses.
        required: false
        schema:
          type:
          - string
          - 'null'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetListSubscriptionsResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
      summary: Get list subscriptions
      security:
      - BearerAuth: []
    post:
      description: Subscribes the given user to one or more lists. If the list does not exist, it will be created.
      operationId: profiles_subscribeToList
      tags:
      - User Profiles
      parameters:
      - name: user_id
        in: path
        description: A unique identifier representing the user associated with the requested user profile.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscribeToListsResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
      summary: Subscribe to one or more lists
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubscribeToListsRequest'
    delete:
      description: Removes all list subscriptions for given user.
      operationId: profiles_deleteListSubscription
      tags:
      - User Profiles
      parameters:
      - name: user_id
        in: path
        description: A unique identifier representing the user associated with the requested profile.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteListSubscriptionResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
      summary: Delete list subscriptions
      security:
      - BearerAuth: []
components:
  schemas:
    ChannelPreference:
      title: ChannelPreference
      type: object
      properties:
        channel:
          $ref: '#/components/schemas/ChannelClassification'
      required:
      - channel
    ChannelClassification:
      title: ChannelClassification
      type: string
      enum:
      - direct_message
      - email
      - push
      - sms
      - webhook
      - inbox
    NotificationPreferences:
      title: NotificationPreferences
      type: object
      additionalProperties:
        $ref: '#/components/schemas/NotificationPreferenceDetails'
    BadRequest:
      title: BadRequest
      type: object
      properties:
        type:
          type: string
          enum:
          - invalid_request_error
      required:
      - type
      allOf:
      - $ref: '#/components/schemas/BaseError'
    UserProfilePatch:
      title: UserProfilePatch
      type: object
      properties:
        op:
          type: string
          description: The operation to perform.
        path:
          type: string
          description: The JSON path specifying the part of the profile to operate on.
        value:
          type: string
          description: The value for the operation.
      required:
      - op
      - path
      - value
    GetListSubscriptionsResponse:
      title: GetListSubscriptionsResponse
      type: object
      properties:
        paging:
          $ref: '#/components/schemas/Paging'
        results:
          type: array
          items:
            $ref: '#/components/schemas/GetListSubscriptionsItem'
          description: An array of lists
      required:
      - paging
      - results
    ProfileGetResponse:
      title: ProfileGetResponse
      type: object
      properties:
        profile:
          type: object
          additionalProperties: true
        preferences:
          $ref: '#/components/schemas/RecipientPreferences'
      required:
      - profile
    RecipientPreferences:
      title: RecipientPreferences
      type: object
      properties:
        categories:
          $ref: '#/components/schemas/NotificationPreferences'
        notifications:
          $ref: '#/components/schemas/NotificationPreferences'
    SubscribeToListsRequest:
      title: SubscribeToListsRequest
      type: object
      properties:
        lists:
          type: array
          items:
            $ref: '#/components/schemas/SubscribeToListsRequestItem'
      required:
      - lists
    SubscribeToListsResponse:
      title: SubscribeToListsResponse
      type: object
      properties:
        status:
          type: string
          enum:
          - SUCCESS
      required:
      - status
    GetListSubscriptionsItem:
      title: GetListSubscriptionsItem
      type: object
      properties:
        id:
          type: string
        name:
          type: string
          description: List name
        created:
          type: string
          description: The date/time of when the list was created. Represented as a string in ISO format.
        updated:
          type: string
          description: The date/time of when the list was updated. Represented as a string in ISO format.
        preferences:
          $ref: '#/components/schemas/RecipientPreferences'
      required:
      - id
      - name
      - created
      - updated
    MergeProfileResponse:
      title: MergeProfileResponse
      type: object
      properties:
        status:
          type: string
          enum:
          - SUCCESS
      required:
      - status
    BaseError:
      title: BaseError
      type: object
      properties:
        message:
          type: string
          description: A message describing the error that occurred.
      required:
      - message
    SubscribeToListsRequestItem:
      title: SubscribeToListsRequestItem
      type: object
      properties:
        listId:
          type: string
        preferences:
          $ref: '#/components/schemas/RecipientPreferences'
      required:
      - listId
    Paging:
      title: Paging
      type: object
      properties:
        cursor:
          type:
          - string
          - 'null'
        more:
          type: boolean
      required:
      - more
    ProfileUpdateRequest:
      title: ProfileUpdateRequest
      type: object
      properties:
        patch:
          type: array
          items:
            $ref: '#/components/schemas/UserProfilePatch'
          description: List of patch operations to apply to the profile.
      required:
      - patch
    DeleteListSubscriptionResponse:
      title: DeleteListSubscriptionResponse
      type: object
      properties:
        status:
          type: string
          enum:
          - SUCCESS
      required:
      - status
    NotificationPreferenceDetails:
      title: NotificationPreferenceDetails
      type: object
      properties:
        status:
          $ref: '#/components/schemas/PreferenceStatus'
        rules:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/Rule'
        channel_preferences:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/ChannelPreference'
      required:
      - status
    ReplaceProfileResponse:
      title: ReplaceProfileResponse
      type: object
      properties:
        status:
          type: string
          enum:
          - SUCCESS
      required:
      - status
    PreferenceStatus:
      title: PreferenceStatus
      type: string
      enum:
      - OPTED_IN
      - OPTED_OUT
      - REQUIRED
    Rule:
      title: Rule
      type: object
      properties:
        start:
          type:
          - string
          - 'null'
        until:
          type: string
      required:
      - until
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer