canonical: https://jentic.com/apis/swaggerhub.bringin-a9e/bringin-offramp

# Bringin A9e Bringin APIs

Bringin APIs Bringin APIs enable you to make Bitcoin on and off-ramp services available for your European customers. We provide a simple yet best-in-class crypto on and off-ramp solution with SEPA instant support at the best rates in the market. Use Cases 1. Offramp to bank directly This option is ideal if you want users to add a "Sell to bank" button - allowing users to offramp their Bitcoin to E. The API exposes 9 endpoints secured with apiKey, bearer authentication.

## For AI agents

Programmatically connect user to bringin or onboard new users, get user's kyc onboarding status. Covers 9 operations with apiKey, bearer authentication.

## Scope

Does not handle payments, communications, or developer tools - use for crm only.

## Capabilities

- Connect user to Bringin or onboard new users
- Get user's KYC onboarding status
- Add beneficiary bank details
- Create Offramp order
- Monitor # Bringin APIs

Bringin APIs enable you to make Bitcoin on and off-ramp services available for your European customers. We provide a simple yet best-in-class crypto on and off-ramp solution with SEPA instant support at the best rates in the market.

## Use Cases

### 1. Offramp to bank directly 

This option is ideal if you want users to add a "Sell to bank" button - allowing users to offramp their Bitcoin to Euros in their bank without any issues.

A set of APIs to create an offramp order to convert incoming Bitcoin deposits into Euros into Bringin's IBAN for users to withdraw anytime.

**For this use case, you only need to focus on the User Onboarding and Offramp sections.**

#### Key Features:
- Create an offramp order by providing IP, amount, beneficiary details. API returns a Bitcoin Address and a lightning invoice
- Once we receive Bitcoin to the provided address or invoice, we swap BTC to Euros at market rate
- You initiate a bank transfer to users bank

### 2. Offramp to Bringin (2 days integration)

Connect to the Bringin account to offer Bringin vIBAN and debit cards.

Please contact us at support@bringin.xyz for detailed documentation and integration support for this option.

## Authentication

While the APIs are available to the public to build with, we provide an `api-key` and `api-secret` for each company to make secure API calls.

### Request Headers

All API requests must be accompanied by the following headers:

| Header Parameter | Description |
|------------------|-------------|
| `api-key` | Contact us at info@bringin.xyz to obtain API key |
| `Authorization` | A signature generated using the API Secret. Contact us at info@bringin.xyz to obtain the API secret. More information is below on generating a signature |
| `Content-Type` | `application/json` |

### Environments

The sandbox and production environments mirror each other, except for the base URL and your API keys. Please contact us at info@bringin.xyz to elevate your application to production.

### Request Signature Calculation

You can calculate the value of the `Authorization` header by creating a SHA256HMAC digest of your request body, signed with your `API Secret`, in the following manner:

#### Step 1: Get current UNIX timestamp

```javascript
const time = Date.now().toString();
```

#### Step 2: Stringify request body

```javascript
const bodyString = JSON.stringify(body);
// For a GET request, please use an empty body such as:
// const bodyString = JSON.stringify({});
```

#### Step 3: Calculate MD5 digest of request body

Calculate the hex encoded MD5 digest of your request body exactly as it will be sent. For GET requests, please include an empty body `'{}'` that evaluates to an MD5 of `99914b932bd37a50b983c5e7c90ae93b`.

```javascript
const requestContentHexString = CryptoJS.MD5(bodyString).toString(CryptoJS.enc.Hex);
// For a GET request, the bodyString above for example would just be '{}' 
// and the calculated MD5 is 99914b932bd37a50b983c5e7c90ae93b
```

#### Step 4: Concatenate signature components

```javascript
const signatureRawData = time + 'POST' + '/card/create' + requestContentHexString;
```

#### Step 5: Create SHA256 HMAC digest

Use your API Secret to create a SHA256 HMAC digest in hex:

```javascript
const apiSecret = '';
const requestSignatureHexString = CryptoJS.HmacSHA256(signatureRawData, apiSecret).toString(CryptoJS.enc.Hex);
```

#### Step 6: Create authorization header

Finally, create your authorization header as follows, using the verb `'HMAC '` concatenated with the timestamp and the `requestSignatureHexString`, separated by a `:`

