> ## Documentation Index
> Fetch the complete documentation index at: https://www.marqeta.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Post Application

> Submits a new financial-service account application to Marqeta

Use the Applications API to start onboarding a cardholder into your White Label App (WLA) program. It's the only step in WLA onboarding that requires a call from you — once Marqeta approves an application, account and card setup happen automatically, with no additional requests on your end.

<h2 id="_submit_an_application">
  Submit an application
</h2>

Send a POST request to `/applications` with the applicant's identity details to submit a new application. Authenticate with your API key credential over HTTP Basic auth; this endpoint requires WRITE authority.

Marqeta screens the applicant against sanctions and politically exposed persons (PEP) lists for their region, then returns a `kyc_url` once the application reaches `KYC` status. Redirect the applicant to that URL to complete Know Your Customer (KYC) or Know Your Business (KYB) verification through a hosted webview that walks them through ID capture and a selfie.

The `user` object is required and must include `id`, `name`, `email`, and `phone_number`. You can optionally include `national_id`, `address`, `shipping_address`, `tax_profile`, `financial_profile`, `terms`, and `device` to reduce how much information the applicant has to provide during KYC.

<Note>
  The response includes `kyc_url` only if `status` is `KYC`.
</Note>

To retrieve a user's existing applications, see [Get Applications](/docs/core-api/white-label-app-get-applications/).

<h2 id="_application_lifecycle">
  Application lifecycle
</h2>

An application only moves forward through its lifecycle, never backward, with status changes only occurring from a perivous state to a subsequent state in the list.

For example, an application can transition from `SUBMITTED` to `KYC` or `APPROVED`. Once a state is reached, it cannot move back to a previous state.

| Status         | Description                                                    | Final State |
| -------------- | -------------------------------------------------------------- | ----------- |
| SUBMITTED      | Submitted and received by the banking partner.                 | No          |
| KYC            | Know Your Customer (KYC) verification is in progress.          | No          |
| MANUAL\_REVIEW | Under manual review by the banking partner's team.             | No          |
| APPROVED       | Approved. Marqeta can now create an account for the applicant. | Yes         |
| REJECTED       | Rejected. Marqeta creates no account.                          | Yes         |
| EXPIRED        | Expired. Marqeta creates no account.                           | Yes         |

Subscribe to the outbound application events below to track each status change instead of polling `/applications`.

<h2 id="_outbound_application_events">
  Outbound application events
</h2>

Marqeta sends application status-change events to your configured webhook endpoint. Every event payload includes `application_id` and `user_id`. The payload also includes `kyc_url` if the event type is `APPLICATION_KYC`. Some events are optional, which means that the you can opt to not send these.

| Event type                  | Delivery | Notes                   |
| --------------------------- | -------- | ----------------------- |
| APPLICATION\_SUBMITTED      | Optional | —                       |
| APPLICATION\_KYC            | Required | Might include `kyc_url` |
| APPLICATION\_MANUAL\_REVIEW | Optional | —                       |
| APPLICATION\_APPROVED       | Required | Final status            |
| APPLICATION\_REJECTED       | Required | Final status            |
| APPLICATION\_EXPIRED        | Optional | Final status            |

<Tip>
  Configure your webhook endpoint using the same webhook resources described in [Webhooks](/docs/core-api/webhooks/), including ping and retry behavior.
</Tip>


## OpenAPI

