Felix Integrations API (2.0.0)

Download OpenAPI specification:Download

Introduction

Welcome to Félix's Remittance Requests Management System. Our platform is designed to streamline and simplify managing remittance requests, ensuring efficient and secure transfers for both senders and recipients.

Our Solution

The Félix API offers a comprehensive solution to manage remittance requests effectively. Our platform empowers you to:

  • Create Remittance Requests: Easily initiate remittance requests on behalf of the intended receivers.
  • Monitor Remittance Requests: Keep track of the status and progress of remittance requests in real-time from its creation up to its ramp-off in the receiving country.

Key Features

  • Security: Ensure the security and privacy of financial data with robust encryption.
  • Compliance: Stay compliant with international regulations and anti-money laundering (AML) requirements.
  • Scalability: Adapt to changing business needs and scale your remittance operations easily.
  • Integration: Seamlessly integrate our platform with your existing systems through our API.

Transaction Status Flow

The status of a remittance request changes as it progresses through the system. The status flow is as follows:

  • CREATED: The remittance request is created and waiting for sender start the process.
  • STARTED: The sender has initiated the remittance process.
  • CONFIRMED: The remittance was paid and confirmed by the sender.
  • IN_PROGRESS: The remittance request is in progress.
  • COMPLETED: The remittance request has been successfully completed.
  • FAILED: The remittance request has failed, this can change if an operator manually resolves the issue.
  • CANCELLED: The remittance request has been cancelled.
  • REFUNDED: The remittance request has been refunded.
Remittance Request Status Flow

Callback (Update Notifications)

This callback notification system is designed to optimize efficiency and reliability in the communication of transaction status updates. A key part of this strategy involves the use of "Notification Deltas," which are compact representations of changes in transaction status that have not yet been successfully communicated to the intended recipient.

Advantages of our structured approach include:

  • Reduced Network Load: By aggregating changes into deltas, we significantly decrease the number of requests made across the network.
  • Intelligent Retry Mechanism: We employ an exponential backoff policy for notification retries in case of failure. The waiting time starts at 60 second and doubles with each subsequent retry, max 10 retries.
  • Focused Data Persistence: We currently cache only the deltas of unsent notifications, which significantly reduces the demand on our database resources.
  • Streamlined Notification Process: Packaging failed notifications into deltas allows for efficient reconciliation and re-notification.
  • Operational Flexibility: Our architecture provides the flexibility to adapt our notification strategy as our needs evolve. We have introduced new entities such as TransactionResponse, NotificationDelta, Notification, and NotificationsContainer to support this enhanced system. Examples of the payload we send to your callback illustrate both the "happy path" and more complex paths involving multiple transactions and notifications with multiple deltas.

Note: To further enhance flexibility and efficiency in handling transaction updates, we have designed our system with optional callback functionality. Clients have the opportunity to proactively query transactions with specific statuses, allowing them to retrieve the most up-to-date information.

To ensure seamless integration and maintain consistency, we strongly recommend that clients use the field names as defined in our documentation. This practice is designed to standardize data handling and allow for greater flexibility on the part of our clients.

 TransactionResponse:
      type: object
      properties:
        id:
          type: string
        amount:
          type: number
          format: decimal
          default: 0.0
        currency:
          type: number
        status:
          type: string
        external_transaction_id:
          type: string
        provider_id:
          type: string
        account_identifier_type:
          $ref: '#/ProviderAccountIdentifierType'
        bank_code:
          type: string
          nullable: true
        account_identifier_number:
          type: string
        account_type:
          $ref: '#/ProviderAccountType'
          nullable: true
        beneficiary_identifier:
          type: string
          nullable: true
        beneficiary_identifier_type:
          type: string
          nullable: true
        sender_id:
          type: string
          nullable: true
        name:
          type: string
        middle_name:
          type: string
          nullable: true
        lastname:
          type: string
        second_lastname:
          type: string
          nullable: true
        country:
          type: string
        city:
          type: string
          nullable: true
        state:
          type: string
          nullable: true
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
          nullable: true
        metafields:
          type: object
          additionalProperties: true
          nullable: true
        url:
          type: string
          format: uri

    NotificationDelta:
      type: object
      properties:
        old_status:
          $ref: '#/TransactionStatusEnum'
        new_status:
          $ref: '#/TransactionStatusEnum'
        updated_at:
          type: string
          format: date-time
          nullable: true

    Notification:
      type: object
      properties:
        transaction:
          $ref: '#/TransactionResponse'
        deltas:
          type: array
          items:
            $ref: '#/NotificationDelta'

    NotificationsContainer:
      type: object
      properties:
        provider_id:
          type: string
        callback_url:
          type: string
        notifications:
          type: array
          items:
            $ref: '#/Notification'