```javascript
const authorizationHeader = 'HMAC ' + time + ':' + requestSignatureHexString;
```

### Complete Example

```javascript
import crypto from 'crypto';

const hmac = crypto.createHmac('sha256', '');
const time = Date.now().toString();

hmac.update(time);
hmac.update('POST');
hmac.update('/ping');

const contentHash = crypto.createHash('md5');
contentHash.update(JSON.stringify({
    "dummy": 1,
    "data": 2
}));

hmac.update(contentHash.digest('hex'));

console.log(`HMAC ${time}:${hmac.digest('hex')}`);
``` operational status and events

## Use cases

### CRM Operations

Use the # Bringin APIs

Bringin APIs enable you to make Bitcoin on and off-ramp services available for your European customers. We provide a simple yet best-in-class crypto on and off-ramp solution with SEPA instant support at the best rates in the market.

## Use Cases

### 1. Offramp to bank directly 

This option is ideal if you want users to add a "Sell to bank" button - allowing users to offramp their Bitcoin to Euros in their bank without any issues.

A set of APIs to create an offramp order to convert incoming Bitcoin deposits into Euros into Bringin's IBAN for users to withdraw anytime.

**For this use case, you only need to focus on the User Onboarding and Offramp sections.**

#### Key Features:
- Create an offramp order by providing IP, amount, beneficiary details. API returns a Bitcoin Address and a lightning invoice
- Once we receive Bitcoin to the provided address or invoice, we swap BTC to Euros at market rate
- You initiate a bank transfer to users bank

### 2. Offramp to Bringin (2 days integration)

Connect to the Bringin account to offer Bringin vIBAN and debit cards.

Please contact us at support@bringin.xyz for detailed documentation and integration support for this option.

## Authentication

While the APIs are available to the public to build with, we provide an `api-key` and `api-secret` for each company to make secure API calls.

### Request Headers

All API requests must be accompanied by the following headers:

| Header Parameter | Description |
|------------------|-------------|
| `api-key` | Contact us at info@bringin.xyz to obtain API key |
| `Authorization` | A signature generated using the API Secret. Contact us at info@bringin.xyz to obtain the API secret. More information is below on generating a signature |
| `Content-Type` | `application/json` |

### Environments

The sandbox and production environments mirror each other, except for the base URL and your API keys. Please contact us at info@bringin.xyz to elevate your application to production.

### Request Signature Calculation

You can calculate the value of the `Authorization` header by creating a SHA256HMAC digest of your request body, signed with your `API Secret`, in the following manner:

#### Step 1: Get current UNIX timestamp

```javascript
const time = Date.now().toString();
```

#### Step 2: Stringify request body

```javascript
const bodyString = JSON.stringify(body);
// For a GET request, please use an empty body such as:
// const bodyString = JSON.stringify({});
```

#### Step 3: Calculate MD5 digest of request body

Calculate the hex encoded MD5 digest of your request body exactly as it will be sent. For GET requests, please include an empty body `'{}'` that evaluates to an MD5 of `99914b932bd37a50b983c5e7c90ae93b`.

```javascript
const requestContentHexString = CryptoJS.MD5(bodyString).toString(CryptoJS.enc.Hex);
// For a GET request, the bodyString above for example would just be '{}' 
// and the calculated MD5 is 99914b932bd37a50b983c5e7c90ae93b
```

#### Step 4: Concatenate signature components

```javascript
const signatureRawData = time + 'POST' + '/card/create' + requestContentHexString;
```

#### Step 5: Create SHA256 HMAC digest

Use your API Secret to create a SHA256 HMAC digest in hex:

```javascript
const apiSecret = '';
const requestSignatureHexString = CryptoJS.HmacSHA256(signatureRawData, apiSecret).toString(CryptoJS.enc.Hex);
```

#### Step 6: Create authorization header

Finally, create your authorization header as follows, using the verb `'HMAC '` concatenated with the timestamp and the `requestSignatureHexString`, separated by a `:`

```javascript
const authorizationHeader = 'HMAC ' + time + ':' + requestSignatureHexString;
```

### Complete Example

