Bloom Enablement Services GraphQL API Reference
Welcome to the Bloom Enablement Services GraphQL API Reference.
Authorization is required to access the API. Some queries require organization level access, while others require user level access (after a user has been created). See the links below for more details.
In these docs, there are a lot of links that allow you to enumerate through the Enablement Services GraphQL API schema. If you aren't familiar with a type, click on it to see its fields and descriptions. Light mode (upper right corner of this page) may make links more evident.
API Endpoints
# Sandbox:
https://api.bloomplus.dev/gql
# Production:
https://api.bloomplus.com/gql
Headers
# See authorization guide for more details.
Authorization: Bearer <USER_TOKEN>
Authorization
Getting Started
New here? Check out the Getting Started guide.
Queries
me
Description
Fetches the currently authenticated user's details.
🔒 Authorization: Requires user scoped authorization via session token. See the 'Session Token Authentication' section in Enablement Services Authorization guide for reference.
Response
Returns a User
Example
Query
query Me {
me {
email
phoneNumber
name {
first
middle
last
}
address {
line1
line2
city
state
country
zipcode
type
}
status
notificationPreferences
legalAgreementVersions {
name
version
}
createdAt
updatedAt
syncedAt
closedAt
connections {
edges {
...ConnectionsEdgeFragment
}
pageInfo {
...PageInfoFragment
}
}
tradelines {
edges {
...TradelinesEdgeFragment
}
pageInfo {
...PageInfoFragment
}
}
}
}
Response
{
"data": {
"me": {
"email": "[email protected]",
"phoneNumber": "+12345678901",
"name": {"first": "Buzz", "last": "Inga"},
"address": {
"line1": "123 Main St",
"city": "Athens",
"state": "FL",
"country": "USA",
"zipcode": "37745",
"type": "PRIMARY"
},
"status": "VERIFIED",
"notificationPreferences": "EMAIL",
"legalAgreementVersions": [{"name": "Terms of Use", "version": 1}],
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-02T00:00:00Z",
"syncedAt": "10:15:30Z",
"closedAt": "10:15:30Z",
"connections": ConnectionsConnection,
"tradelines": TradelinesConnection
}
}
}
tradeline
Description
The tradeline
query allows you to retrieve a specific tradeline by ID
.
🔒 Authorization: Requires user scoped authorization via session token. See the 'Session Token Authentication' section in Enablement Services Authorization guide for reference.
Response
Returns a Tradeline!
Example
Query
query Tradeline {
tradeline {
merchant
category
isOpen
isEligible
attestation {
agreements {
...AttestationAgreementsFragment
}
}
paymentFrequency
serviceAddress
servicePhone
leaseStartDate
utilityTypes
serviceAddressType
createdAt
updatedAt
transactions {
edges {
...TransactionsEdgeFragment
}
pageInfo {
...PageInfoFragment
}
}
}
}
Response
{
"data": {
"tradeline": {
"merchant": "Pollen Water Co",
"category": "RENT",
"isOpen": false,
"isEligible": true,
"attestation": Attestation,
"paymentFrequency": "MONTHLY",
"serviceAddress": "123 Main St Athens FL 37745",
"servicePhone": "+12345678901",
"leaseStartDate": "2025-01-01",
"utilityTypes": ["WATER"],
"serviceAddressType": "PRIMARY",
"createdAt": "10:15:30Z",
"updatedAt": "10:15:30Z",
"transactions": TransactionsConnection
}
}
}
userExistsWithEmail
Description
Check if the user registering does not already exist in the database for your organization.
🔒 Requires Organization scoped authorization. See the Enablement Services Authorization guide for reference.
Response
Returns a Boolean!
Example
Query
query UserExistsWithEmail(
$organizationSlug: String!,
$email: String!
) {
userExistsWithEmail(
organizationSlug: $organizationSlug,
email: $email
)
}
Variables
{
"organizationSlug": "abc123",
"email": "abc123"
}
Response
{"data": {"userExistsWithEmail": false}}
Mutations
closeTradeline
Description
The closeTradeline
mutation is used to confirm that a user has opted to stop having a recurring bill reported to the credit bureau(s). Upon successful execution, it returns the tradeline object.
🔒 Authorization: Requires user scoped authorization via session token. See the 'Session Token Authentication' section in Enablement Services Authorization guide for reference.
Response
Returns a CloseTradelineOutput!
Example
Query
mutation CloseTradeline {
closeTradeline {
tradeline {
merchant
category
isOpen
isEligible
attestation {
...AttestationFragment
}
paymentFrequency
serviceAddress
servicePhone
leaseStartDate
utilityTypes
serviceAddressType
createdAt
updatedAt
transactions {
...TransactionsConnectionFragment
}
}
}
}
Response
{"data": {"closeTradeline": {"tradeline": Tradeline}}}
deleteMe
Description
The deleteMe
mutation is used to when a user wants to completely close their account and no longer have tradelines reported to credit bureaus. This mutation disconnects the aggregator from Bloom's Enablement Services.
🔒 Authorization: Requires user scoped authorization via session token. See the 'Session Token Authentication' section in Enablement Services Authorization guide for reference.
Response
Returns a DeleteMeOutput!
Example
Query
mutation DeleteMe {
deleteMe {
user {
email
phoneNumber
name {
...NameFragment
}
address {
...AddressFragment
}
status
notificationPreferences
legalAgreementVersions {
...LegalAgreementVersionsFragment
}
createdAt
updatedAt
syncedAt
closedAt
connections {
...ConnectionsConnectionFragment
}
tradelines {
...TradelinesConnectionFragment
}
}
}
}
Response
{"data": {"deleteMe": {"user": User}}}
importConnection
Description
The importConnection
mutation allows you to import a previously established aggregator connection, enabling our system to ingest and categorize transactions associated with that connection. This process facilitates transaction management and categorization for streamlined data handling within your application.
🔒 Authorization: Requires user scoped authorization via session token. See the 'Session Token Authentication' section in Enablement Services Authorization guide for reference.
Response
Returns an ImportConnectionOutput!
Arguments
Name | Description |
---|---|
token - String!
|
Plaid access token |
Example
Query
mutation ImportConnection($token: String!) {
importConnection(token: $token) {
connectionId
provider
}
}
Variables
{"token": "xyz789"}
Response
{
"data": {
"importConnection": {
"connectionId": "00000000-0000-0000-0000-000000000000",
"provider": "plaid"
}
}
}
importUser
Description
The importUser mutation is used to import an existing consumer into the Bloom Enablement Services platform.
🔒 Requires Organization scoped authorization. See the Enablement Services Authorization guide for reference.
Response
Returns an ImportUserOutput!
Arguments
Name | Description |
---|---|
input - ImportUserInput!
|
Example
Query
mutation ImportUser($input: ImportUserInput!) {
importUser(input: $input) {
user {
email
phoneNumber
name {
...NameFragment
}
address {
...AddressFragment
}
status
notificationPreferences
legalAgreementVersions {
...LegalAgreementVersionsFragment
}
createdAt
updatedAt
syncedAt
closedAt
connections {
...ConnectionsConnectionFragment
}
tradelines {
...TradelinesConnectionFragment
}
}
}
}
Variables
{"input": ImportUserInput}
Response
{"data": {"importUser": {"user": User}}}
openTradeline
Description
The openTradeline
mutation is used to confirm that a user has opted to have a recurring bill reported to the credit bureau(s). Upon successful execution, it returns the attestation agreements associated with the tradeline that has been opened. This process ensures the tradeline is correctly configured for credit reporting.
🔒 Authorization: Requires user scoped authorization via session token. See the 'Session Token Authentication' section in Enablement Services Authorization guide for reference.
Response
Returns an OpenTradelineOutput!
Arguments
Name | Description |
---|---|
input - OpenTradelineInput!
|
The input object |
Example
Query
mutation OpenTradeline($input: OpenTradelineInput!) {
openTradeline(input: $input) {
attestation {
agreements {
...AttestationAgreementsFragment
}
}
}
}
Variables
{"input": OpenTradelineInput}
Response
{"data": {"openTradeline": {"attestation": Attestation}}}
registerOrganizationUser
Description
The registerOrganizationUser mutation is used to create a new user in the database. Upon successful creation, the mutation will return the user's unique ID. You should store this ID in your database and associate it with your consumer record, as it will be required for accessing authenticated queries and mutations.
🔒 Requires Organization scoped authorization. See the Enablement Services Authorization guide for reference.
Response
Returns a RegisterOrganizationUserOutput!
Arguments
Name | Description |
---|---|
input - RegisterOrganizationUserInput!
|
Input object |
Example
Query
mutation RegisterOrganizationUser($input: RegisterOrganizationUserInput!) {
registerOrganizationUser(input: $input) {
user {
email
phoneNumber
name {
...NameFragment
}
address {
...AddressFragment
}
status
notificationPreferences
legalAgreementVersions {
...LegalAgreementVersionsFragment
}
createdAt
updatedAt
syncedAt
closedAt
connections {
...ConnectionsConnectionFragment
}
tradelines {
...TradelinesConnectionFragment
}
}
token
expiry
}
}
Variables
{"input": RegisterOrganizationUserInput}
Response
{
"data": {
"registerOrganizationUser": {
"user": User,
"token": "12345abcde",
"expiry": "10:15:30Z"
}
}
}
Types
Address
Fields
Field Name | Description |
---|---|
line1 - String!
|
The first line of the address. |
line2 - String
|
The second line of the address (optional). |
city - String!
|
The city of the address. |
state - String!
|
The state or province of the address. |
country - String!
|
The country of the address. |
zipcode - String!
|
The postal or ZIP code of the address. |
type - AddressType!
|
The type of address. |
Example
{
"line1": "123 Main St",
"line2": "Apt 101",
"city": "Athens",
"state": "FL",
"country": "USA",
"zipcode": "37745",
"type": "PRIMARY"
}
AddressInput
Fields
Input Field | Description |
---|---|
line1 - String!
|
The first line of the address. |
line2 - String
|
The second line of the address (optional). |
city - String!
|
The city of the address. |
state - String!
|
The state or province of the address. |
country - String!
|
The country of the address. |
zipcode - String!
|
The postal or ZIP code of the address. |
type - AddressType!
|
The type of address. |
Example
{
"line1": "123 Main St",
"line2": "Apt 101",
"city": "Athens",
"state": "FL",
"country": "USA",
"zipcode": "37745",
"type": "PRIMARY"
}
AddressType
Values
Enum Value | Description |
---|---|
|
The primary address of the user. |
|
A secondary address of the user. |
|
A business address of the user. |
|
A military address of the user. |
|
A billing address of the user. |
|
A shipping address of the user. |
Example
"PRIMARY"
Attestation
Fields
Field Name | Description |
---|---|
agreements - AttestationAgreements!
|
The agreements associated with the attestation. |
Example
{"agreements": AttestationAgreements}
AttestationAgreements
Fields
Field Name | Description |
---|---|
rent - RentAgreements
|
The rent agreements. |
utility - UtilityAgreements
|
The utility agreements. |
Example
{
"rent": RentAgreements,
"utility": UtilityAgreements
}
AttestationAgreementsInput
Fields
Input Field | Description |
---|---|
rent - RentAgreementInput
|
The rent agreement input. |
utility - UtilityAgreementInput
|
The utility agreement input. |
Example
{
"rent": RentAgreementInput,
"utility": UtilityAgreementInput
}
Boolean
Description
The Boolean
scalar type represents true
or false
.
Example
true
CloseTradelineOutput
Fields
Field Name | Description |
---|---|
tradeline - Tradeline!
|
The tradeline that was closed. |
Example
{"tradeline": Tradeline}
Connection
Fields
Field Name | Description |
---|---|
status - ConnectionStatus!
|
The current status of the connection. |
institution - Institution!
|
The financial institution associated with the connection. |
Example
{"status": "ACTIVE", "institution": Institution}
ConnectionFilter
Fields
Input Field | Description |
---|---|
status - ConnectionStatus
|
Filter by connection status. |
Example
{"status": "ACTIVE"}
ConnectionStatus
Values
Enum Value | Description |
---|---|
|
The connection is active and functioning as expected. |
|
The connection requires a refresh to retrieve updated data. |
|
The connection has been closed and is no longer active. |
Example
"ACTIVE"
ConnectionsConnection
Fields
Field Name | Description |
---|---|
edges - [ConnectionsEdge!]!
|
An array of connection edges |
pageInfo - PageInfo!
|
PageInfo provides information about the paginated collection. |
Example
{
"edges": [ConnectionsEdge],
"pageInfo": PageInfo
}
ConnectionsEdge
Description
The connections returned for a given user.
Fields
Field Name | Description |
---|---|
cursor - String!
|
A unique identifier for a specific position in a paginated list. Used for fetching the next set of results in pagination. |
node - Connection!
|
The connection object. |
Example
{
"cursor": "MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw",
"node": Connection
}
ConnectionsInput
Description
The input required to query the connections that exist for a given user.
Fields
Input Field | Description |
---|---|
first - Int
|
This is a pagination parameter. (I.e. get the first N records). |
after - String
|
This is a pagination parameter. (I.e. get the first N records AFTER this cursor). |
filter - ConnectionFilter
|
Filter by connection status. |
Example
{
"first": 5,
"after": "MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw",
"filter": ConnectionFilter
}
CurrencyCode
Values
Enum Value | Description |
---|---|
|
The currency code for USD. |
Example
"USD"
Date
Description
A date in the format YYYY-MM-DD.
Example
"2007-12-03"
DateInput
DeleteMeOutput
Fields
Field Name | Description |
---|---|
user - User!
|
Returned user object |
Example
{"user": User}
ImportConnectionOutput
ImportUserInput
Fields
Input Field | Description |
---|---|
id - String!
|
The ID of the consumer to import. |
Example
{"id": "xyz789"}
ImportUserOutput
Fields
Field Name | Description |
---|---|
user - User!
|
The user object created as a result of the import. |
Example
{"user": User}
Institution
Int
Description
The Int
scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.
Example
123
LegalAgreementVersions
LegalAgreementVersionsInput
Fields
Input Field | Description |
---|---|
termsOfUse - Int!
|
Terms of use version |
Example
{"termsOfUse": 123}
Money
Description
The money object.
Fields
Field Name | Description |
---|---|
amount - Int!
|
The amount of money. |
currency - CurrencyCode!
|
The currency of the money. |
Example
{"amount": 123, "currency": "USD"}
Name
NameInput
Node
Possible Types
Node Types |
---|
Example
{}
NotificationType
Values
Enum Value | Description |
---|---|
|
May be used in the future, but not at this time for enablement services customers. |
|
May be used in the future, but not at this time for enablement services customers. |
|
This should be the value used as we do not send notifications at this time to users tied to an enablement services customer. |
Example
"EMAIL"
OpenTradelineInput
Fields
Input Field | Description |
---|---|
serviceAddress - String
|
The service address of the tradeline. |
servicePhone - String
|
The service phone number of the tradeline. |
serviceAddressType - AddressType
|
The type of service address. |
leaseStartDate - Date
|
The lease start date of the tradeline. |
utilityTypes - [UtilityType!]
|
The utility types associated with the tradeline. |
agreements - AttestationAgreementsInput!
|
The agreements for the attestation. |
Example
{
"serviceAddress": "xyz789",
"servicePhone": "abc123",
"serviceAddressType": "PRIMARY",
"leaseStartDate": "2007-12-03",
"utilityTypes": ["WATER"],
"agreements": AttestationAgreementsInput
}
OpenTradelineOutput
Fields
Field Name | Description |
---|---|
attestation - Attestation!
|
The attestation details of the tradeline. |
Example
{"attestation": Attestation}
PageInfo
Description
PageInfo provides information about the paginated collection.
Example
{
"hasNextPage": true,
"endCursor": "MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw"
}
PaymentFrequency
Description
How often the tradeline is paid.
Values
Enum Value | Description |
---|---|
|
The payment frequency is unknown. |
|
Payments are made monthly. |
|
Payments are made every two months. |
|
Payments are made quarterly. |
Example
"UNKNOWN"
RegisterOrganizationUserInput
Fields
Input Field | Description |
---|---|
organizationSlug - String!
|
URL-friendly name of the organization. |
email - String!
|
The email address of the user. |
phoneNumber - String!
|
The phone number of the user. |
name - NameInput!
|
The name of the user. |
address - AddressInput!
|
The address of the user. |
dateOfBirth - DateInput!
|
The date of birth of the user. |
nationalId - String
|
The national ID of the user (optional). |
visitorID - String
|
The visitor ID for tracking purposes (optional). |
notificationPreferences - NotificationType
|
The notification preferences of the user. |
legalAgreementVersions - LegalAgreementVersionsInput
|
The legal agreement versions the user has accepted. |
Example
{
"organizationSlug": "bloom",
"email": "[email protected]",
"phoneNumber": "+12345678901",
"name": NameInput,
"address": AddressInput,
"dateOfBirth": DateInput,
"nationalId": "12345",
"visitorID": "12345",
"notificationPreferences": "EMAIL",
"legalAgreementVersions": LegalAgreementVersionsInput
}
RegisterOrganizationUserOutput
RentAgreementInput
RentAgreements
Scope
Values
Enum Value | Description |
---|---|
|
Scope for organization-level access. |
|
Scope for user-level access. |
|
Scope for anonymous access. |
Example
"ORGANIZATION"
String
Description
The String
scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
Example
"xyz789"
Time
Description
An RFC3339 formatted timestamp.
Example
"10:15:30Z"
Tradeline
Fields
Field Name | Description |
---|---|
merchant - String!
|
The merchant associated with the tradeline. |
category - TradelineCategory!
|
The category of the tradeline. |
isOpen - Boolean!
|
Indicates if the tradeline is open. |
isEligible - Boolean!
|
Indicates if the tradeline is eligible for reporting. |
attestation - Attestation
|
The attestation details of the tradeline. |
paymentFrequency - PaymentFrequency!
|
The payment frequency of the tradeline. |
serviceAddress - String
|
The service address of the tradeline. |
servicePhone - String
|
The service phone number of the tradeline. |
leaseStartDate - String
|
The lease start date of the tradeline. |
utilityTypes - [UtilityType!]
|
The utility types associated with the tradeline. |
serviceAddressType - String
|
The type of service address. |
createdAt - Time!
|
The time the tradeline was created. |
updatedAt - Time!
|
The last time the tradeline was updated. |
transactions - TransactionsConnection!
|
The transactions associated with the tradeline. |
Arguments
|
Example
{
"merchant": "Pollen Water Co",
"category": "RENT",
"isOpen": true,
"isEligible": false,
"attestation": Attestation,
"paymentFrequency": "MONTHLY",
"serviceAddress": "123 Main St Athens FL 37745",
"servicePhone": "+12345678901",
"leaseStartDate": "2025-01-01",
"utilityTypes": ["WATER"],
"serviceAddressType": "PRIMARY",
"createdAt": "10:15:30Z",
"updatedAt": "10:15:30Z",
"transactions": TransactionsConnection
}
TradelineCategory
Values
Enum Value | Description |
---|---|
|
A tradeline associated with rent payments. |
|
A tradeline associated with utility payments. |
|
A tradeline associated with telecommunication services. |
|
A tradeline associated with other types of payments. |
|
A tradeline associated with subscription services. |
Example
"RENT"
TradelinesConnection
Fields
Field Name | Description |
---|---|
edges - [TradelinesEdge!]!
|
The edges of the tradelines connection. |
pageInfo - PageInfo!
|
The pagination information for the tradelines connection. |
Example
{
"edges": [TradelinesEdge],
"pageInfo": PageInfo
}
TradelinesEdge
Description
The tradelines returned for a given connection.
Fields
Field Name | Description |
---|---|
cursor - String!
|
A unique identifier for a specific position in a paginated list. Used for fetching the next set of results in pagination. |
node - Tradeline!
|
The tradeline object. |
Example
{
"cursor": "MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw",
"node": Tradeline
}
TradelinesInput
Fields
Input Field | Description |
---|---|
first - Int
|
This is a pagination parameter. (I.e. get the first N records). |
after - String
|
This is a pagination parameter. (I.e. get the first N records AFTER this cursor). |
isOpen - Boolean
|
Whether or not the tradeline has been attested to. |
isEligible - Boolean
|
Whether or not the tradeline is eligible for reporting to the credit bureaus. |
Example
{"first": 5, "after": "3", "isOpen": false, "isEligible": true}
Transaction
TransactionsConnection
Fields
Field Name | Description |
---|---|
edges - [TransactionsEdge!]!
|
The edges of the transactions connection. |
pageInfo - PageInfo!
|
The pagination information for the transactions connection. |
Example
{
"edges": [TransactionsEdge],
"pageInfo": PageInfo
}
TransactionsEdge
Description
The transactions returned for a given connection.
Fields
Field Name | Description |
---|---|
cursor - String!
|
A unique identifier for a specific position in a paginated list. Used for fetching the next set of results in pagination. |
node - Transaction!
|
The transaction object. |
Example
{
"cursor": "MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAw",
"node": Transaction
}
TransactionsInput
Fields
Input Field | Description |
---|---|
first - Int
|
This is a pagination parameter. (I.e. get the first N records). - Optional. Only required if you are wanting to query for the transactionsas well. |
after - String
|
This is a pagination parameter. (I.e. get the first N records AFTER this cursor). - Optional. Only required if you are wanting to query for the transactions as well. |
Example
{"first": 5, "after": "3"}
User
Description
The user type
Fields
Field Name | Description |
---|---|
email - String!
|
User's email address |
phoneNumber - String!
|
User's phone number |
name - Name!
|
User's name |
address - Address!
|
User's address |
status - UserStatus!
|
User's status |
notificationPreferences - NotificationType!
|
Notifications are currently not sent for enablement Services. |
legalAgreementVersions - [LegalAgreementVersions]!
|
The Legal agreement versions the user has accepted. |
createdAt - Time!
|
The time the user was created in the database. |
updatedAt - Time!
|
The last time the user was updated. |
syncedAt - Time
|
The last time this user's connections were synced. |
closedAt - Time
|
The time this user profile was closed. |
connections - ConnectionsConnection!
|
The financial institution connections the user has created. |
Arguments
|
|
tradelines - TradelinesConnection!
|
The tradelines associated with the connected financial institution(s) this user has connected. |
Arguments
|
Example
{
"email": "[email protected]",
"phoneNumber": "+12345678901",
"name": {"first": "Buzz", "last": "Inga"},
"address": {
"line1": "123 Main St",
"city": "Athens",
"state": "FL",
"country": "USA",
"zipcode": "37745",
"type": "PRIMARY"
},
"status": "VERIFIED",
"notificationPreferences": "EMAIL",
"legalAgreementVersions": [{"name": "Terms of Use", "version": 1}],
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-02T00:00:00Z",
"syncedAt": "10:15:30Z",
"closedAt": "10:15:30Z",
"connections": ConnectionsConnection,
"tradelines": TradelinesConnection
}
UserStatus
Values
Enum Value | Description |
---|---|
|
Pending is to be used prior to verifying the user - whether that be through OTP or other means. |
|
Use this status once the user has been verified. |
Example
"PENDING"
UtilityAgreementInput
Fields
Input Field | Description |
---|---|
isPrimaryAddress - Boolean!
|
Indicates if this is the primary address. |
Example
{"isPrimaryAddress": false}
UtilityAgreements
Fields
Field Name | Description |
---|---|
isPrimaryAddress - Boolean!
|
Indicates if this is the primary address. |
Example
{"isPrimaryAddress": false}
UtilityType
Values
Enum Value | Description |
---|---|
|
A utility type for water services. |
|
A utility type for electric services. |
|
A utility type for gas services. |
|
An additional utility type. |
Example
"WATER"