If you have a callback registered, we will send you a POST request with a JSON payload with NotificationContainer as the body. The payload will contain the provider_id, callback_url, and notifications array. The notifications array will contain the transaction object and an array of deltas.

Each notification is associated with a just one transaction, and each notification can have multiple deltas.

Example of payload simple path (just one transaction and one notification with two deltas):

{
    "provider_id": "123456",
    "callback_url": "https://your-callback-url.com",
    "notifications": [
        {
            "transaction": {
                "id": "123456",
                "provider_id": "123456",
                "sender_id": "123456",
                "name": "John",
                "middle_name": "Doe",
                "lastname": "Smith",
                "second_lastname": "Johnson",
                "city": "New York",
                "state": "NY",
                "amount": 100.0,
                "currency": "USD",
                "status": "COMPLETED",
                "created_at": "2021-10-01T12:00:00Z",
                "updated_at": "2021-10-01T12:00:00Z",
                "metafields": {
                    "key1": "value1",
                    "key2": "value2"
                }
            },
            "deltas": [
                {
                    "old_status": "CONFIRMED",
                    "new_status": "IN_PROCESS",
                    "updated_at": "2021-10-01T12:00:00Z"
                },
                {
                    "old_status": "IN_PROCESS",
                    "new_status": "COMPLETED",
                    "updated_at": "2021-10-01T12:00:00Z"
                }
            ]
        }
    ]
}

Example of payload complex path (multiple transactions and notifications with multiple deltas):

{
    "provider_id": "5678",
    "callback_url": "https://example.com/callback",
    "notifications": [
        {
            "transaction": {
                "id": "123456",
                "provider_id": "123456",
                "sender_id": "123456",
                "name": "John",
                "middle_name": "Doe",
                "lastname": "Smith",
                "second_lastname": "Johnson",
                "city": "New York",
                "state": "NY",
                "amount": 100.0,
                "currency": "USD",
                "status": "COMPLETED",
                "created_at": "2021-10-01T12:00:00Z",
                "updated_at": "2021-10-01T12:00:00Z",
                "metafields": {
                    "key1": "value1",
                    "key2": "value2"
                }
            },
            "deltas": [
                {
                    "old_status": "CONFIRMED",
                    "new_status": "IN_PROGRESS",
                    "updated_at": "2024-01-02T00:05:00"
                }
            ]
        },
        {
            "transaction": {
                "id": "654321",
                "provider_id": "123456",
                "sender_id": "123456",
                "name": "John",
                "middle_name": "Doe",
                "lastname": "Smith",
                "second_lastname": "Johnson",
                "city": "New York",
                "state": "NY",
                "amount": 100.0,
                "currency": "MXN",
                "status": "COMPLETED",
                "created_at": "2021-10-01T12:00:00Z",
                "updated_at": "2021-10-01T12:00:00Z",
                "metafields": {
                    "key1": "value1",
                    "key2": "value2"
                }
            },
            "deltas": [
                {
                    "old_status": "IN_PROGRESS",
                    "new_status": "FAILED",
                    "updated_at": "2024-01-02T00:07:00"
                }
            ]
        },
        {
            "transaction": {
                "id": "abcdefgh",
                "provider_id": "123456",
                "sender_id": "123456",
                "name": "John",
                "middle_name": "Doe",
                "lastname": "Smith",
                "second_lastname": "Johnson",
                "city": "New York",
                "state": "NY",
                "amount": 100.0,
                "currency": "MXN",
                "status": "COMPLETED",
                "created_at": "2021-10-01T12:00:00Z",
                "updated_at": "2021-10-01T12:00:00Z",
                "metafields": {
                    "key1": "value1",
                    "key2": "value2"
                }
            },
            "deltas": [
                {
                    "old_status": "CREATED",
                    "new_status": "STARTED",
                    "updated_at": "2024-01-02T00:09:00"
                },
                {
                    "old_status": "STARTED",
                    "new_status": "IN_PROGRESS",
                    "updated_at": "2024-01-02T00:10:00"
                }
            ]
        }
    ]
}