```javascript
import crypto from 'crypto';

const hmac = crypto.createHmac('sha256', '');
const time = Date.now().toString();

hmac.update(time);
hmac.update('POST');
hmac.update('/ping');

const contentHash = crypto.createHash('md5');
contentHash.update(JSON.stringify({
    "dummy": 1,
    "data": 2
}));

hmac.update(contentHash.digest('hex'));

console.log(`HMAC ${time}:${hmac.digest('hex')}`);
``` to perform crm operations programmatically. The API provides 9 endpoints covering core functionality including connect user to bringin or onboard new users, get user's kyc onboarding status, add beneficiary bank details.

Example prompt: Call POST `/api/v0/application/connect` to connect user to bringin or onboard new users

### Automated User Onboarding Management

Automate user onboarding operations by combining multiple # Bringin APIs

Bringin APIs enable you to make Bitcoin on and off-ramp services available for your European customers. We provide a simple yet best-in-class crypto on and off-ramp solution with SEPA instant support at the best rates in the market.

## Use Cases

### 1. Offramp to bank directly 

This option is ideal if you want users to add a "Sell to bank" button - allowing users to offramp their Bitcoin to Euros in their bank without any issues.

A set of APIs to create an offramp order to convert incoming Bitcoin deposits into Euros into Bringin's IBAN for users to withdraw anytime.

**For this use case, you only need to focus on the User Onboarding and Offramp sections.**

#### Key Features:
- Create an offramp order by providing IP, amount, beneficiary details. API returns a Bitcoin Address and a lightning invoice
- Once we receive Bitcoin to the provided address or invoice, we swap BTC to Euros at market rate
- You initiate a bank transfer to users bank

### 2. Offramp to Bringin (2 days integration)

Connect to the Bringin account to offer Bringin vIBAN and debit cards.

Please contact us at support@bringin.xyz for detailed documentation and integration support for this option.

## Authentication

While the APIs are available to the public to build with, we provide an `api-key` and `api-secret` for each company to make secure API calls.

### Request Headers

All API requests must be accompanied by the following headers:

| Header Parameter | Description |
|------------------|-------------|
| `api-key` | Contact us at info@bringin.xyz to obtain API key |
| `Authorization` | A signature generated using the API Secret. Contact us at info@bringin.xyz to obtain the API secret. More information is below on generating a signature |
| `Content-Type` | `application/json` |

### Environments

The sandbox and production environments mirror each other, except for the base URL and your API keys. Please contact us at info@bringin.xyz to elevate your application to production.

### Request Signature Calculation

You can calculate the value of the `Authorization` header by creating a SHA256HMAC digest of your request body, signed with your `API Secret`, in the following manner:

#### Step 1: Get current UNIX timestamp

```javascript
const time = Date.now().toString();
```

#### Step 2: Stringify request body

```javascript
const bodyString = JSON.stringify(body);
// For a GET request, please use an empty body such as:
// const bodyString = JSON.stringify({});
```

#### Step 3: Calculate MD5 digest of request body

Calculate the hex encoded MD5 digest of your request body exactly as it will be sent. For GET requests, please include an empty body `'{}'` that evaluates to an MD5 of `99914b932bd37a50b983c5e7c90ae93b`.

```javascript
const requestContentHexString = CryptoJS.MD5(bodyString).toString(CryptoJS.enc.Hex);
// For a GET request, the bodyString above for example would just be '{}' 
// and the calculated MD5 is 99914b932bd37a50b983c5e7c90ae93b
```

#### Step 4: Concatenate signature components

```javascript
const signatureRawData = time + 'POST' + '/card/create' + requestContentHexString;
```

#### Step 5: Create SHA256 HMAC digest

Use your API Secret to create a SHA256 HMAC digest in hex:

```javascript
const apiSecret = '';
const requestSignatureHexString = CryptoJS.HmacSHA256(signatureRawData, apiSecret).toString(CryptoJS.enc.Hex);
```

#### Step 6: Create authorization header

Finally, create your authorization header as follows, using the verb `'HMAC '` concatenated with the timestamp and the `requestSignatureHexString`, separated by a `:`

```javascript
const authorizationHeader = 'HMAC ' + time + ':' + requestSignatureHexString;
```

### Complete Example

