Recipients API
Streamline how you set up, manage, and verify payees by creating, updating, listing, and validating recipients for your payment transactions. This helps keep your payment workflows organized and secure without manual tracking.
Streamline how you set up, manage, and verify payees by creating, updating, listing, and validating recipients for your payment transactions. This helps keep your payment workflows organized and secure without manual tracking.
# Harvested verbatim from the J.P. Morgan Payments Developer Portal.
# method: searched
# source: https://developer.payments.jpmorgan.com/api/llm-content?path=en%2Fapi%2Fembedded-finance-solutions%2Fembedded-payments%2Fembedded-payments%2Frecipients.md
# generated: '2026-07-28'
openapi: 3.0.1
info:
title: Recipients API
version: 1.0.55
description: Streamline how you set up, manage, and verify payees by creating, updating, listing, and
validating recipients for your payment transactions. This helps keep your payment workflows organized
and secure without manual tracking.
contact:
name: JPMC Technical Services Support
servers:
- url: https://api.payments.jpmorgan.com/embedded/v1
description: PRODUCTION - MTLS
- url: https://api-mock.payments.jpmorgan.com/embedded/v1
description: MOCK
- url: https://api-sandbox.payments.jpmorgan.com/embedded/v1
description: CLIENT TESTING - MTLS
tags:
- name: Recipients
description: Set up and manage who can be paid through transactions.
paths:
/recipients:
get:
summary: List recipients
description: Returns a list of all recipients for a given client profile.
operationId: getAllRecipients
tags:
- Recipients
parameters:
- $ref: '#/components/parameters/token'
- $ref: '#/components/parameters/clientIdInQuery'
- name: type
in: query
description: Recipient type to return
required: false
example: RECIPIENT
schema:
$ref: '#/components/schemas/RecipientType'
- name: status
description: Recipient statuses to filter results by
in: query
required: false
example:
- ACTIVE
schema:
type: array
items:
$ref: '#/components/schemas/RecipientStatus'
minItems: 0
uniqueItems: true
- $ref: '#/components/parameters/pageSize'
- $ref: '#/components/parameters/pageNo'
responses:
'200':
description: Ok.
content:
application/json:
schema:
$ref: '#/components/schemas/ListRecipientsResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
'503':
$ref: '#/components/responses/503'
post:
summary: Create recipient
description: Creates a new recipient.
operationId: createRecipient
tags:
- Recipients
parameters:
- $ref: '#/components/parameters/token'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RecipientRequest'
examples:
Create a recipient using RTP into a checking account:
summary: Create Recipient - Sole Prop
description: Create Recipient - Sole Prop
value:
clientId: '1000010400'
partyId: '2000000111'
account:
number: '182119492'
type: CHECKING
countryCode: US
routingInformation:
- routingNumber: '541798298'
transactionType: RTP
routingCodeType: USABA
type: LINKED_ACCOUNT
Create a recipient using pay-by-email:
summary: Create Recipient - Payment Intent
description: Create Recipient - Payment Intent
value:
partyDetails:
firstName: Monica
lastName: Gellar
type: INDIVIDUAL
contacts:
- contactType: EMAIL
value: monica@cpgetaways.com
type: RECIPIENT
responses:
'201':
description: The recipient was created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/Recipient'
examples:
CreateRecipientRes:
$ref: '#/components/examples/CreateRecipientRes'
CreatePaymentIntentRecipientRes:
$ref: '#/components/examples/CreatePaymentIntentRecipientRes'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
'503':
$ref: '#/components/responses/503'
/recipients/{id}:
get:
summary: Get recipient
description: Returns information about a specific recipient.
operationId: getRecipient
tags:
- Recipients
parameters:
- $ref: '#/components/parameters/token'
- name: id
in: path
description: Recipient ID. A unique identifier for a recipient.
required: true
schema:
type: string
example: 616d93a1-ce53-4c71-b03b-02a11396db28
responses:
'200':
description: Ok.
content:
application/json:
schema:
$ref: '#/components/schemas/Recipient'
examples:
GetRecipientRes:
$ref: '#/components/examples/GetRecipientRes'
GetPaymentIntentRecipientRes:
$ref: '#/components/examples/GetPaymentIntentRecipientRes'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
'503':
$ref: '#/components/responses/503'
post:
summary: Update recipient
description: Updates details of a recipient, such as adding values for attributes related to payment
types. All attributes must be provided in the same format as when creating a recipient. The value
partyDetails.type cannot be amended after creation.
operationId: amendRecipient
tags:
- Recipients
parameters:
- $ref: '#/components/parameters/token'
- name: id
in: path
description: Recipient ID. A unique identifier for a recipient.
required: true
schema:
type: string
example: 616d93a1-ce53-4c71-b03b-02a11396db28
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateRecipientRequest'
examples:
UpdateRecipientRequest_make_inactive:
summary: Update Recipient By Id - Sole Prop
description: Update Recipient By Id - Sole Prop
value:
status: INACTIVE
responses:
'200':
description: The recipient was amended successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/Recipient'
examples:
UpdateRecipientRes:
$ref: '#/components/examples/UpdateRecipientRes'
UpdatePaymentIntentRecipientRes:
$ref: '#/components/examples/UpdatePaymentIntentRecipientRes'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
'503':
$ref: '#/components/responses/503'
/recipients/{id}/verify-microdeposit:
post:
summary: Creates a microdeposits verification process.
description: Creates a microdeposits verification process.
operationId: recipientsVerification
tags:
- Recipients
parameters:
- $ref: '#/components/parameters/token'
- name: id
in: path
description: Recipient ID. A unique identifier for a recipient.
required: true
schema:
type: string
example: dea21834-f876-404b-a240-9977e598da5e
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MicrodepositAmounts'
responses:
'200':
description: Ok.
content:
application/json:
schema:
$ref: '#/components/schemas/MicrodepositVerificationResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
'503':
$ref: '#/components/responses/503'
components:
parameters:
token:
name: token
in: header
description: JWT Client token
required: false
schema:
type: string
minLength: 0
clientIdInQuery:
name: clientId
in: query
description: Unique Client identifier
required: false
example: '9000000001'
schema:
type: string
pattern: ^\d{10}$
minLength: 10
maxLength: 10
pageSize:
name: limit
in: query
description: Number of records per page.
schema:
type: integer
minimum: 1
maximum: 25
default: 25
format: int32
required: false
pageNo:
name: page
in: query
description: Page Number
schema:
type: integer
default: 0
minimum: 0
maximum: 1000000
format: int32
required: false
schemas:
RecipientType:
type: string
enum:
- RECIPIENT
- LINKED_ACCOUNT
- SETTLEMENT_ACCOUNT
nullable: false
example: RECIPIENT
RecipientStatus:
description: Callback event type needs to send to notsub for correct status.
type: string
enum:
- ACTIVE
- INACTIVE
- MICRODEPOSITS_INITIATED
- READY_FOR_VALIDATION
- REJECTED
- PENDING
nullable: false
example: ACTIVE
PageMetaData:
type: object
properties:
page:
type: integer
minimum: 0
format: int32
example: 1
description: 'Page Number.
'
limit:
type: integer
minimum: 0
format: int32
example: 30
description: 'Number of records per page.
'
total_items:
type: integer
minimum: 0
format: int32
example: 1
description: 'Total number of items.
'
CountryCode:
type: string
enum:
- US
description: Two letter country code based on ISO 3166 standard
example: US
RecipientAddress:
description: Address details for the recipient. Mandatory for payments using the RTP payment type.
type: object
required:
- addressLine1
- city
- countryCode
properties:
addressType:
type: string
example: Principal place of business
description: Type of address e.g. 'Primary Residence' | 'Principal place of business'.
addressLine1:
type: string
minLength: 1
maxLength: 34
pattern: ^(.|\s)*\S(.|\s)*$
example: 90 Bedford Street
description: First line of address; required and must not be a PO Box.
addressLine2:
type: string
minLength: 0
maxLength: 34
example: Apt 2E
description: Second line of address; not required.
addressLine3:
type: string
minLength: 0
maxLength: 34
description: Third line of address; not required.
buildingNumber:
type: string
minLength: 0
maxLength: 16
description: Building name or number if address is in a building
city:
type: string
minLength: 1
maxLength: 34
pattern: ^(.|\s)*\S(.|\s)*$
example: New York
description: Address city.
state:
type: string
maxLength: 30
example: NY
description: State code in alpha-2 format. State is mandatory for countries like United States.
postalCode:
type: string
maxLength: 10
example: '10014'
description: Postal/ZIP code.
countryCode:
$ref: '#/components/schemas/CountryCode'
PartyType:
type: string
enum:
- INDIVIDUAL
- ORGANIZATION
nullable: false
example: INDIVIDUAL
RecipientContact:
type: object
required:
- contactType
- value
properties:
contactType:
type: string
nullable: false
enum:
- EMAIL
- WEBSITE
- PHONE
description: Type of contact information being provided
example: PHONE
countryCode:
type: string
pattern: ^\+[1-9]\d{0,2}$
description: 'E.164 format compatible telephone country code
Mandatory for contactType PHONE
'
example: '+1'
value:
type: string
nullable: false
minLength: 1
maxLength: 2048
pattern: ^(.|\s)*\S(.|\s)*$
description: "Contact information corresponding to contactType: \nPHONE - E.164-compliant telephone\
\ number (excluding country code).\nEMAIL - Email address (addr-spec in Section 3.4 of RFC\
\ 5322).\nWEBSITE - URL starting with http:// or https://.\n"
example: '6316215110'
RecipientIdentity:
type: object
required:
- idType
- idValue
properties:
idType:
type: string
nullable: false
enum:
- USCC
- ORGANIZATION_ID
- NATIONAL_ID
- TAX_ID
- SSN
description: Type of identification
example: USCC
idValue:
minLength: 1
maxLength: 255
type: string
description: Identification value
example: 91310000717860841G
RecipientPartyDetails:
type: object
required:
- type
properties:
address:
$ref: '#/components/schemas/RecipientAddress'
type:
$ref: '#/components/schemas/PartyType'
firstName:
type: string
maxLength: 70
pattern: ^(.|\s)*\S(.|\s)*$
description: 'Recipient''s first name. Mandatory for recipient type INDIVIDUAL.
'
example: Monica
lastName:
type: string
maxLength: 70
pattern: ^(.|\s)*\S(.|\s)*$
description: 'Recipient''s last name. Mandatory for recipient type INDIVIDUAL.
'
example: Gellar
businessName:
type: string
maxLength: 140
pattern: ^(.|\s)*\S(.|\s)*$
description: 'Recipient company name. Mandatory for recipient type ORGANIZATION.
'
example: Central Park Getaways
alternativeName:
type: string
nullable: true
minLength: 1
maxLength: 140
pattern: ^(.|\s)*\S(.|\s)*$
description: 'Recipient optional alternative name
'
example: Central Park
contacts:
type: array
description: Contact details for the recipient.
items:
$ref: '#/components/schemas/RecipientContact'
minItems: 0
identities:
type: array
description: Identity details for the recipient.
items:
$ref: '#/components/schemas/RecipientIdentity'
minItems: 0
AccountNumber:
type: string
nullable: false
pattern: ^[A-Z0-9]{1,35}$
description: Demand Deposit Account number or International Account Number (IBAN).
example: '021000021'
AccountType:
type: string
nullable: false
enum:
- CHECKING
- IBAN
- SAVINGS
description: Type of bank account.
example: CHECKING
RoutingNumber:
type: string
nullable: false
minLength: 1
maxLength: 13
pattern: ^[A-Za-z0-9]([A-Za-z0-9\-]{0,11})[A-Za-z0-9]$
description: Routing number corresponding to the routing code type
example: '021000021'
RoutingInformationTransactionType:
type: string
nullable: false
enum:
- ACH
- RTP
- WIRE
description: Type of transaction.
example: RTP
RoutingCodeType:
type: string
nullable: false
enum:
- USABA
description: Type of routing code.
example: USABA
RoutingInformation:
type: object
required:
- routingNumber
- transactionType
- routingCodeType
properties:
routingNumber:
$ref: '#/components/schemas/RoutingNumber'
transactionType:
$ref: '#/components/schemas/RoutingInformationTransactionType'
routingCodeType:
$ref: '#/components/schemas/RoutingCodeType'
CurrencyCode:
type: string
enum:
- USD
description: Three letter currency code based on ISO 4217 standard
example: USD
RecipientAccount:
type: object
required:
- number
- countryCode
description: Bank account details of the recipient.
properties:
number:
$ref: '#/components/schemas/AccountNumber'
type:
$ref: '#/components/schemas/AccountType'
routingInformation:
type: array
description: Routing information.
items:
$ref: '#/components/schemas/RoutingInformation'
minItems: 1
maxItems: 3
currencyCode:
$ref: '#/components/schemas/CurrencyCode'
countryCode:
$ref: '#/components/schemas/CountryCode'
ApiErrorReasonV2:
type: object
description: Schema representing detailed reasons for an API error, including code, location, and
message.
required:
- message
properties:
code:
type: string
example: '11000'
description: Short code that identifies the error - publicly cataloged and documented
minLength: 0
maxLength: 5
location:
type: string
enum:
- BODY
- QUERY
- PATH
- HEADER
example: BODY
description: Part of the request which is responsible for the reason
field:
type: string
description: The location of the property or parameter in error
minLength: 0
maxLength: 512
message:
type: string
example: Client with ID 0031234567 does not exist.
description: Message describing the reason. This message can typically be displayed to your
platform's users, except in cases specified otherwise
minLength: 0
maxLength: 2048
ApiError:
type: object
required:
- title
- httpStatus
- error
properties:
title:
type: string
minLength: 1
maxLength: 512
description: Short humanly-readable title of the error
example: BAD REQUEST
httpStatus:
type: integer
minimum: 100
maximum: 599
format: int32
description: HTTP status code
example: 422
traceId:
type: string
minLength: 0
maxLength: 512
description: Internal assigned traced identifier
requestId:
type: string
minLength: 0
maxLength: 512
description: Client provided request identifier
context:
type: array
items:
$ref: '#/components/schemas/ApiErrorReasonV2'
description: Provides additional context and detail on the validation errors
minItems: 0
maxItems: 100
Result:
type: object
properties:
code:
type: integer
description: Account validation response code
example: 1002
message:
type: string
description: Account validation response message, message is based on the code
example: Open Valid
description:
type: string
description: Account validation response description, description is based on the code
example: Multiple validations to the same account is restricted
Codes:
type: object
properties:
error:
$ref: '#/components/schemas/Result'
accountScore:
$ref: '#/components/schemas/Result'
verification:
$ref: '#/components/schemas/Result'
authentication:
$ref: '#/components/schemas/Result'
verificationMicroDeposit:
$ref: '#/components/schemas/Result'
authenticationMicroDeposit:
$ref: '#/components/schemas/Result'
ClearingSystemId:
type: object
properties:
id:
type: string
description: Routing number
example: '122199983'
idType:
type: string
description: Routing code
example: ABA
FinancialInstitutionId:
type: object
properties:
clearingSystemId:
$ref: '#/components/schemas/ClearingSystemId'
ProviderResponse:
description: Contains additional, unstructured information from the provider.
type: object
additionalProperties: true
Details:
type: object
properties:
accountNumber:
type: string
description: Account number
example: XXXXXXXX052
financialInstitutionId:
$ref: '#/components/schemas/FinancialInstitutionId'
paymentCheckContributingStatus:
type: string
description: Payment Check Contributing Status
example: Participant
providerResponse:
$ref: '#/components/schemas/ProviderResponse'
Responses:
type: object
properties:
codes:
$ref: '#/components/schemas/Codes'
provider:
type: string
description: Name of the entity that provided the validation
example: EWS
details:
$ref: '#/components/schemas/Details'
AccountValidationResponse:
type: object
properties:
requestId:
type: string
description: Unique identifier for a set of related requests
example: 53281d03-dfff-4094-a6d8-b43c29b92bef
profileName:
description: Profile name to identify account validation configuration
type: string
responses:
type: array
description: Account validation responses
items:
$ref: '#/components/schemas/Responses'
minItems: 0
CardHolderName:
type: string
minLength: 1
maxLength: 30
example: M GELLAR
pattern: '^[A-Za-z]+(?: [A-Za-z]+)*$'
description: Name on the credit/debit card
ExpiryDate:
type: string
description: Expiry date of card in the format MM-YY
example: '2205'
pattern: ^(?:[0-9]{2})(0[1-9]|1[0-2])$
RecipientCard:
type: object
required:
- name
- pan
- expiryDate
properties:
name:
$ref: '#/components/schemas/CardHolderName'
pan:
type: string
minLength: 13
maxLength: 19
example: '*********0123'
pattern: ^\*{9,15}\d{4}$
description: A tokenized and masked card Primary Account Number (PAN)
expiryDate:
$ref: '#/components/schemas/ExpiryDate'
Recipient:
type: object
required:
- id
- partyDetails
properties:
id:
type: string
example: a8eb71c9-7bbb-41f2-8d9e-b0f52d1ecd71
partyDetails:
$ref: '#/components/schemas/RecipientPartyDetails'
partyId:
type: string
description: Related Party Identifier for Linked Accounts
account:
$ref: '#/components/schemas/RecipientAccount'
type:
$ref: '#/components/schemas/RecipientType'
status:
$ref: '#/components/schemas/RecipientStatus'
clientId:
type: string
description: Client identifier
example: '0030000132'
createdAt:
description: The date and time the recipient was created
type: string
format: date-time
example: 2023-02-22T15:05:46.952+0000
updatedAt:
description: The date and time the recipient was last updated
type: string
format: date-time
example: 2023-02-22T16:05:46.952+0000
error:
$ref: '#/components/schemas/ApiError'
accountValidationResponse:
type: array
description: Account validation response
items:
$ref: '#/components/schemas/AccountValidationResponse'
minItems: 0
maxItems: 10
card:
$ref: '#/components/schemas/RecipientCard'
ListRecipientsResponse:
type: object
allOf:
- $ref: '#/components/schemas/PageMetaData'
- type: object
properties:
metadata:
$ref: '#/components/schemas/PageMetaData'
recipients:
type: array
description: Recipients available in current page
items:
$ref: '#/components/schemas/Recipient'
minItems: 0
RecipientRequest:
type: object
properties:
partyDetails:
$ref: '#/components/schemas/RecipientPartyDetails'
partyId:
type: string
description: Related Party Identifier for Linked Accounts
account:
$ref: '#/components/schemas/RecipientAccount'
type:
$ref: '#/components/schemas/RecipientType'
clientId:
type: string
description: Client identifier
example: '0030000132'
card:
type: object
required:
- name
- pan
- expiryDate
properties:
name:
$ref: '#/components/schemas/CardHolderName'
pan:
type: string
minLength: 13
maxLength: 19
example: '123456789123456'
pattern: ^\d{13,19}$
description: A card Primary Account Number (PAN)
expiryDate:
$ref: '#/components/schemas/ExpiryDate'
RecipientCardUpdate:
type: object
properties:
name:
$ref: '#/components/schemas/CardHolderName'
expiryDate:
$ref: '#/components/schemas/ExpiryDate'
additionalProperties: false
UpdateRecipientRequest:
type: object
properties:
partyDetails:
$ref: '#/components/schemas/RecipientPartyDetails'
status:
$ref: '#/components/schemas/RecipientStatus'
account:
$ref: '#/components/schemas/RecipientAccount'
card:
$ref: '#/components/schemas/RecipientCardUpdate'
MicrodepositAmounts:
type: object
required:
- amounts
description: Microdeposit amount verification
properties:
amounts:
type: array
items:
type: number
example:
- 0.12
- 0.58
minItems: 0
MicrodepositVerificationResponse:
type: object
required:
- status
description: Microdeposit verification outcome
properties:
status:
type: string
enum:
- VERIFIED
- FAILED
- FAILED_MAX_ATTEMPTS_EXCEEDED
responses:
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
Error:
description: Bad Request
summary: Bad Request
value:
title: Bad Request
httpStatus: 400
error: BAD_REQUEST
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
Error:
description: Unauthorized
summary: Unauthorized
value:
title: Unauthorized Request
httpStatus: 401
error: UNAUTHORIZED
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
Error:
description: Forbidden
summary: Forbidden
value:
title: Forbidden
httpStatus: 403
error: FORBIDDEN
'404':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
Error:
description: Not Found
summary: Not Found
value:
title: Not Found
httpStatus: 404
error: NOT_FOUND
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
Error:
description: Internal Server Error
summary: Internal Server Error
value:
title: Internal Server Error
httpStatus: 500
error: INTERNAL_SERVER_ERROR
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
Error:
description: Service Unavailable
summary: Service Unavailable
value:
title: Service Unavailable
httpStatus: 503
error: SERVICE_UNAVAILABLE
examples:
CreateRecipientRes:
summary: Create Recipient - Sole Prop
description: Create Recipient - Sole Prop
value:
clientId: '1000010400'
partyId: '2000000111'
id: 616d93a1-ce53-4c71-b03b-02a11396db28
partyDetails:
address:
addressLine1: 90 Bedford Street
addressLine2: Apt 2E
city: New York
countryCode: US
state: NY
postalCode: '10014'
firstName: Monica
lastName: Gellar
type: INDIVIDUAL
contacts:
- contactType: PHONE
countryCode: '+1'
value: '6316215110'
account:
number: 0182119492
type: CHECKING
routingInformation:
- routingNumber: '541798298'
transactionType: RTP
routingCodeType: USABA
countryCode: US
type: SETTLEMENT_ACCOUNT
status: ACTIVE
createdAt: 2023-02-22T15:05:46.952+0000
accountValidationResponse:
- requestId: 81950670-d6b3-4fbb-bcce-20169d7a85d3
profileName: verificationauth
responses:
- codes:
verification:
code: 1002
message: Open valid
authentication:
code: 5002
message: Ownership Match
provider: EWS
details:
accountNumber: XXXXXXXX052
financialInstitutionId:
clearingSystemId:
id: '987654321'
id
# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/jp-morgan-chase/refs/heads/main/openapi/jp-morgan-chase-recipients-api-openapi.yml