FAQ

Can I initiate a transaction without specifying an amount?

Absolutely! If you initiate a transaction without providing an amount or if the amount is set to zero, we will prompt the sender to specify the amount at the beginning of the process.

Getting Started

To get started, you will need to create an account with Félix. Once you have an account, you will be able to get an jwt token to access our API.

Provider

Get Provider Me

Responses
200

Successful Response

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

422

Unprocessable Entity

500

Internal Server Error

get/api/v1/providers/me
Request samples
Response samples
application/json
{
  • "id": "string",
  • "name": "string",
  • "email": "user@example.com",
  • "callback_url": "http://example.com",
  • "headers": {
    }
}

Register Provider Callback

Request
Request Body schema: application/json
required
url
required
string <uri> (Url) [ 1 .. 2083 ] characters
Headers (object) or Headers (null) (Headers)
Responses
200

Successful Response

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

422

Unprocessable Entity

500

Internal Server Error

post/api/v1/providers/callback
Request samples
application/json
{}
Response samples
application/json
null

Transactions

Get Transaction

Request
path Parameters
transaction_id
required
string (Transaction Id)
header Parameters
X-Felix-API-Version
string (API Version)
Default: v2

API version to use. Determines the response format.

Enum: "v1" "v2"
Responses
200

Successful response

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

422

Unprocessable Entity

500

Internal Server Error

get/api/v1/transactions/{transaction_id}
Request samples
Response samples
application/json
{
  • "id": "tx_12345abcde",
  • "provider_id": "provider_987654",
  • "sender_id": "sender_54321",
  • "name": "Juan",
  • "middle_name": "Carlos",
  • "lastname": "Gonzalez",
  • "second_lastname": "Rodriguez",
  • "city": "Mexico City",
  • "state": "CDMX",
  • "clabe": 32180000118359720,
  • "amount": 1500.75,
  • "currency": "MXN",
  • "status": "COMPLETED",
  • "created_at": "2023-11-15T14:30:45Z",
  • "updated_at": "2023-11-15T14:35:22Z",
  • "metafields": { },
}

Create a new transaction

Creates a new transaction with the provided details. Supports both V1 and V2 request formats.

Request
header Parameters
X-Felix-API-Version
string (API Version)
Default: v2

API version to use. Determines the response format.

Enum: "v1" "v2"
Request Body schema: application/json
One of:

V2 Create Transaction Request

This model represents the request body for creating a new transaction using the V2 API.

required
Amount (number) or Amount (string) (Amount)

The amount to be transferred. Must be greater than 0.

currency
required
string (Currency) = 3 characters

The currency code for the transaction (e.g., MXN, USD)

Enum: "COP" "GTQ" "HNL" "MXN" "USD"
beneficiary_name
required
string (Beneficiary Name)

First name of the beneficiary

Beneficiary Middle Name (string) or Beneficiary Middle Name (null) (Beneficiary Middle Name)

Middle name of the beneficiary

beneficiary_lastname
required
string (Beneficiary Lastname)

Last name of the beneficiary

Beneficiary Second Lastname (string) or Beneficiary Second Lastname (null) (Beneficiary Second Lastname)

Second last name of the beneficiary

country
required
string (Country) ^\w{2}$

Two-letter country code (ISO 3166-1 alpha-2)

City (string) or City (null) (City)

City of residence of the beneficiary

State (string) or State (null) (State)

State/Province of residence of the beneficiary

external_transaction_id
required
string (External Transaction Id)

Unique identifier for the transaction provided by the client

account_identifier_type
required
string (ProviderAccountIdentifierType)

Type of account identifier (e.g., CLABE, bank_account)

Enum: "bank_account" "digital_wallet" "card_number" "clabe"
Bank Code (string) or Bank Code (null) (Bank Code)

Bank code for bank accounts or digital wallets

account_identifier_number
required
string (Account Identifier Number)

Account number or identifier (e.g., CLABE number)

ProviderAccountType (string) or null

Type of bank account (C for Checking, S for Savings)

Beneficiary Identifier (string) or Beneficiary Identifier (null) (Beneficiary Identifier)