```javascript
import crypto from 'crypto';

const hmac = crypto.createHmac('sha256', '');
const time = Date.now().toString();

hmac.update(time);
hmac.update('POST');
hmac.update('/ping');

const contentHash = crypto.createHash('md5');
contentHash.update(JSON.stringify({
    "dummy": 1,
    "data": 2
}));

hmac.update(contentHash.digest('hex'));

console.log(`HMAC ${time}:${hmac.digest('hex')}`);
``` endpoints. Agents can get user's kyc onboarding status and then add beneficiary bank details in a single workflow.

Example prompt: Call GET `/api/v0/user/kyc-status/{userId}` to get user's kyc onboarding status, then verify the result

### AI Agent Integration via Jentic

AI agents discover and call # Bringin APIs

Bringin APIs enable you to make Bitcoin on and off-ramp services available for your European customers. We provide a simple yet best-in-class crypto on and off-ramp solution with SEPA instant support at the best rates in the market.

## Use Cases

### 1. Offramp to bank directly 

This option is ideal if you want users to add a "Sell to bank" button - allowing users to offramp their Bitcoin to Euros in their bank without any issues.

A set of APIs to create an offramp order to convert incoming Bitcoin deposits into Euros into Bringin's IBAN for users to withdraw anytime.

**For this use case, you only need to focus on the User Onboarding and Offramp sections.**

#### Key Features:
- Create an offramp order by providing IP, amount, beneficiary details. API returns a Bitcoin Address and a lightning invoice
- Once we receive Bitcoin to the provided address or invoice, we swap BTC to Euros at market rate
- You initiate a bank transfer to users bank

### 2. Offramp to Bringin (2 days integration)

Connect to the Bringin account to offer Bringin vIBAN and debit cards.

Please contact us at support@bringin.xyz for detailed documentation and integration support for this option.

## Authentication

While the APIs are available to the public to build with, we provide an `api-key` and `api-secret` for each company to make secure API calls.

### Request Headers

All API requests must be accompanied by the following headers:

| Header Parameter | Description |
|------------------|-------------|
| `api-key` | Contact us at info@bringin.xyz to obtain API key |
| `Authorization` | A signature generated using the API Secret. Contact us at info@bringin.xyz to obtain the API secret. More information is below on generating a signature |
| `Content-Type` | `application/json` |

### Environments

The sandbox and production environments mirror each other, except for the base URL and your API keys. Please contact us at info@bringin.xyz to elevate your application to production.

### Request Signature Calculation

You can calculate the value of the `Authorization` header by creating a SHA256HMAC digest of your request body, signed with your `API Secret`, in the following manner:

#### Step 1: Get current UNIX timestamp

```javascript
const time = Date.now().toString();
```

#### Step 2: Stringify request body

```javascript
const bodyString = JSON.stringify(body);
// For a GET request, please use an empty body such as:
// const bodyString = JSON.stringify({});
```

#### Step 3: Calculate MD5 digest of request body

Calculate the hex encoded MD5 digest of your request body exactly as it will be sent. For GET requests, please include an empty body `'{}'` that evaluates to an MD5 of `99914b932bd37a50b983c5e7c90ae93b`.

```javascript
const requestContentHexString = CryptoJS.MD5(bodyString).toString(CryptoJS.enc.Hex);
// For a GET request, the bodyString above for example would just be '{}' 
// and the calculated MD5 is 99914b932bd37a50b983c5e7c90ae93b
```

#### Step 4: Concatenate signature components

```javascript
const signatureRawData = time + 'POST' + '/card/create' + requestContentHexString;
```

#### Step 5: Create SHA256 HMAC digest

Use your API Secret to create a SHA256 HMAC digest in hex:

```javascript
const apiSecret = '';
const requestSignatureHexString = CryptoJS.HmacSHA256(signatureRawData, apiSecret).toString(CryptoJS.enc.Hex);
```

#### Step 6: Create authorization header

Finally, create your authorization header as follows, using the verb `'HMAC '` concatenated with the timestamp and the `requestSignatureHexString`, separated by a `:`

```javascript
const authorizationHeader = 'HMAC ' + time + ':' + requestSignatureHexString;
```

### Complete Example

