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

# Get sender fields

> Returns the fields to collect for a POBO sender in one payout corridor, with each field's validation rules. Call it before Create sender.

Returns the fields to collect for a **POBO sender** in one payout corridor, together with each field's validation rules and options. Call it before [Create sender](https://docs.endl.io/api-reference/pobo/create-sender.md) so you collect exactly what the corridor needs.

> [!NOTE]
>
> A rail without POBO answers `poboSupported: false` with an empty `fields` list — there is no originator to describe. That is a `200`, not a `404`: the corridor is real, it just has no sender to collect for.

> [!WARNING]
>
> Pass `transferType` when both parties are known; pass `senderType` when creating a sender and the recipient does not exist yet. With `senderType`, a field is reported `REQUIRED` only if it is required under **every** transfer type still possible — the widest answer that cannot reject a payload the provider would have accepted. Read `corridor.transferTypeMatch` to see which happened.


## OpenAPI

````yaml api-reference/endl-partner-api.json GET /api/v0/sender-fields
openapi: 3.1.0
info:
  title: Endl Partner API
  version: '0'
  description: >-
    REST API for Endl partners: wallets, quotes, recipients, accounts and
    transactions.


    All endpoints are authenticated with an `API-KEY` header, are scoped to the
    partner that owns the credential, and return the standard response envelope.
servers:
  - url: https://api-sandbox.endl.io
    description: Sandbox
security:
  - apiKey: []
tags:
  - name: Wallets
    description: Create and manage user wallets.
  - name: Quotes
    description: Price a transfer before submitting it.
  - name: Recipients
    description: Manage the parties a user pays out to.
  - name: Accounts
    description: Open and inspect user accounts.
  - name: Transactions
    description: Fund, submit, and track transfers.
  - name: Reference
    description: 'Static catalogues: currencies, countries, rates, rails, codes.'
