Bluecore API

REST/JSON API exposing OAuth 2.0 client-credentials authentication, Customer Profile (Shopper) retrieval and upsert, Eligibility (subscription/consent) read and update, and Communicate transactional + direct-send messaging. Rate limited per account (burst 100/s, steady 1000/m) with RateLimit-* headers; errors use the google.rpc.Status model.

OpenAPI Specification

bluecore-openapi.yml Raw ↑
# generated: '2026-07-18'
# method: searched
# source: https://developers.bluecore.com/ (per-operation OpenAPI definitions, merged)
openapi: 3.0.3
info:
  title: Bluecore API
  version: 0.0.1
  description: The Bluecore API supports the REST architecture style and uses JSON requests and responses.
    It exposes Bluecore's Customer (Shopper) profiles, Eligibility (subscription/consent) management,
    and Communicate (Direct Send + Transactional messaging) surfaces, plus OAuth 2.0 client-credentials
    authentication. Harvested by API Evangelist from the per-operation OpenAPI definitions published at
    developers.bluecore.com.
  contact:
    name: Bluecore Support
    email: support@bluecore.com
    url: https://developers.bluecore.com/
servers:
- url: https://a.bluecore.com/api
  description: Bluecore API server
tags:
- name: CampaignsAPIPublic
- name: Direct send
- name: Eligibility
- name: Profile
- name: Transactional
paths:
  /namespaces/{namespace}/customers:
    get:
      tags:
      - Profile
      summary: Retrieve Customer Profile
      operationId: Profile_Get
      parameters:
      - name: namespace
        in: path
        description: The Bluecore environment, which is a unique identifier that contains integrations,
          data feeds, and campaigns.
        required: true
        schema:
          type: string
        example: bluestore
      - name: email
        in: query
        description: The primary identifier that represents the customer’s email address. See [Email address](https://developers.bluecore.com/docs/email-address#/)
          for information on how they are normalized and validated.
        schema:
          type: string
      - name: phone_number
        in: query
        description: The secondary identifier that represents the customer’s phone number. E.164 format.
        schema:
          type: string
      responses:
        '200':
          description: OK
          headers:
            x-ratelimit-limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            x-ratelimit-remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            x-ratelimit-reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
            x-bluecore-id:
              description: Request id to trace the logs for this particular request.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/customers.public.GetResponse'
              examples:
                get:
                  summary: Basic
                  value:
                    data:
                      attributes:
                        birthdate: '1995-01-01T00:00:00.0Z'
                        name: Alice
                      ids:
                      - email: alice@gmail.com
                      - phone_number: '+15556667777'
                      namespace: bluestore
                      updated: '2025-01-01T00:00:00.0Z'
        4XX:
          description: Client error
          headers:
            x-ratelimit-limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            x-ratelimit-remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            x-ratelimit-reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
            x-bluecore-id:
              description: Request id to trace the logs for this particular request.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/google.rpc.Status'
      security:
      - GlooAuth:
        - customers.read
    post:
      tags:
      - Profile
      summary: Create/update Customer Profile
      operationId: Profile_CreateOrUpdate
      parameters:
      - name: namespace
        in: path
        description: The Bluecore environment, which is a unique identifier that contains integrations,
          data feeds, and campaigns.
        required: true
        schema:
          type: string
        example: bluestore
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Profile_CreateOrUpdate_customers.public.CreateOrUpdateRequest'
            examples:
              link_identifier:
                summary: Link Identifiers
                value:
                  id:
                    email: alice@gmail.com
                  link_ids:
                  - phone_number: '+15556667777'
                  timestamp: '2025-01-01T00:00:00.0Z'
              add_attributes:
                summary: Add Attributes
                value:
                  attributes:
                    birthdate: '1995-01-01T00:00:00.0Z'
                    name: Alice
                  id:
                    email: alice@gmail.com
                  timestamp: '2025-01-01T00:00:00.0Z'
        required: true
      responses:
        '200':
          description: OK
          headers:
            x-ratelimit-limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            x-ratelimit-remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            x-ratelimit-reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
            x-bluecore-id:
              description: Request id to trace the logs for this particular request.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/customers.public.CreateOrUpdateResponse'
              examples:
                link_identifier:
                  summary: Link Identifiers
                  value:
                    data:
                      ids:
                      - email: alice@gmail.com
                      - phone_number: '+15556667777'
                      namespace: bluestore
                      updated: '2025-01-01T00:00:00.0Z'
                add_attributes:
                  summary: Add Attributes
                  value:
                    data:
                      attributes:
                        birthdate: '1995-01-01T00:00:00.0Z'
                        name: Alice
                      ids:
                      - email: alice@gmail.com
                      namespace: bluestore
                      updated: '2025-01-01T00:00:00.0Z'
        4XX:
          description: Client error
          headers:
            x-ratelimit-limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            x-ratelimit-remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            x-ratelimit-reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
            x-bluecore-id:
              description: Request id to trace the logs for this particular request.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/google.rpc.Status'
      security:
      - GlooAuth:
        - customers.write
  /namespaces/{namespace}/direct-send-campaigns:
    post:
      tags:
      - CampaignsAPIPublic
      summary: Create an external campaign in Bluecore.
      operationId: CampaignsAPIPublic_CreateDirectSendCampaign
      parameters:
      - name: namespace
        in: path
        description: The unique name of the Bluecore environment.
        required: true
        schema:
          type: string
        example: bluestore
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CampaignsAPIPublic_CreateDirectSendCampaign_campaigns.public.CreateDirectSendCampaignRequest'
            example:
              folder_id: '5008175763677184'
              name: Spring sale
        required: true
      responses:
        '200':
          description: OK
          headers:
            X-RateLimit-Limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            X-RateLimit-Remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/campaigns.public.DirectSendCampaignResponse'
              examples:
                create_direct_send_campaign:
                  summary: Direct send campaign created
                  value:
                    data:
                      namespace: bluestore
                      campaign_id: '6239084716089344'
                      name: Spring Sale
        '429':
          description: Too many requests
          headers:
            X-RateLimit-Limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            X-RateLimit-Remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
          content:
            application/json: {}
        default:
          description: Default error response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/google.rpc.Status'
      security:
      - GlooAuth:
        - directsend.write
  /namespaces/{namespace}/direct-send-messages:
    post:
      tags:
      - Direct send
      summary: Send direct message
      operationId: DirectSend_Send
      parameters:
      - name: namespace
        in: path
        description: The unique name of the Bluecore environment.
        required: true
        schema:
          type: string
        example: bluestore
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DirectSend_Send_emailflow.public.SendRequest'
        required: true
      responses:
        '200':
          description: OK
          headers:
            X-RateLimit-Limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            X-RateLimit-Remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: object
        '429':
          description: Too many requests
          headers:
            X-RateLimit-Limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            X-RateLimit-Remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
          content:
            application/json: {}
        default:
          description: Default error response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/google.rpc.Status'
      security:
      - GlooAuth:
        - direct_send.api
  /namespaces/{namespace}/eligibility:
    get:
      tags:
      - Eligibility
      summary: Retrieve Eligibility Status
      operationId: Eligibility_Get
      parameters:
      - name: namespace
        in: path
        description: The Bluecore environment, which is a unique identifier that contains integrations,
          data feeds, and campaigns.
        required: true
        schema:
          type: string
        example: bluestore
      - name: email
        in: query
        description: The primary identifier that represents the customer’s email address. See [Email address](https://developers.bluecore.com/docs/email-address#/)
          for information on how they are normalized and validated.
        schema:
          type: string
      - name: phone_number
        in: query
        description: The secondary identifier that represents the customer’s phone number. E.164 format.
        schema:
          type: string
      responses:
        '200':
          description: OK
          headers:
            x-ratelimit-limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            x-ratelimit-remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            x-ratelimit-reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
            x-bluecore-id:
              description: Request id to trace the logs for this particular request.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/eligibility.public.GetResponse'
              examples:
                get_email_eligibility:
                  summary: Get Email Eligibility
                  value:
                    data:
                      namespace: bluestore
                      subscription:
                        id:
                          email: alice@gmail.com
                        states:
                        - consented_at: '2025-08-24T15:22:09.650080419Z'
                          message_type: MARKETING
                          source: public-api
                          status: SUBSCRIBED
                get_sms_eligibility:
                  summary: Get SMS Eligibility
                  value:
                    data:
                      namespace: bluestore
                      subscription:
                        id:
                          phone_number: '+15556667777'
                        states:
                        - consented_at: '2025-08-24T15:22:09.650080419Z'
                          message_type: MARKETING
                          source: public-api
                          status: SUBSCRIBED
        '429':
          description: ''
          headers:
            x-ratelimit-limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            x-ratelimit-remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            x-ratelimit-reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
            x-bluecore-id:
              description: Request id to trace the logs for this particular request.
              schema:
                type: string
          content:
            application/json: {}
        default:
          description: Default error response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/google.rpc.Status'
      security:
      - GlooAuth:
        - eligibility.read
  /namespaces/{namespace}/eligibility_events:
    post:
      tags:
      - Eligibility
      summary: Update Eligibility Status
      operationId: Eligibility_Update
      parameters:
      - name: namespace
        in: path
        description: The Bluecore environment, which is a unique identifier that contains integrations,
          data feeds, and campaigns.
        required: true
        schema:
          type: string
        example: bluestore
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Eligibility_Update_eligibility.public.UpdateRequest'
            examples:
              update_email_eligibility:
                summary: Update Email Eligibility
                value:
                  id:
                    email: alice@gmail.com
                  state:
                    consented_at: '2025-08-22T12:29:20.650080419Z'
                    event: OPTIN
                    message_type: MARKETING
              update_sms_eligibility:
                summary: Update SMS Eligibility
                value:
                  id:
                    phone_number: '+15556667777'
                  state:
                    channel_identifier: '+15556667777'
                    consented_at: '2025-08-22T12:29:20.650080419Z'
                    event: OPTIN
                    message_type: MARKETING
        required: true
      responses:
        '200':
          description: OK
          headers:
            x-ratelimit-limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            x-ratelimit-remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            x-ratelimit-reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
            x-bluecore-id:
              description: Request id to trace the logs for this particular request.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/eligibility.public.UpdateResponse'
              examples:
                update_email_eligibility:
                  summary: Update Email Eligibility
                  value:
                    data:
                      namespace: bluestore
                      subscription:
                        id:
                          email: alice@gmail.com
                        states:
                        - consented_at: '2025-08-24T15:22:09.650080419Z'
                          message_type: MARKETING
                          source: public-api
                          status: SUBSCRIBED
                update_sms_eligibility:
                  summary: Update SMS Eligibility
                  value:
                    data:
                      namespace: bluestore
                      subscription:
                        id:
                          phone_number: '+15556667777'
                        states:
                        - channel_identifier: '+15556667777'
                          consented_at: '2025-08-24T15:22:09.650080419Z'
                          message_type: MARKETING
                          source: public-api
                          status: SUBSCRIBED
        '429':
          description: ''
          headers:
            x-ratelimit-limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            x-ratelimit-remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            x-ratelimit-reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
            x-bluecore-id:
              description: Request id to trace the logs for this particular request.
              schema:
                type: string
          content:
            application/json: {}
        default:
          description: Default error response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/google.rpc.Status'
      security:
      - GlooAuth:
        - eligibility.write
  /namespaces/{namespace}/transactional-messages/{id}:
    get:
      tags:
      - Transactional
      summary: Retrieve transactional message status
      operationId: Transactional_Get
      parameters:
      - name: namespace
        in: path
        description: The unique name of the Bluecore environment.
        required: true
        schema:
          type: string
        example: bluestore
      - name: id
        in: path
        description: 'The idempotency key used when sending the transactional message.  Used to retrieve
          the message information and status history. Allowed characters:  alphanumeric, colon (:), underscore
          (_), period (.), and dash (-).'
        required: true
        schema:
          type: string
          maxLength: 128
        example: '5898781176487936'
      responses:
        '200':
          description: OK
          headers:
            X-RateLimit-Limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            X-RateLimit-Remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/transactional_api.public.GetResponse'
              example:
                data:
                  campaign_id: '6239084716089344'
                  identifiers:
                  - email:
                      email: alice@gmail.com
                  product_ids:
                  - 27y9pconfyu7h
                  customer_attributes:
                    first_name:
                      string_value: Alice
                  name: namespaces/bluestore/messages/1231239
                  statuses:
                  - status: INITIATED
                    timestamp: '2026-01-01T00:00:00.00Z'
                  - status: SENT
                    timestamp: '2026-01-01T00:00:01.00Z'
                  - status: DELIVERED
                    timestamp: '2026-01-01T00:00:02.00Z'
        '404':
          description: Message not found for the provided id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/google.rpc.Status'
              example:
                code: 5
                message: 'we could not find a message matching that ID: 1231231'
                details: []
        '429':
          description: Too many requests
          headers:
            X-RateLimit-Limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            X-RateLimit-Remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
          content:
            application/json: {}
        default:
          description: Default error response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/google.rpc.Status'
      security:
      - GlooAuth:
        - transactional.api
    post:
      tags:
      - Transactional
      summary: Send a transactional message
      operationId: Transactional_Send
      parameters:
      - name: namespace
        in: path
        description: The unique name of the Bluecore environment.
        required: true
        schema:
          type: string
        example: bluestore
      - name: id
        in: path
        required: true
        description: 'A client-generated unique identifier used for idempotency. Must be unique for each
          send request. Allowed characters:  alphanumeric, colon (:), underscore (_), period (.), and
          dash (-).'
        schema:
          type: string
          maxLength: 128
          example: '5898781176487936'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Transactional_Send_transactional_api.public.SendRequest'
        required: true
      responses:
        '200':
          description: OK
          headers:
            X-RateLimit-Limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            X-RateLimit-Remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/transactional_api.public.SendResponse'
              examples:
                send_transactional_email:
                  summary: Email example
                  value:
                    data:
                      campaign_id: '6239084716089344'
                      identifiers:
                      - email:
                          email: alice@gmail.com
                      product_ids:
                      - 27y9pconfyu7h
                      use_draft: false
                      statuses:
                      - status: SENT
                        timestamp: '2026-01-01T00:00:00.00Z'
                send_transactional_sms:
                  summary: SMS/MMS example
                  value:
                    data:
                      campaign_id: '5227859897868288'
                      identifiers:
                      - phone_number:
                          phone_number: '+19293337777'
                      use_draft: true
                      body: Your order has shipped, {{first_name}}!
                      customer_attributes:
                        first_name:
                          string_value: Alice
                      statuses:
                      - status: SENT
                        timestamp: '2026-01-01T00:00:00.00Z'
        '400':
          description: Bad request. No response returned.
        '429':
          description: Too many requests
          headers:
            X-RateLimit-Limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            X-RateLimit-Remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
          content:
            application/json: {}
        default:
          description: Default error response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/google.rpc.Status'
      security:
      - GlooAuth:
        - transactional.api
  /oauth/token:
    post:
      tags:
      - Authn
      summary: Get Access Token
      operationId: Authn_GetAccessToken
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/bluecore.api.GetAccessTokenRequest'
            examples:
              post:
                summary: Basic
                value:
                  audience: https://a.bluecore.com
                  client_id: ''
                  client_secret: ''
                  grant_type: client_credentials
        required: true
      responses:
        '200':
          description: OK
          headers:
            x-ratelimit-limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            x-ratelimit-remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            x-ratelimit-reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bluecore.api.GetAccessTokenResponse'
              examples:
                post:
                  summary: Basic
                  value:
                    access_token: authenticated token here
                    expires_in: 86400
                    token_type: Bearer
                    scope: customers:read customers:write eligibility:read eligibility:write
        4XX:
          description: Client error
          headers:
            x-ratelimit-limit:
              description: The number of allowed requests in the current period
              schema:
                example: 700;w=60;burst=75;w=1
                type: string
                format: quota-policy
            x-ratelimit-remaining:
              description: The number of remaining requests in the current time window
              schema:
                type: integer
            x-ratelimit-reset:
              description: The number of seconds until reset of the current time window
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: 

# --- truncated at 32 KB (55 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/bluecore/refs/heads/main/openapi/bluecore-openapi.yml