````yaml POST /applications
openapi: 3.0.3
info:
  title: Application
  version: 0.1.0
  termsOfService: /docs/riders/terms-of-use
  description: >
    An **Application** represents a request for creating a financial service
    account.


    **Banking partners are the source of truth for Application** data, so they
    are responsible for creating, updating, and deactivating applications.

    Applications are created by banking partners by your request.


    The level of detail provided in the application submission depends on the
    market and the specific requirements of each partner.

    The required user information is collected through onboarding flows and
    submitted to the banking partner.

    Partners should emit events on Application status changes and send these
    events through webhooks.


    # Table of contents

    - [Application event](#tag/ApplicationEvent)

    - [Create application endpoint](#tag/CreateApplication)

    - [Get user applications endpoint](#tag/GetUserApplications)
servers:
  - url: /v1
    description: Local Development Server
  - url: https://nucleus.prod.mq01-prod.marqeta.io/v1
    description: Production server
  - url: https://nucleus-staging.prod.mq01-prod.marqeta.io/v1
    description: Staging server
  - url: https://nucleus-sandbox.prod.mq01-prod.marqeta.io/v1
    description: Sandbox server
  - url: https://nucleus.qa.mq01-qa.marqeta.io/v1
    description: QA server
  - url: https://nucleus.dev.us-east-1.mq01-dev.marqeta.io/v1
    description: DEV server
security: []
tags:
  - name: Application
    description: Endpoints for managing applications
  - name: ApplicationEvent
    description: Application event
paths:
  /applications:
    post:
      tags:
        - Application
      summary: Create application
      description: Submit a new financial service account application to the partner.
      operationId: createApplication
      requestBody:
        $ref: '#/components/requestBodies/CreateApplicationRequest'
      responses:
        '200':
          $ref: '#/components/responses/CreateApplicationResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          description: Unauthorized
        '500':
          description: Internal Server Error
      security:
        - zionToken: []
components:
  requestBodies:
    CreateApplicationRequest:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreateApplicationRequest'
  responses:
    CreateApplicationResponse:
      description: Successful operation
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreateApplicationResponse'
    ErrorResponse:
      description: Error response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  schemas:
    CreateApplicationRequest:
      type: object
      required:
        - user
      properties:
        user:
          $ref: '#/components/schemas/User'
        national_id:
          $ref: '#/components/schemas/NationalId'
        address:
          $ref: '#/components/schemas/Address'
        shipping_address:
          $ref: '#/components/schemas/Address'
        tax_profile:
          $ref: '#/components/schemas/TaxProfile'
        terms:
          type: array
          items:
            $ref: '#/components/schemas/Term'
        device:
          $ref: '#/components/schemas/Device'
        options:
          $ref: '#/components/schemas/CreateApplicationOptions'
        financial_profile:
          $ref: '#/components/schemas/FinancialProfile'
    CreateApplicationResponse:
      type: object
      required:
        - id
      properties:
        id:
          type: string
          description: Partner-generated application ID.
          example: 16c4fb2d-3321-46b3-acf6-567ceba2d3fc
        status:
          $ref: '#/components/schemas/ApplicationStatus'
        kyc_url:
          type: string
          description: >-
            The webview URL for starting the KYC flow with the user. This must
            be present if the `status` value is `KYC`.
          example: >-
            https://bank-partner/kyc_webview?user_id=8E13_EWEF5a9GuatLqwm5eD6kQRFloKKxIkHM14YiIbkrxpfSNft8_-AyiMUmZHkd-zp7qrhiJITsCBlOeJ4db0NOfG5kas5QDcVR1cxU36EGwaxcgB0Qk4xgj-ViS-TMw==
    ErrorResponse:
      type: object
      required:
        - reason
      properties:
        reason:
          $ref: '#/components/schemas/Reason'
        extras:
          type: object
          description: >-
            Map of additional information that can be returned for investigation
            purposes.
          additionalProperties:
            type: string
    User:
      required:
        - id
        - first_name
        - last_name
        - email
        - phone_number
      type: object
      description: Information on the user that is applying for an account.
      properties:
        id:
          type: string
          description: >-
            Partner generated ID for the user. The partner should store this ID
            as this information should be provided in all subsequent
            partner-emitted events.
          example: >-
            8E13_EWEF5a9GuatLqwm5eD6kQRFloKKxIkHM14YiIbkrxpfSNft8_-AyiMUmZHkd-zp7qrhiJITsCBlOeJ4db0NOfG5kas5QDcVR1cxU36EGwaxcgB0Qk4xgj-ViS-TMw==
        status:
          $ref: '#/components/schemas/UserStatus'
        gender:
          $ref: '#/components/schemas/Gender'
        first_name:
          type: string
          description: User's first name.
          example: John
        middle_name:
          type: string
          description: User's middle name.
          example: Garrett
        last_name:
          type: string
          description: User's last name.
          example: Doe
        email:
          type: string
          description: >-
            The user email address. This email is bounded to the user's account
            at the partner's end.
          example: john@mail.com
        phone_number:
          type: string
          description: >-
            The user phone number. This phone is bounded to the user's account
            at the partner's end.
          example: '+14155552671'
        date_of_birth:
          type: object
          description: User informed date of birth.
          properties:
            day:
              type: integer
              description: day portion of user's date of birth.
              example: 1
            month:
              type: integer
              description: month portion of user's of birth.
              example: 1
            year:
              type: integer
              description: year portion of user's date of birth.
              example: 1980
        place_of_birth:
          type: object
          description: User informed birth place.
          properties:
            city:
              type: string
              description: city user was born in.
              example: San Francisco
            region:
              type: string
              description: region user was born in.
              example: CA
            country_iso2:
              $ref: '#/components/schemas/CountryCode'
        country_iso2:
          $ref: '#/components/schemas/CountryCode'
        role:
          $ref: '#/components/schemas/UserRole'
        loyalty_tier:
          $ref: '#/components/schemas/LoyaltyTier'
        signup_date:
          type: string
          description: The date when the user signed up for the Partner's platform.
          format: date-time
          example: '2021-09-01T12:00:00Z'
    NationalId:
      required:
        - id
        - type
        - issuer_country_iso2
      type: object
      description: Information about the user's national ID.
      properties:
        id:
          type: string
          description: >-
            The document number ID, with no formatting characters such as `.`
            and `-`. This value should not be present on `get` API calls.
          example: '419550000'
        type:
          type: string
          enum:
            - SSN
            - SIN
            - CPF
            - INE
            - CURP
            - NINO
          description: The national ID document type.
          example: SSN
        issuer_country_iso2:
          $ref: '#/components/schemas/CountryCode'
        additional_national_ids:
          type: array
          items:
            $ref: '#/components/schemas/AdditionalNationalId'
          description: >-
            Additional national IDs that the user may have. This is an optional
            field and can be used to provide more information about the user's
            national IDs.
    Address:
      required:
        - address
        - city
        - postal_code
      type: object
      description: >-
        Information about the user's address. Note that depending on the
        country, some of the address components may not be available.
      properties:
        address:
          type: string
          description: The address first line, which can be a street name.
          example: Elm Street
        address2:
          type: string
          description: >-
            The address second line, which can be other additional address
            information.
          example: Mission District
        street_number:
          type: string
          description: The street number for the address.
          example: '5678'
        unit:
          type: string
          description: The unit for the address.
          example: 2A
        neighborhood:
          type: string
          description: The neighborhood name.
          example: Dolores Heights
        city:
          type: string
          description: The city name.
          example: San Francisco
        region:
          type: string
          description: The region / state / province location of the address.
          example: CA
        country_iso2:
          $ref: '#/components/schemas/CountryCode'
        postal_code:
          type: string
          description: The address postal code.
          example: '94110'
    TaxProfile:
      type: object
      description: Information about the user's tax profile.
      properties:
        entity_type:
          type: string
          description: The entity type of the user.
          enum:
            - INDIVIDUAL
            - ORGANIZATION
        organization_name:
          type: string
          description: >-
            The name of the organization, if the user's `entity_type` is
            `ORGANIZATION`.
          example: Acme Corp.
        jurisdiction_country_iso2:
          $ref: '#/components/schemas/CountryCode'
        tin:
          type: string
          description: Tax Identification Number (TIN) for the user.
          example: NL123456789B12
        no_tin_reason:
          type: string
          description: >-
            Justification from the user for not having a TIN in cases that this
            information is required.
        citizenships:
          type: array
          items:
            $ref: '#/components/schemas/CountryCode'
          description: List of citizenships for the user.
        additional_tax_residencies:
          type: array
          items:
            $ref: '#/components/schemas/AdditionalTaxProfile'
          description: >-
            List of additional tax residencies for the user. This is an optional
            field and can be used to provide more information about the user's
            tax profile.
    Term:
      required:
        - name
        - accepted
        - accepted_on
      type: object
      properties:
        name:
          type: string
        accepted:
          type: boolean
        accepted_on:
          type: string
          format: date-time
    Device:
      required:
        - id
      type: object
      description: Information about the user device used to submit the application.
      properties:
        id:
          type: string
          description: >-
            The device ID, as generated by the partner, will be labeled
            `"unverified"` if it was not possible to provide the information.
          example: f3402095-26be-4d34-b263-ab665470295a
        model:
          type: string
          description: >-
            The device model, will be labeled `"unverified"` if it was not
            possible to provide the information.
          example: SM-A156U
        os_name:
          type: string
          description: >-
            The device operating system name, will be labeled `"unverified"` if
            it was not possible to provide the information.
          example: android
        os_version:
          type: string
          description: >-
            The device operating system version, will be labeled `"unverified"`
            if it was not possible to provide the information.
          example: '14'
    CreateApplicationOptions:
      type: object
      description: Options for application creation.
      properties:
        override_existing_account:
          type: boolean
          description: >-
            Indicates if the partner should override any existing account for
            the user.
    FinancialProfile:
      type: object
      description: Information about the user's financial profile.
      properties:
        account_purpose:
          type: string
          description: The purpose of the account for the user.
          example: Business expenses
        source_of_funds:
          type: object
          description: The source of funds for the user.
          properties:
            funds_origin:
              type: string
              description: The origin of the funds for the user.
              example: Uber and Gig-economy platforms
            primary_source:
              type: string
              description: The primary source of funds for the user.
              example: Revenue from self-employment
    ApplicationStatus:
      type: string
      description: >
        The status of the application.

        It can be used to determine the next steps in the application process.


        Status changes only occur from a previous state to a subsequent state in
        the list.

        For example, an application can transition from `SUBMITTED` to `KYC` or
        `APPROVED`.

        Once a state is reached, it cannot move back to a previous state.

        Some events are optional, which means that the partner can opt to not
        send these.


        For asynchronous flows, the initial state is `SUBMITTED`, and status
        changes are delivered to the partner via Application event webhooks.
      enum:
        - SUBMITTED
        - KYC
        - MANUAL_REVIEW
        - APPROVED
        - REJECTED
        - EXPIRED
      example: KYC
    Reason:
      type: object
      required:
        - code
      description: |
        Describes the reason why the operation was not successfully executed.
        The `reason` value should be present in all error responses and events.
      properties:
        code:
          type: string
          enum:
            - APPLICATION_ERROR
            - APPLICATION_CONFLICT
            - APPLICATION_DECLINED
            - APPLICATION_SUSPECTED_FRAUD
            - APPLICATION_CONFIRMED_FRAUD
            - APPLICATION_COMPLIANCE
            - APPLICATION_USER_REQUEST
            - APPLICATION_LOST_OR_STOLEN
            - APPLICATION_TERMS_OF_SERVICES_VIOLATION
            - CLIENT_ERROR
            - CLIENT_INVALID_ARGUMENT
            - CLIENT_INVALID_OPERATION
            - CLIENT_TOO_MANY_REQUESTS
            - SERVER_ERROR
            - SERVER_TIMEOUT
            - SERVER_NOT_IMPLEMENTED
        message:
          type: string
          description: >-
            Descriptive message that may help developers understand the issue.
            It should not be displayed to the end user directly.
    UserStatus:
      type: string
      description: The status of the user account in the platform.
      enum:
        - ACTIVATED
        - DEACTIVATED
    Gender:
      type: string
      description: User informed gender.
      enum:
        - MALE
        - FEMALE
        - NON_BINARY
        - DECLINED
        - OTHER
    CountryCode:
      type: string
      description: >-
        The country two-letters identifier, as defined in the [ISO 3166
        specification](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).
      minLength: 2
      maxLength: 2
      example: US
    UserRole:
      type: string
      description: The user role in the platform.
      enum:
        - COURIER
        - DRIVER
    LoyaltyTier:
      type: string
      description: >-
        The loyalty tier. The benefits are bounded to the tier level, so higher
        tiers usually have access to more benefits.
      enum:
        - NOT_SET
        - GREEN
        - BLUE
        - GOLD
        - PLATINUM
        - DIAMOND
    AdditionalNationalId:
      required:
        - id
        - type
        - issuer_country_iso2
      type: object
      description: Information about the user's national ID.
      properties:
        id:
          type: string
          description: >-
            The document number ID, with no formatting characters such as `.`
            and `-`. This value should not be present on `get` API calls.
          example: '419550000'
        type:
          type: string
          enum:
            - SSN
            - SIN
            - CPF
            - INE
            - CURP
            - NINO
          description: The national ID document type.
          example: SSN
        issuer_country_iso2:
          $ref: '#/components/schemas/CountryCode'
    AdditionalTaxProfile:
      type: object
      description: Information about the user's tax profile.
      properties:
        jurisdiction_country_iso2:
          $ref: '#/components/schemas/CountryCode'
        tin:
          type: string
          description: Tax Identification Number (TIN) for the user.
          example: NL123456789B12
        no_tin_reason:
          type: string
          description: >-
            Justification from the user for not having a TIN in cases that this
            information is required.
  securitySchemes:
    zionToken:
      type: http
      scheme: basic
      description: >-
        Token used to verify user identity and also authorize user to use
        service.

````