Bridge Customers API
The Customers API from Bridge — 9 operation(s) for customers.
The Customers API from Bridge — 9 operation(s) for customers.
openapi: 3.0.2
info:
title: Bridge API Keys Customers API
description: APIs to move into, out of, and between any form of a dollar
version: '1'
servers:
- url: https://api.bridge.xyz/v0
description: The base path for all resources
security:
- ApiKey: []
tags:
- name: Customers
paths:
/customers:
get:
summary: Get all customers
description: Get the full list of all customers created on Bridge
tags:
- Customers
parameters:
- $ref: '#/components/parameters/CustomerStartingAfterParameter'
- $ref: '#/components/parameters/CustomerEndingBeforeParameter'
- $ref: '#/components/parameters/LimitParameter'
- $ref: '#/components/parameters/CustomerEmailParameter'
responses:
'200':
description: List of customers (the returned list is empty if none found)
content:
application/json:
schema:
title: Customers
type: object
required:
- count
- data
properties:
count:
description: total number of items in data
type: integer
data:
type: array
minItems: 0
items:
$ref: '#/components/schemas/Customer'
examples:
CustomersFound:
summary: A non-empty list of customers
value:
data:
- $ref: '#/components/examples/SuccessfulCustomerResponse/value'
- $ref: '#/components/examples/SuccessfulCustomerResponse2/value'
NoCustomersFound:
summary: An empty list of customers
value:
data: []
'401':
$ref: '#/components/responses/AuthenticationError'
'500':
$ref: '#/components/responses/UnexpectedError'
post:
summary: Create a customer
tags:
- Customers
parameters:
- $ref: '#/components/parameters/IdempotencyKeyParameter'
requestBody:
description: 'Customer object to be created.
No fields are strictly required by the API. For example, it is valid to create a customer without a first name, last name, or residential address, but this customer will not be granted endorsements required to transact on Bridge until the necessary information is provided, possibly via a PUT request.
'
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/CreateIndividualCustomerPayload'
- $ref: '#/components/schemas/CreateBusinessCustomerPayload'
discriminator:
propertyName: type
mapping:
individual: '#/components/schemas/CreateIndividualCustomerPayload'
business: '#/components/schemas/CreateBusinessCustomerPayload'
responses:
'201':
description: Customer object created
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
examples:
IndividualCustomerCreated:
summary: Customer successfully created
$ref: '#/components/examples/SuccessfulCustomerResponse'
BusinessCustomerCreated:
summary: Customer successfully created
$ref: '#/components/examples/SuccessfulCustomerResponse2'
'401':
$ref: '#/components/responses/AuthenticationError'
'400':
$ref: '#/components/responses/BadRequestError'
'500':
$ref: '#/components/responses/UnexpectedError'
/customers/{customerID}:
parameters:
- $ref: '#/components/parameters/CustomerIDParameter'
get:
summary: Get a single customer object
tags:
- Customers
description: Retrieve a customer object from the passed in customer ID
responses:
'200':
description: Successful customer object response
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
examples:
SuccessfulCustomerResponse:
$ref: '#/components/examples/SuccessfulCustomerResponse'
RejectedCustomerResponse:
$ref: '#/components/examples/RejectedCustomerResponse'
'401':
$ref: '#/components/responses/AuthenticationError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/UnexpectedError'
put:
summary: Update a single customer object
tags:
- Customers
requestBody:
description: Customer object to update with
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/UpdateIndividualCustomerPayload'
- $ref: '#/components/schemas/UpdateBusinessCustomerPayload'
discriminator:
propertyName: type
mapping:
individual: '#/components/schemas/UpdateIndividualCustomerPayload'
business: '#/components/schemas/UpdateBusinessCustomerPayload'
description: 'Updates to be made to the specified customer.
No fields are strictly required by the API. It is generally valid to provide any subset of data in a PUT request. For business customers, associated persons cannot be updated via PUT, and should instead be managed using v0/associated_persons.
'
responses:
'200':
description: Successful customer object response
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
examples:
SuccessfulCustomerResponse:
$ref: '#/components/examples/SuccessfulCustomerResponse'
RejectedCustomerResponse:
$ref: '#/components/examples/RejectedCustomerResponse'
'401':
$ref: '#/components/responses/AuthenticationError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/UnexpectedError'
delete:
summary: Delete a single customer object
tags:
- Customers
description: Delete a customer object from the passed in customer ID
responses:
'200':
description: Successfully deleted customer object response
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
examples:
DeletedCustomerResponse:
$ref: '#/components/examples/SuccessfulCustomerResponse'
'401':
$ref: '#/components/responses/AuthenticationError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/UnexpectedError'
/customers/{customerID}/associated_persons:
parameters:
- $ref: '#/components/parameters/CustomerIDParameter'
get:
summary: Get associated persons for a business customer
tags:
- Customers
description: Get all associated persons for a business customer.
responses:
'200':
description: List of associated persons (the returned list is empty if none found)
content:
application/json:
schema:
title: AssociatedPersonsList
type: object
required:
- data
properties:
data:
type: array
minItems: 0
items:
$ref: '#/components/schemas/AssociatedPersonResponse'
examples:
AssociatedPersonsFound:
summary: A non-empty list of associated persons
value:
data:
- $ref: '#/components/examples/SuccessfulAssociatedPersonResponse/value'
NoAssociatedPersonsFound:
summary: An empty list of associated persons
value:
data: []
'401':
$ref: '#/components/responses/AuthenticationError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/UnexpectedError'
post:
summary: Create a new associated person for a business customer
tags:
- Customers
parameters:
- $ref: '#/components/parameters/IdempotencyKeyParameter'
requestBody:
description: New associated person to be created
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssociatedPerson'
responses:
'201':
description: Associated person created
content:
application/json:
schema:
$ref: '#/components/schemas/AssociatedPersonResponse'
examples:
SuccessfulAssociatedPersonResponse:
$ref: '#/components/examples/SuccessfulAssociatedPersonResponse'
'401':
$ref: '#/components/responses/AuthenticationError'
'400':
$ref: '#/components/responses/BadRequestError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/UnexpectedError'
/customers/{customerID}/associated_persons/{associatedPersonID}:
parameters:
- $ref: '#/components/parameters/CustomerIDParameter'
- $ref: '#/components/parameters/AssociatedPersonIDParameter'
get:
summary: Get a single associated person
tags:
- Customers
description: Retrieve an associated person by ID
responses:
'200':
description: Successful associated person response
content:
application/json:
schema:
$ref: '#/components/schemas/AssociatedPersonResponse'
examples:
SuccessfulAssociatedPersonResponse:
$ref: '#/components/examples/SuccessfulAssociatedPersonResponse'
'401':
$ref: '#/components/responses/AuthenticationError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/UnexpectedError'
put:
summary: Update a single associated person
tags:
- Customers
requestBody:
description: Associated person data to update
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssociatedPerson'
responses:
'200':
description: Updated associated person
content:
application/json:
schema:
$ref: '#/components/schemas/AssociatedPersonResponse'
examples:
SuccessfulAssociatedPersonResponse:
$ref: '#/components/examples/SuccessfulAssociatedPersonResponse'
'401':
$ref: '#/components/responses/AuthenticationError'
'400':
$ref: '#/components/responses/BadRequestError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/UnexpectedError'
delete:
summary: Delete a single associated person
tags:
- Customers
description: Delete an associated person by ID
responses:
'200':
description: Successfully deleted associated person
content:
application/json:
schema:
$ref: '#/components/schemas/AssociatedPersonResponse'
examples:
SuccessfulAssociatedPersonResponse:
$ref: '#/components/examples/SuccessfulAssociatedPersonResponse'
'401':
$ref: '#/components/responses/AuthenticationError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/UnexpectedError'
/customers/{customerID}/tos_acceptance_link:
get:
summary: Retrieve a hosted URL for ToS acceptance for an existing customer
tags:
- Customers
description: The page at the returned URL will guide the user through the Bridge Terms of Service (ToS) acceptance flow. This can be used by existing customers to accept a new version of the ToS.
parameters:
- $ref: '#/components/parameters/CustomerIDParameter'
responses:
'200':
description: A Hosted URL for ToS acceptance
content:
application/json:
schema:
type: object
required:
- url
properties:
url:
type: string
description: A hosted URL for ToS acceptance
examples:
TosAcceptanceLink:
summary: A sample ToS acceptance link
value:
url: https://compliance.bridge.xyz/accept-terms-of-service?email=sage%40blick-mayer.example&t=74ea7c13-2b52-5073-bd12-6879f92b88dd
'401':
$ref: '#/components/responses/AuthenticationError'
'500':
$ref: '#/components/responses/UnexpectedError'
/customers/{customerID}/kyc_link:
get:
summary: Retrieve a hosted KYC Link for an existing customer
tags:
- Customers
description: 'The page at the returned URL will guide the user through a Bridge KYC flow. This can be used by existing customers to provide additional KYC information required for certain features or services that Bridge offers.
For example, to enable an existing customer to use the `SEPA`/`Euro` services, they are required to provide `proof of address`. An additional parameter, `endorsement=sepa`, can be included to request a KYC link specifically for this purpose'
parameters:
- $ref: '#/components/parameters/CustomerIDParameter'
- $ref: '#/components/parameters/EndorsementParameter'
- $ref: '#/components/parameters/RedirectUriParameter'
responses:
'200':
description: A Hosted URL for KYC
content:
application/json:
schema:
type: object
required:
- url
properties:
url:
type: string
description: A hosted KYC link
examples:
KycLink:
summary: A sample KYC link
value:
url: https://bridge.withpersona.com/verify?inquiry-template-id=itmpl_NtIXpb9AbEYCPxGo5iRbc9d2&reference-id=75d2f259-6810-4cde-a9b9-83eca42b0ebf
'401':
$ref: '#/components/responses/AuthenticationError'
'500':
$ref: '#/components/responses/UnexpectedError'
/customers/{customerID}/transfers:
parameters:
- $ref: '#/components/parameters/CustomerIDParameter'
- $ref: '#/components/parameters/LimitParameter'
- $ref: '#/components/parameters/TransferStartingAfterParameter'
- $ref: '#/components/parameters/TransferEndingBeforeParameter'
- $ref: '#/components/parameters/TxHashParameter'
- $ref: '#/components/parameters/UpdatedAfterMsParameter'
- $ref: '#/components/parameters/UpdatedBeforeMsParameter'
- $ref: '#/components/parameters/TransferStateParameter'
get:
summary: Get all transfers
tags:
- Customers
description: Get all active and completed transfers for a customer.
responses:
'200':
description: List of transfers (the returned list is empty if none found)
content:
application/json:
schema:
title: Transfers
type: object
required:
- count
- data
properties:
count:
type: integer
description: The number of transfers returned
data:
type: array
minItems: 0
items:
$ref: '#/components/schemas/TransferResponse'
examples:
TransfersFound:
summary: A non-empty list of transfers
value:
count: 2
data:
- $ref: '#/components/examples/AchOnrampFundsReceivedTransferResponse/value'
- $ref: '#/components/examples/AchOfframpTransferResponse/value'
NoTransfersFound:
summary: An empty list of transfers
value:
count: 0
data: []
'401':
$ref: '#/components/responses/AuthenticationError'
'500':
$ref: '#/components/responses/UnexpectedError'
/customers/{customerID}/transfers/static_templates:
parameters:
- $ref: '#/components/parameters/CustomerIDParameter'
- $ref: '#/components/parameters/LimitParameter'
- $ref: '#/components/parameters/TransferStartingAfterParameter'
- $ref: '#/components/parameters/TransferEndingBeforeParameter'
get:
summary: Get all static templates for a customer
tags:
- Customers
description: Get all static templates for a customer. Static templates are transfers that are used as templates for other transfers and can be created using the static_templates feature flag.
responses:
'200':
description: List of static templates (the returned list is empty if none found)
content:
application/json:
schema:
title: Static Templates
type: object
required:
- count
- data
properties:
count:
type: integer
description: The number of static templates returned
data:
type: array
minItems: 0
items:
$ref: '#/components/schemas/TransferResponse'
examples:
StaticTemplatesFound:
summary: A non-empty list of static templates
value:
count: 2
data:
- $ref: '#/components/examples/AchOnrampFundsReceivedTransferResponse/value'
- $ref: '#/components/examples/AchOfframpTransferResponse/value'
NoStaticTemplatesFound:
summary: An empty list of static templates
value:
count: 0
data: []
'401':
$ref: '#/components/responses/AuthenticationError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/UnexpectedError'
/customers/tos_links:
post:
summary: Request a hosted URL for ToS acceptance for new customer creation
tags:
- Customers
parameters:
- $ref: '#/components/parameters/IdempotencyKeyParameter'
description: The URL endpoint returned will guide the user through a Bridge TOS flow. Signing this acceptance flow is a requirement for creating customers.
responses:
'201':
description: A Bridge hosted URL for users to complete terms of service signing.
content:
application/json:
schema:
type: object
required:
- url
properties:
url:
type: string
description: A Bridge hosted URL for users to complete terms of service signing.
examples:
TosUrl:
summary: A sample Bridge hosted URL
value:
data:
url: https://compliance.bridge.xyz/accept-terms-of-service?session_token=4d5d8c45-9feb-422a-bb5e-0fd32e3b3c53&redirect_uri=https%3A%2F%2Fgoogle.com
'401':
$ref: '#/components/responses/AuthenticationError'
'500':
$ref: '#/components/responses/UnexpectedError'
components:
schemas:
BusinessDocuments:
writeOnly: true
type: array
title: Documents
description: Please click "ADD OBJECT" for more information.
items:
type: object
required:
- purposes
- file
properties:
purposes:
type: array
items:
type: string
enum:
- aml_comfort_letter
- business_formation
- directors_registry
- e_signature_certificate
- evidence_of_good_standing
- flow_of_funds
- marketing_materials
- ownership_chart
- ownership_information
- proof_of_account_purpose
- proof_of_address
- proof_of_entity_name_change
- proof_of_nature_of_business
- proof_of_signatory_authority
- proof_of_source_of_funds
- proof_of_source_of_wealth
- proof_of_tax_identification
- shareholder_register
- other
description: '**EEA / BBSA (business KYB):** purposes used in [EEA updated requirements](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements) include `business_formation`, `evidence_of_good_standing`, `ownership_information`, and `proof_of_signatory_authority` (letter of authorization). See supported-documents for the full enum [here](https://apidocs.bridge.xyz/docs/supported-documents).
For **non-reliance** EEA in-scope businesses, `business_formation`, `evidence_of_good_standing`, and `ownership_information` are evaluated **independently** in CPU policy: each may be satisfied by an uploaded/Persona-backed document **or**, when Stripe business-registry verification passes with the required checks and provider metadata, by that verification alone for that document slot (see `BUSINESS_REGISTRY_CHECK` and `BUSINESS_OWNERSHIP` in `eea_requirements.rb`).
'
file:
type: string
description: "Base64 encoded image of the provided document, following the data-uri scheme i.e. data:image/[type];base64,[base_64_encoded_file_contents], with a minimum size of 200px x 200px \n\n*Maximum File Size: 24MB\n\n*Valid file types: .pdf, .jpeg, .jpg, .png, .heic, .tif"
description:
type: string
description: A description describing the provided document. This field is required when `other` is provided as one of the purposes.
ExchangeDetails:
description: Exchange information for a currency conversion.
properties:
fixed_rate:
description: The target exchange rate.
type: string
estimated_market_rate:
description: The estimated achievable rate based on current market conditions.
type: string
traded_market_rate:
description: The actual effective exchange rate achieved.
type: string
trade_at_market:
description: Whether market-rate execution has been applied to this trade.
type: boolean
updated_at:
description: Timestamp of the last exchange details update.
type: string
format: date-time
Endorsement:
required:
- name
- status
properties:
name:
description: The endorsement type.
$ref: '#/components/schemas/EndorsementType'
status:
type: string
enum:
- incomplete
- approved
- revoked
additional_requirements:
description: "This field is deprecated. See endorsement.missing instead. Additional requirements that need to be completed for obtaining the approval for the endorsement. \n\n1. `kyc_approval` and `tos_acceptance` are required for the `base` endorsement. \n2. `tos_v2_acceptance` is required for `sepa`. If `tos_v2_acceptance` is not completed, a ToS acceptance link can be retrieved for the current customer from the endpoint `/v0/customers/{customerID}/tos_acceptance_link`. To fulfill the `kyc_with_proof_of_address` requirement, a KYC link can be specifically requested for the current customer via the endpoint `/v0/customers/{customerID}/kyc_link`, with `endorsement=sepa` included in the query string"
type: array
minItems: 0
items:
$ref: '#/components/schemas/EndorsementRequirementEnum'
requirements:
description: 'This object aims to replace the `additional_requirements` attribute as it gives a more comprehensive view into what items are already `complete` or `pending` and which are `missing` or have `issues`.
'
type: object
required:
- complete
- pending
- missing
- issues
properties:
complete:
type: array
description: an array of requirements that have already been completed for this endorsement.
minItems: 0
items:
type: string
pending:
type: array
description: an array of requirements that are pending review for this endorsement.
minItems: 0
items:
type: string
missing:
type: object
description: an object that will specify an indepth breakdown of what items are missing for this endorsement.
issues:
type: array
description: 'An array of issues preventing this endorsement from being approved. Values in this array can be either a string such as `endorsement_not_available_in_customers_region` or an object that correlates the issue to a particular field such as `{ id_front_photo: "id_expired" }`
'
minItems: 0
items:
oneOf:
- type: string
- type: object
future_requirements:
description: 'An array of upcoming requirements that will become active on their effective_date.
Each entry has the same structure as the current requirements object, plus an
effective_date indicating when the requirement takes effect.
'
type: array
minItems: 0
items:
type: object
required:
- effective_date
- verification_stage
- pending
- missing
- issues
properties:
effective_date:
type: string
format: date
verification_stage:
type: string
description: The verification stage this future requirement is currently at.
enum:
- automatic_review
- manual_review
- post_review
- complete
- not_applicable
pending:
type: array
items:
type: string
missing:
type: object
nullable: true
issues:
type: array
items:
oneOf:
- type: string
- type: object
client_reference_id:
description: A client-provided reference ID that uniquely identifies a resource in the client's system
type: string
minLength: 1
maxLength: 256
Customer:
properties:
id:
$ref: '#/components/schemas/Id'
readOnly: true
first_name:
type: string
minLength: 1
maxLength: 1024
last_name:
type: string
minLength: 1
maxLength: 1024
email:
type: string
minLength: 1
maxLength: 1024
status:
type: string
$ref: '#/components/schemas/CustomerStatus'
capabilities:
deprecated: true
type: object
properties:
payin_crypto:
type: string
$ref: '#/components/schemas/CustomerCapabilityState'
payout_crypto:
type: string
$ref: '#/components/schemas/CustomerCapabilityState'
payin_fiat:
type: string
$ref: '#/components/schemas/CustomerCapabilityState'
payout_fiat:
type: string
$ref: '#/components/schemas/CustomerCapabilityState'
future_requirements_due:
deprecated: true
readOnly: true
description: Information about requirements that may be needed in the future for the customer (eg. enhanced KYC checks for high volume transactions etc.). Please consult our KYC guide on how to resolve each requirement.
type: array
minItems: 0
items:
type: string
enum:
- id_verification
requirements_due:
deprecated: true
readOnly: true
description: KYC requirements still needed to be completed. Please consult our KYC guide on how to resolve each requirement.
type: array
minItems: 0
items:
type: string
enum:
- external_account
- id_verification
created_at:
readOnly: true
type: string
description: Time of creation of the customer
format: date-time
updated_at:
readOnly: true
type: string
description: Time of last update of the customer
format: date-time
rejection_reasons:
deprecated: true
readOnly: true
description: Reasons why a customer KYC was rejected
type: array
minItems: 0
items:
$ref: '#/components/schemas/RejectionReason'
has_accepted_terms_of_service:
readOnly: true
description: Whether the customer has accepted the terms of service.
type: boolean
client_reference_id:
description: Caller-provided identifier used to correlate this customer with your internal records. Returned in API and webhook responses.
$ref: '#/components/schemas/client_reference_id'
endorsements:
readOnly: true
description: A summary of whether the customer has received approvals to complete onboarding or use certain products/services offered by Bridge.
type: array
minItems: 0
items:
$ref: '#/components/schemas/Endorsement'
ReturnInstructions:
description: Optional instructions for where to send funds if the transfer is returned (e.g. refund). Only supported when the source payment rail is crypto. Memo is required when the source payment rail is Stellar.
type: object
required:
- address
properties:
address:
description: The crypto wallet address to send returned funds to. Must be valid for the source payment rail's chain.
type: string
memo:
description: Memo to include with the return transaction. Required when the source payment rail is Stellar; optional for other memo-capable chains.
type: string
TransferSourcePaymentRail:
type: string
enum:
- ach
- wire
- ach_push
- ach_same_day
- fednow
- arbitrum
- avalanche_c_chain
- base
- bre_b
- co_bank_transfer
- bridge_wallet
- celo
- ethereum
- faster_payments
- optimism
- pix
- polygon
- sepa
- solana
- spei
- stellar
- swift
- tempo
- tron
TransferDestination:
required:
- currency
# --- truncated at 32 KB (129 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/bridge/refs/heads/main/openapi/bridge-customers-api-openapi.yml