Create Payment Card for Authorized User
This endpoint issues a new payment card to an authorized sub-user (sub-profile) within a business customer's account. You can create a virtual card or request a physical card to be shipped by providing delivery details. The card is linked to the sub-user's associated financial account and can optionally be activated immediately upon creation.
Endpoint
POST /api/subProfiles/issuePaymentCard
Authentication
Bearer token required. Obtain via:
POST https://api.banking.netevia.dev/api/auth/v2
Include in header: Authorization: Bearer {token}
Token lifetime: 10 minutes. Refresh via POST /api/auth/refresh.
When to use
Use this endpoint when a business customer needs to provision a payment card for one of their authorized sub-profile users. This is appropriate when onboarding a new authorized user who requires spending capabilities, or when an existing sub-user needs an additional card. The issued card is tied to the sub-user's account and can be used for transactions immediately if activateOnCreate is set to true.
Request Body
Top-level fields (createpaymentcardrequest)
| Field | Type | Required | Description |
|---|---|---|---|
| subProfileId | integer (int32) | No | The numeric ID of the sub-profile (authorized user) to whom the card will be issued. |
| paymentCardName | string | No | A friendly display name for the card (e.g., "Travel Card"). |
| activateOnCreate | boolean | No | If true, the card is activated immediately upon creation. Defaults to inactive if omitted. |
| expirationDate | string (date-time) | No | Desired expiration date/time for the card in ISO 8601 format. Used for virtual or burner cards. |
| orderPhysicalPaymentCard | object | No | Provide this object to order a physical (plastic) card. Omit for a virtual card. See sub-fields below. |
| cardProfileSetId | string | No | Identifier for the card profile set to apply branding or spend controls to the issued card. |
orderPhysicalPaymentCard object
| Field | Type | Required | Description |
|---|---|---|---|
| deliveryDetails | object | Yes | Shipping name, company, and address for the physical card. |
| courier | object | No | Shipping method preference. If omitted, a default carrier and service level will be used. |
deliveryDetails object
| Field | Type | Required | Description |
|---|---|---|---|
| name | object | Yes | Recipient's full name for the card envelope. |
| companyName | string | Yes | Company name to print on the shipping label. |
| address | object | Yes | Full shipping address for card delivery. |
deliveryDetails.name object
| Field | Type | Required | Description |
|---|---|---|---|
| givenName | string | Yes | Recipient's first name. |
| familyName | string | Yes | Recipient's last name. |
deliveryDetails.address object
| Field | Type | Required | Description |
|---|---|---|---|
| streetAddress | string | Yes | Street number and name. Must match pattern: number followed by street name (e.g., 123 Main St). |
| extendedAddress | string | No | Apartment, suite, or unit number (e.g., Apt 4B). |
| postalCode | string | Yes | 5-digit US ZIP code (e.g., 90210). |
| region | string | Yes | 2-letter US state code (e.g., CA). |
| locality | string | Yes | City name (e.g., Los Angeles). |
| countryCodeAlpha3 | string | Yes | ISO 3166-1 alpha-3 country code (e.g., USA). Exactly 3 characters. |
courier object
| Field | Type | Required | Description |
|---|---|---|---|
| method | string (enum) | No | Shipping carrier and service level. Allowed values: USPS_GROUND, USPS_PRIORITY, USPS_EXPRESS, UPS_GROUND, UPS_SECOND_DAY, UPS_NEXT_DAY. |
Example — Issue virtual card (activate immediately)
{
"subProfileId": 4821,
"paymentCardName": "Online Purchases",
"activateOnCreate": true,
"cardProfileSetId": "cps_8f3a21bc9d"
}Example — Order physical card with shipping
{
"subProfileId": 4821,
"paymentCardName": "Corporate Card",
"activateOnCreate": false,
"orderPhysicalPaymentCard": {
"deliveryDetails": {
"name": {
"givenName": "Jane",
"familyName": "Smith"
},
"companyName": "Acme Corp",
"address": {
"streetAddress": "742 Evergreen Terrace",
"extendedAddress": "Suite 100",
"postalCode": "62704",
"region": "IL",
"locality": "Springfield",
"countryCodeAlpha3": "USA"
}
},
"courier": {
"method": "UPS_NEXT_DAY"
}
},
"cardProfileSetId": "cps_8f3a21bc9d"
}Response
200 OK
| Field | Type | Description |
|---|---|---|
| id | string | Unique identifier for the newly created payment card. |
| formFactor | string | Card form factor: PHYSICAL or VIRTUAL. |
| bin | string | Bank Identification Number (first 6 digits of card number). |
| last4 | string | Last 4 digits of the card number. |
| status | string | Current card status (e.g., ACTIVE, INACTIVE, SUSPENDED). |
| financialAccountId | string | ID of the financial account this card is linked to. |
| isMainCard | boolean | Whether this is the primary card for the sub-profile. |
| network | string | Card payment network (e.g., VISA, MASTERCARD). |
| isEmailNotify | boolean | Whether email notifications are enabled for this card. |
| isPushNotify | boolean | Whether push notifications are enabled for this card. |
| financialAccount | object | Abbreviated financial account info linked to this card (id, last4, name, type, accountStatus, routingNumber, clientName). |
| cardName | string | The friendly name assigned to this card. |
| expirationDate | string | Card expiration date. |
financialAccount object fields
| Field | Type | Description |
|---|---|---|
| id | string | Financial account unique identifier. |
| last4 | string | Last 4 digits of the account number. |
| name | string | Account display name. |
| type | string | Account type (e.g., CHECKING, SAVINGS). |
| accountStatus | string | Current status of the financial account. |
| routingNumber | string | Bank routing number for the account. |
| clientName | string | Name of the account holder. |
{
"id": "pcd_a1b2c3d4e5f6",
"formFactor": "VIRTUAL",
"bin": "411111",
"last4": "4242",
"status": "ACTIVE",
"financialAccountId": "fa_9z8y7x6w5v",
"isMainCard": false,
"network": "VISA",
"isEmailNotify": true,
"isPushNotify": false,
"financialAccount": {
"id": "fa_9z8y7x6w5v",
"last4": "XXXXXXXXXX",
"name": "Business Checking",
"type": "CHECKING",
"accountStatus": "ACTIVE",
"routingNumber": "021000021",
"clientName": "Acme Corp"
},
"cardName": "Online Purchases",
"expirationDate": "2028-06-30T23:59:59Z"
}Error Codes
| Code | When it happens |
|---|---|
| 400 | Missing required fields (e.g., deliveryDetails when ordering a physical card), invalid field format (e.g., wrong postalCode pattern, invalid countryCodeAlpha3 length), or unsupported courier.method value |
| 401 | Bearer token is missing, expired, or invalid |
| 403 | Authenticated account does not have permission to issue cards for the specified sub-profile, or sub-profile does not belong to the authenticated business customer |
| 404 | The specified subProfileId does not exist |
| 500 | Internal server error |
Common Mistakes
- Providing
orderPhysicalPaymentCardwithout the requireddeliveryDetailsobject causes a 400 validation error. - Using a 2-letter country code (e.g.,
US) instead of the required ISO 3166-1 alpha-3 code (e.g.,USA) forcountryCodeAlpha3will fail validation. - Setting
activateOnCreate: truefor a physical card does not mean the card is usable immediately — the card must still be physically received and may require a separate activation step depending on the card profile configuration. - The
regionfield must be exactly 2 characters (US state code). Passing a full state name (e.g.,California) will fail. - Omitting
subProfileIdmay result in the card not being linked to the intended authorized user; confirm the sub-profile ID before calling this endpoint. - Using an expired or soon-to-expire Bearer token (lifetime is 10 minutes) will return a 401; refresh the token via
POST /api/auth/refreshbefore calling this endpoint.
Related Endpoints
POST /api/auth/v2— Obtain a Bearer authentication tokenPOST /api/auth/refresh— Refresh an existing Bearer tokenGET /api/subProfiles— List all sub-profiles for the authenticated business customerPOST /api/subProfiles— Create a new authorized sub-profile userGET /api/subProfiles/{subProfileId}/paymentCards— List all payment cards for a specific sub-profilePUT /api/subProfiles/paymentCard/{cardId}— Update or manage an existing sub-profile payment card
Example
Issue a virtual card for an authorized user:
curl -X POST https://api.banking.netevia.dev/api/subProfiles/issuePaymentCard \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"subProfileId": 4821,
"paymentCardName": "Online Purchases",
"activateOnCreate": true,
"cardProfileSetId": "cps_8f3a21bc9d"
}'Order a physical card with next-day shipping:
curl -X POST https://api.banking.netevia.dev/api/subProfiles/issuePaymentCard \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"subProfileId": 4821,
"paymentCardName": "Corporate Card",
"activateOnCreate": false,
"orderPhysicalPaymentCard": {
"deliveryDetails": {
"name": {
"givenName": "Jane",
"familyName": "Smith"
},
"companyName": "Acme Corp",
"address": {
"streetAddress": "742 Evergreen Terrace",
"extendedAddress": "Suite 100",
"postalCode": "62704",
"region": "IL",
"locality": "Springfield",
"countryCodeAlpha3": "USA"
}
},
"courier": {
"method": "UPS_NEXT_DAY"
}
},
"cardProfileSetId": "cps_8f3a21bc9d"
}'