paths:
  /api/v0/sender-fields:
    get:
      tags:
        - Reference
      summary: Get sender fields
      description: >-
        Returns the fields to collect for a POBO sender in one payout corridor,
        with each field's validation rules. Call it before [Create
        sender](/api-reference/pobo/create-sender).
      parameters:
        - $ref: '#/components/parameters/ApiVersion'
        - name: currency
          in: query
          required: true
          description: Payout currency. With `payoutRail`, identifies the corridor.
          schema:
            type: string
            example: CNY
        - name: payoutRail
          in: query
          required: true
          description: Payout rail. With `currency`, identifies the corridor.
          schema:
            type: string
            example: BANK_TRANSFER
        - name: country
          in: query
          required: false
          description: >-
            ISO-3166 alpha-3 payout country. Only needed where one currency is
            paid out in several countries with different requirements — USD and
            EUR cash pickup. Derived from the currency and rail when omitted.
          schema:
            type: string
            example: CHN
        - name: transferType
          in: query
          required: false
          description: >-
            `B2B`, `B2C`, `C2C` or `C2B`. Pass this when both parties are
            already known — it gives the provider's exact field set. Wins over
            `senderType` when both are sent.
          schema:
            type: string
            enum:
              - B2B
              - B2C
              - C2C
              - C2B
        - name: senderType
          in: query
          required: false
          description: >-
            `INDIVIDUAL` or `BUSINESS` — the type of the sender you are
            collecting for. Use this at creation time, when the counterparty
            does not exist yet: the answer folds together every transfer type
            still possible, so nothing is demanded that a later counterparty
            could make unnecessary.
          schema:
            type: string
            enum:
              - INDIVIDUAL
              - BUSINESS
            example: BUSINESS
      responses:
        '200':
          description: >-
            The corridor was resolved. `fields` may legitimately be empty — for
            a sender on a rail without POBO, or a party the provider asks
            nothing about. **Unwrapped** — the body is the object below, with no
            envelope.
          content:
            application/json:
              schema:
                type: object
                properties:
                  corridor:
                    type: object
                    description: The corridor the answer was resolved for.
                    properties:
                      country:
                        type: string
                        example: CHN
                      currency:
                        type: string
                        example: CNY
                      payoutRail:
                        type: string
                        example: BANK_TRANSFER
                      transferType:
                        type: string
                        description: The transfer type the answer is for, when one applies.
                        example: B2B
                      transferTypeMatch:
                        type: string
                        description: >-
                          How the transfer type was arrived at. `EXACT` — you
                          named it. `NARROWED` — folded from every type still
                          possible for the party type you gave. `ANY` — this
                          provider's requirements do not vary by transfer type.
                        enum:
                          - EXACT
                          - NARROWED
                          - ANY
                      applicableTransferTypes:
                        type: array
                        description: >-
                          The transfer types folded together on a `NARROWED`
                          answer.
                        items:
                          type: string
                  poboSupported:
                    type: boolean
                    description: >-
                      Whether this corridor supports POBO. Only present on the
                      sender endpoint; `null` for recipients.
                  catalogVersion:
                    type: string
                    description: Version of the field catalogue the answer came from.
                  fields:
                    type: array
                    description: One entry per field, in the order you should render them.
                    items:
                      type: object
                      properties:
                        key:
                          type: string
                          example: senderIdNumber
                        requestPath:
                          type: string
                          example: providerBankId
                          description: >-
                            Where to send this value in the create request, as a
                            dotted path — for example `providerBankId`,
                            `governmentId` or `recipientAddress.city`. It is not
                            always the same as `key`: `bankId` is sent as
                            `providerBankId`. Absent when the value is not part
                            of the create request (purpose codes, which go on
                            the pre-transaction).
                        label:
                          type: string
                          example: Sender ID number
                        group:
                          type: string
                          description: Suggested grouping for the field on a form.
                        type:
                          type: string
                          description: Input type — text, date, picklist, and so on.
                        requirement:
                          type: string
                          description: >-
                            `REQUIRED` or `OPTIONAL`. On a `NARROWED` answer a
                            field is `REQUIRED` only if it is required under
                            every transfer type still possible, so this never
                            demands more than the provider will.
                        requiredWithout:
                          type: string
                          description: >-
                            Another field key that satisfies this one if
                            supplied instead.
                        minLength:
                          type: integer
                        maxLength:
                          type: integer
                        pattern:
                          type: string
                          description: >-
                            Regex the value must match. Date fields
                            (`dateOfBirth`, `governmentIdIssueDate`,
                            `governmentIdExpiryDate`, `incorporationDate`) use
                            `DD-MM-YYYY`.
                        fixedValue:
                          type: string
                          description: >-
                            The only value this corridor accepts, when there is
                            one.
                        options:
                          type: array
                          description: Allowed values for a picklist.
                          items:
                            type: object
                            properties:
                              code:
                                type: string
                              label:
                                type: string
                        optionCount:
                          type: integer
                        optionsEndpoint:
                          type: string
                          description: >-
                            Where to fetch the options when the list is too
                            large to inline.
        '400':
          description: >-
            `currency` or `payoutRail` missing, or an unsupported value for
            `payoutRail`, `transferType` or the party type. Code `ERRCORE_1001`,
            with the offending parameter in `field` — these are plain
            parameters, not reference ids, so they do not return an `ERRREF_`
            code.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Missing or invalid API credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                data: null
                code: 401
                message: Authentication Failed!
                status: Error
                errors:
                  - code: '401'
                    message: Authentication Failed!
                    field: Authentication Failed!
        '403':
          description: >-
            A valid key that lacks the permission this endpoint requires. Raised
            at the edge.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                data: null
                code: 403
                message: API key does not have the required permission
                status: Error
                errors:
                  - code: '403'
                    message: API key does not have the required permission
                    field: API key does not have the required permission
        '404':
          description: >-
            No payout corridor exists for that country, currency and rail
            combination. Code `ERRCORE_1002` — a corridor is not addressed by a
            reference id, so this is not `ERRREF_1001`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: The request conflicts with the current state of the resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                code: 409
                message: The request conflicts with the current state of the resource
                status: ERROR
                data: null
                errors:
                  - code: CONFLICT
                    message: >-
                      The request conflicts with the current state of the
                      resource
                    field: null
        '429':
          description: >-
            The per-API-key request rate limit was exceeded. Carries
            `X-RateLimit-Limit` and `X-RateLimit-Remaining`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                data: null
                code: 429
                message: Rate limit exceeded, please retry later
                status: Error
                errors:
                  - code: '429'
                    message: Rate limit exceeded, please retry later
                    field: Rate limit exceeded, please retry later
        '500':
          description: Unexpected server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                code: 500
                message: Unexpected error
                status: ERROR
                data: null
                errors:
                  - code: INTERNAL_ERROR
                    message: Unexpected error
                    field: null
        '502':
          description: >-
            Endl could not reach the service behind the edge. Retry with
            backoff.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                data: null
                code: 502
                message: Upstream service error
                status: Error
                errors: null
        '503':
          description: Credentials could not be verified right now. Retry with backoff.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                code: 503
                message: Credentials could not be verified right now
                status: ERROR
                data: null
                errors:
                  - code: DIRECTORY_UNAVAILABLE
                    message: Credentials could not be verified right now
                    field: null
components:
  parameters:
    ApiVersion:
      name: Api-Version
      in: header
      required: true
      description: >-
        The API version this request targets. Required on every `/api/v0/*`
        call. Format `YYYY-MM.<release>`; `2026-09.1` is the latest. The version
        that served the request is echoed back on the response. Missing,
        malformed or unsupported values are rejected with `400`.
      schema:
        type: string
        pattern: ^\d{4}-\d{2}\.\d+$
        default: 2026-09.1
      example: 2026-09.1
  schemas:
    ErrorResponse:
      type: object
      properties:
        code:
          type: integer
          example: 400
          description: The HTTP status, repeated in the body.
        message:
          type: string
          example: Validation failed
          description: A human-readable summary of the failure.
        status:
          type: string
          example: ERROR
          description: '`ERROR` on failure; `SUCCESS` on the equivalent success envelope.'
        data:
          type:
            - object
            - 'null'
          example: null
          description: '`null` on failure — no payload is returned when a request fails.'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/FieldError'
          description: >-
            One entry per field that failed validation. Empty for failures that
            are not field-level.
    FieldError:
      type: object
      properties:
        code:
          type: string
          example: ERRACC_1009
          description: >-
            Stable machine-readable error code, `ERR<MODULE>_<nnnn>`. Match on
            this, never on `message`. See the [error
            catalogue](/api-reference/error-codes).
        message:
          type: string
          example: must not be blank
          description: What is wrong with this specific field.
        field:
          type: string
          example: sourceAmount
          description: >-
            Which request field the problem refers to, or `null` when the error
            is not about a specific input.
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: API-KEY
      description: Your partner API key.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.