```javascript
import crypto from 'crypto';

const hmac = crypto.createHmac('sha256', '');
const time = Date.now().toString();

hmac.update(time);
hmac.update('POST');
hmac.update('/ping');

const contentHash = crypto.createHash('md5');
contentHash.update(JSON.stringify({
    "dummy": 1,
    "data": 2
}));

hmac.update(contentHash.digest('hex'));

console.log(`HMAC ${time}:${hmac.digest('hex')}`);
``` endpoints through Jentic without managing credentials directly. An agent searches for the required operation by intent, receives the matching endpoint schema, and executes the call with Jentic-managed authentication. This eliminates the need to read API documentation or handle apiKey, bearer tokens manually.

Example prompt: Search Jentic for 'connect user to bringin or onboard new users', load the operation schema, and execute with Jentic-managed credentials

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/api/v0/application/connect` | Connect user to Bringin or onboard new users |
| GET | `/api/v0/user/kyc-status/{userId}` | Get user's KYC onboarding status |
| POST | `/api/v0/user/beneficiary` | Add beneficiary bank details |
| GET | `/api/v0/user/beneficiary/{userId}` | Get all beneficiaries |
| POST | `/api/v0/offramp/rates` | Get offramp exchange rates |
| POST | `/api/v0/offramp/` | Create Offramp order |
| POST | `/api/v0/offramp/order/get-details` | Get offramp order status |
| POST | `/api/v0/offramp/transfer/initiate` | Initiate bank transfer |

## Key resources

- **User Onboarding** — APIs for user onboarding and connection management
- **Bank Beneficiaries** — APIs for managing bank beneficiary details
- **Offramp** — APIs for Bitcoin to bank offramp operations

## Why Jentic

- **Setup:** Wiring the Bringin offramp API by hand means learning its HMAC api-key signature plus JWT bearer auth, choosing among the API and sandbox bringin.xyz hosts, and handling retries yourself. Through Jentic you install once, import the Bringin offramp API from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** The API puts the user id in the URL path (`/api/v0/user/kyc-status/{userId}`, `/api/v0/user/beneficiary/{userId}`), so a rule can pin your agent to one user's KYC and beneficiary reads. You choose the operations it may call, so initiating a transfer with POST `/api/v0/offramp/transfer/initiate` is not included unless you add it.
- **Credential handling:** Your Bringin API key and token are stored once, encrypted, by your own Jentic One instance and injected at execution time. They never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'get offramp rates' or 'add a beneficiary', and Jentic returns the matching Bringin offramp operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Hubspot** — Alternative crm API
- **Salesforce** — Alternative crm API
- **Pipedrive** — Complementary crm API
- **Zoho** — Complementary crm API

## FAQ

### What authentication does the Bringin APIs use?

The Bringin APIs uses apiKey, bearer authentication. Through Jentic, these credentials are stored encrypted in your Jentic One instance and injected at execution time, so raw secrets never enter the agent context.

### Can I connect user to bringin or onboard new users with the Bringin APIs?

Yes. Use the POST `/api/v0/application/connect` endpoint. The API returns structured JSON responses that agents can parse and act on directly.

### What are the rate limits for the Bringin APIs?

Rate limits are not specified in the OpenAPI spec. Check the vendor documentation for current limits. Through Jentic, rate limiting is handled automatically with retry logic built into the execution layer.

### How do I integrate Bringin APIs through Jentic?

Install the Jentic SDK with pip install jentic, authenticate through Jentic One, the self-hosted execution layer, then search for the operation you need. Jentic returns the matching Bringin APIs operation with its input schema. Load the schema and execute the call - credentials are injected automatically.

### How many endpoints does the Bringin APIs have?

The Bringin APIs exposes 9 endpoints covering user onboarding, bank beneficiaries, offramp operations.

### Can I limit what my agent is allowed to do with the Bringin APIs?

Yes. Because you run Jentic One yourself, your own rules decide which Bringin operations and credentials the agent may use. Since the API carries the user id in the URL path, such as `/api/v0/user/kyc-status/{userId}` and `/api/v0/user/beneficiary/{userId}`, you can pin the agent to one user's KYC and beneficiary reads. Write actions like POST `/api/v0/offramp/transfer/initiate` are only available if you explicitly add them, so an agent cannot move funds unless you allow it.
