Bridge Customers API
The Customers API from Bridge — 9 operation(s) for customers.
The Customers API from Bridge — 9 operation(s) for customers.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/bridge-customers-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
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:
EndorsementType:
description: 'The type of endorsement. Note: `pix_onramp` (BRL deposits via PIX) and `pix_offramp` (BRL withdrawals via PIX) can be requested individually for granular access. Requesting `pix` grants both directional endorsements. `pix_onramp` is not supported for non-BR individuals; if requested (or requested via `pix`) it will remain in an `endorsement_not_available_in_customers_region` state and no action is required.
'
type: string
enum:
- base
- cards
- cop
- faster_payments
- pix
- pix_onramp
- pix_offramp
- sepa
- spei
Currency:
type: string
enum:
- usdb
- usdc
- usdt
- usd
- pyusd
IndividualDocuments:
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:
- proof_of_account_purpose
- proof_of_address
- proof_of_individual_name_change
- proof_of_relationship
- proof_of_source_of_funds
- proof_of_source_of_wealth
- proof_of_tax_identification
- other
description: A list of purposes that the given document serves. Click "ADD STRING" to see common document purposes for individuals, or view the full list of possible values [here](https://apidocs.bridge.xyz/docs/supported-documents).
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.
UpdateIndividualCustomerPayload:
title: Individual Customer
properties:
type:
description: Type of the customer (individual vs. business).
type: string
minLength: 1
enum:
- individual
first_name:
type: string
minLength: 2
maxLength: 1024
description: The first name of the individual.
middle_name:
type: string
minLength: 1
maxLength: 1024
description: The middle name of the individual.
last_name:
type: string
minLength: 2
maxLength: 1024
description: The last name of the individual.
transliterated_first_name:
type: string
description: 'Required when the `first_name` includes any non Latin-1 characters. Acceptable characters - Latin-1 Unicode Character Range: À-ÖØ-ßà-öø-ÿ; Standard Unicode Character Range: -~'
minLength: 1
maxLength: 256
transliterated_middle_name:
type: string
description: 'Required when the `middle_name` includes any non Latin-1 characters. Acceptable characters - Latin-1 Unicode Character Range: À-ÖØ-ßà-öø-ÿ; Standard Unicode Character Range: -~'
minLength: 1
maxLength: 256
transliterated_last_name:
type: string
description: 'Required when the `last_name` includes any non Latin-1 characters. Acceptable characters - Latin-1 Unicode Character Range: À-ÖØ-ßà-öø-ÿ; Standard Unicode Character Range: -~'
minLength: 1
maxLength: 256
email:
type: string
minLength: 1
maxLength: 1024
description: The individuals primary email address
phone:
type: string
minLength: 1
maxLength: 1024
description: The individuals primary phone number in format "+12223334444"
residential_address:
writeOnly: true
$ref: '#/components/schemas/Address2025WinterRefresh'
description: The residential address of the individual. This must be a physical address, not a PO Box.
transliterated_residential_address:
writeOnly: true
$ref: '#/components/schemas/Address2025WinterRefresh'
description: 'Required when any part of the `residential_address` includes any non Latin-1 characters. Acceptable characters - Latin-1 Unicode Character Range: À-ÖØ-ßà-öø-ÿ; Standard Unicode Character Range: -~'
birth_date:
type: string
description: Date of birth in format yyyy-mm-dd. Must be at least 18 years old.
minLength: 10
maxLength: 10
signed_agreement_id:
writeOnly: true
type: string
description: 'The ID of the signed agreement that the customer completed. You can get a signed agreement id for a _new_ customer by following this guide [here](https://apidocs.bridge.xyz/docs/terms-of-service#tos-acceptance-for-a-new-customer).
'
minLength: 1
maxLength: 1024
endorsements:
writeOnly: true
type: array
description: 'List of endorsements to request for this customer. If omitted, we''ll attempt to grant `base` and `sepa`.
'
items:
$ref: '#/components/schemas/EndorsementType'
account_purpose:
type: string
description: 'What is the primary purpose of the customer''s account?
_Required for high risk customers. More information found [here](https://apidocs.bridge.xyz/docs/individuals)._
**EEA / BBSA in-scope individuals:** also required under program rules (not for associated persons). See [EEA updated requirements](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements#account-purpose-and-employment-status).
'
enum:
- charitable_donations
- ecommerce_retail_payments
- investment_purposes
- operating_a_company
- other
- payments_to_friends_or_family_abroad
- personal_or_living_expenses
- protect_wealth
- purchase_goods_and_services
- receive_payment_for_freelancing
- receive_salary
account_purpose_other:
type: string
description: 'A supplemental description of the `account_purpose`.
_Required if the `account_purpose` is `other`._
'
employment_status:
type: string
description: 'What is the customer''s current employment status?
_Required for high risk customers. More information found [here](https://apidocs.bridge.xyz/docs/individuals)._
**EEA / BBSA in-scope individuals:** also required under program rules (not for associated persons). See [EEA updated requirements](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements#account-purpose-and-employment-status).
'
enum:
- employed
- homemaker
- retired
- self_employed
- student
- unemployed
expected_monthly_payments_usd:
type: string
description: 'What is the expected monthly volume of payments the customer will be sending or receiving?
_Required for high risk customers. More information found [here](https://apidocs.bridge.xyz/docs/individuals)_
'
enum:
- 0_4999
- '5000_9999'
- '10000_49999'
- 50000_plus
acting_as_intermediary:
type: boolean
description: 'Is the customer acting as an intermediary for a third party?
_Required for high risk customers. More information found [here](https://apidocs.bridge.xyz/docs/individuals)_
'
most_recent_occupation:
type: string
description: 'What is the customer''s most recent occupation? Specify the relevant alphanumeric occupation code. See the [list of occupations](https://apidocs.bridge.xyz/page/sof-eu-most-recent-occupation-list) for the complete list of valid occupations and codes. _Required for Restricted countries._
_Required for high risk customers. More information found [here](https://apidocs.bridge.xyz/docs/individuals)_
'
source_of_funds:
type: string
description: 'The individuals source of funds, e.g. government_benefits, investments_loans, salary, etc.
_Required for high risk customers. More information found [here](https://apidocs.bridge.xyz/docs/individuals)_
'
enum:
- company_funds
- ecommerce_reseller
- gambling_proceeds
- gifts
- government_benefits
- inheritance
- investments_loans
- pension_retirement
- salary
- sale_of_assets_real_estate
- savings
- someone_elses_funds
nationality:
type: string
description: 'Legacy single nationality as ISO 3166-1 alpha-3. Prefer `nationalities` to send **all** nationalities. During migration Bridge honors either field; `nationality` will be deprecated after migration. **EEA / BBSA program:** see [Nationalities](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements#nationalities).
'
writeOnly: true
nationalities:
type: array
writeOnly: true
description: 'All nationalities held by the customer (ISO 3166-1 alpha-3 codes). **EEA / BBSA in-scope individuals:** required. See [EEA updated requirements](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements#nationalities).
'
items:
type: string
minLength: 3
maxLength: 3
place_of_birth:
writeOnly: true
$ref: '#/components/schemas/PlaceOfBirthInput'
verified_database_at:
type: string
format: date-time
description: 'Write-only ISO 8601 timestamp. For **EEA in-scope** customers on **reliance** (`TWO_FORMS_OF_ID_RELIANCE` in `eea_requirements.rb`), may stand in for a database identity check together with `verified_govid_at`. See [EEA updated requirements — identity](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements).
'
writeOnly: true
verified_govid_at:
type: string
format: date-time
description: 'Write-only ISO 8601 timestamp. For **EEA in-scope** customers on **reliance**, use with a second factor (`verified_selfie_at` or `verified_database_at`) per `TWO_FORMS_OF_ID_RELIANCE`. See [EEA updated requirements](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements).
'
writeOnly: true
verified_selfie_at:
type: string
format: date-time
description: 'Write-only ISO 8601 timestamp. For **EEA in-scope** customers on **reliance**, pairs with `verified_govid_at` or `verified_database_at` under `TWO_FORMS_OF_ID_RELIANCE`.
'
writeOnly: true
liveness_check_selfies:
type: array
writeOnly: true
description: 'Selfie images to submit for Bridge''s liveness verification. Use this when you are collecting the customer''s selfie on behalf of Bridge.
**EEA in-scope** customers: selfies submitted via this field are not sufficient. Th
# --- 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