Additional identifier for the beneficiary (e.g., RFC)

Beneficiary Identifier Type (string) or Beneficiary Identifier Type (null) (Beneficiary Identifier Type)

Type of beneficiary identifier

Responses
201

Successful response

400

Invalid request data

401

Unauthorized

403

Forbidden

404

Not Found

422

Unprocessable Entity

500

Internal Server Error

post/api/v1/transactions
Request samples
application/json
{
  • "amount": 2500.5,
  • "currency": "MXN",
  • "external_transaction_id": "ext_tx_123456789",
  • "account_identifier_type": "CLABE",
  • "bank_code": "032",
  • "account_identifier_number": 32180000118359720,
  • "account_type": "C",
  • "beneficiary_identifier": "RFC123456ABC",
  • "beneficiary_identifier_type": "RFC",
  • "beneficiary_name": "Maria",
  • "beneficiary_middle_name": "Elena",
  • "beneficiary_lastname": "Martinez",
  • "beneficiary_second_lastname": "Lopez",
  • "country": "MX",
  • "city": "Guadalajara",
  • "state": "Jalisco"
}
Response samples
application/json
{
  • "id": "tx_12345abcde",
  • "provider_id": "provider_987654",
  • "sender_id": "sender_54321",
  • "name": "Juan",
  • "middle_name": "Carlos",
  • "lastname": "Gonzalez",
  • "second_lastname": "Rodriguez",
  • "city": "Mexico City",
  • "state": "CDMX",
  • "clabe": 32180000118359720,
  • "amount": 1500.75,
  • "currency": "MXN",
  • "status": "COMPLETED",
  • "created_at": "2023-11-15T14:30:45Z",
  • "updated_at": "2023-11-15T14:35:22Z",
  • "metafields": { },
}

Search Transactions

Request
header Parameters
X-Felix-API-Version
string (API Version)
Default: v2

API version to use. Determines the response format.

Enum: "v1" "v2"
Request Body schema: application/json
required
SearchTransactionFilters (object) or null
limit
integer (Limit) [ 1 .. 100 ]
Default: 10
offset
integer (Offset) >= 0
Default: 0
Order By (string) or Order By (null) (Order By)
Default: "created_at"
Responses
200

Successful response

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

422

Unprocessable Entity

500

Internal Server Error

post/api/v1/transactions/search
Request samples
application/json
{
  • "filters": {
    },
  • "limit": 10,
  • "offset": 0,
  • "order_by": "created_at"
}
Response samples
application/json
[
  • {
    }
]

Auth

Sign Up

Request
Request Body schema: application/json
required
email
required
string <email> (Email)
password
required
string (Password) >= 8 characters
name
required
string (Name)
Responses
201

Successful Response

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

422

Unprocessable Entity

500

Internal Server Error

post/api/v1/signup
Request samples
application/json
{
  • "email": "user@example.com",
  • "password": "stringst",
  • "name": "string"
}
Response samples
application/json
{
  • "id_token": "string",
  • "refresh_token": "string",
  • "expires_in": 0,
  • "id": "string",
  • "email": "user@example.com"
}

Sign In

Request
Request Body schema: application/json
required
email
required
string (Email)
password
required
string (Password)
Responses
200

Successful Response

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

422

Unprocessable Entity

500

Internal Server Error

post/api/v1/signin
Request samples
application/json
{
  • "email": "string",
  • "password": "string"
}
Response samples
application/json
{
  • "id_token": "string",
  • "refresh_token": "string",
  • "expires_in": 0,
  • "id": "string",
  • "email": "user@example.com"
}

Notification

Send Notification

Request
Request Body schema: application/json
required
required
object (Transaction)
required
Array of objects (Deltas)
Responses
200

Successful Response

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

422

Unprocessable Entity

500

Internal Server Error

post/api/v1/notification
Request samples
application/json
{
  • "transaction": {
    },
  • "deltas": [
    ]
}
Response samples
application/json
{
  • "status": "QUEUED",
  • "message": "string"
}

Retry Send Notifications

Request
path Parameters
provider_id
required
string (Provider Id)
Responses
200

Successful Response

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

422

Unprocessable Entity

500

Internal Server Error

post/api/v1/notification/{provider_id}/retry
Request samples
Response samples
application/json
{
  • "status": "QUEUED",
  • "message": "string"
}