Create contact

Creates a contact with address and bank account. Validates ACH routing number against the Fed directory before persistence. Returns 400 VALIDATION_ERROR if the routing number is not found.

Body
required
application/json
  • bankAccount
    Type: object
    required
  • email
    Type: string Pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$Format: email
    required
  • entityType
    Type: stringenum
    required
    values
    • BUSINESS
    • INDIVIDUAL
  • firstName
    Type: string
    required
  • lastName
    Type: string
    required
  • legalAddress
    Type: object
    required
  • originatorId
    Type: string Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Format: uuid
    required
  • companyName
    Type: string | null
    min length:  
    1
    max length:  
    100
  • phoneNumber
    Type: string | null
Responses
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/v1/contacts/
curl https://staging.api.now.luqra.com/v1/contacts/ \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "bankAccount": {
    "achAccountNumber": "",
    "achRoutingNumber": "",
    "subType": "CHECKING",
    "swiftCode": null
  },
  "companyName": null,
  "email": "",
  "entityType": "BUSINESS",
  "firstName": "",
  "lastName": "",
  "legalAddress": {
    "addressLine1": "",
    "addressLine2": null,
    "city": "",
    "countryCode": "",
    "postalCode": "",
    "state": ""
  },
  "originatorId": "",
  "phoneNumber": null
}'
{
  "data": {
    "contactId": "123e4567-e89b-12d3-a456-426614174000",
    "createdAt": "2026-06-19T23:18:39.105Z"
  },
  "meta": {
    "timestamp": "2026-06-19T23:18:39.105Z"
  }
}