# Currency amounts Source: https://docs.hyperline.co/api-reference/docs/amount Technical representation of monetary values in Hyperline Learn about [currencies support](../../docs/getting-started/currencies) in Hyperline. On the technical side, our APIs always represent currencies using their **three-letter ISO 4217 code** (see a complete list [here](https://en.wikipedia.org/wiki/ISO_4217#Active_codes_\(List_One\))), and accept and return integer amounts in the **currency's smallest unit**. For **European currencies**, this means that amounts are represented in **cents**. If you want to convert an amount with decimals into its Hyperline's format you need to multiply it by `100`. For example, an amount of €`34.17` (Euro, a two-decimal currency) will be represented in Hyperline as `3417`. Hyperline also supports **zero-decimal currencies** and **three-decimal currencies**. In this case, you need to apply the right multiplier (or none). For example, an amount of `F CFA 12065` (West African CFA franc, a zero-decimal currency) will be represented in Hyperline as `12065`. # Authentication Source: https://docs.hyperline.co/api-reference/docs/authentication Learn how to authenticate to use Hyperline's API The Hyperline API requires either an **API key** or an **access token** to identify and authorise calls. API keys are associated with a single Hyperline account, and an access token represents delegated access to a specific account (used for [third-party app](./third-party-app)). You can have more than one token or key at any point in time. Those tokens are able to authenticate to Hyperline and perform actions on your account so it's important that you keep them safe in the same way that you would a password. ## Manage API keys ### How to generate an API key Generating an **API key** is very simple and allow you to use Hyperline's API or integration such as Zapier. As a Hyperline's admin: 1. Go to your workspace [Settings](https://app.hyperline.co/app/settings/api), section API 2. Click on `+ New API key` 3. Add a name for this key, and select the appropriate scopes (in most cases you'll need right/write accesses) 4. Copy the key and it in a safe space, you won't be able to see it later in Hyperline API keys are prefixed either with `prod_` or `test_` to easily identify and distinguish them between environments. ### Using authentication token API keys or access tokens must be provided with every API call, specified in the `Authorization` header after a `Bearer` prefix. All requests happen using HTTPS. For example: ```sh theme={null} curl -H "Authorization: Bearer " https://api.hyperline.co/v1/customers ``` We also support HTTP Basic Authentication, where the `username` is the API key and the `password` is left blank, but we recommend using Bearer Authentication because it's simpler for debugging. ### Keeping your data safe Your API keys should be treated as **highly sensitive information** - think of a token like a password. You should only give tokens to services you fully trust. If leaked, tokens could be used maliciously - they can provide someone with access to all of your Hyperline data. If you suspect a token has been compromised, revoke it and replace it with a new one. Tokens should never be shared with support teams or your customers. ### Revoke a key Workspace admins can permanently revoke tokens from the [API Settings](https://app.hyperline.co/app/settings/api) in Hyperline. To revoke a token, click on the `…` icon on the line of the key name, then `Delete` to permanently delete it. A deleted key cannot be recovered. # Dates & timezones Source: https://docs.hyperline.co/api-reference/docs/dates-and-timezones Technical representation of dates in Hyperline # Date Format and Timezone Handling All dates in the Hyperline API are handled in UTC (Coordinated Universal Time). When sending dates to the API, you must convert your local timezone dates to UTC. Similarly, all dates returned by the API will be in UTC format. ## Working with Customer Timezones When creating subscriptions for customers in specific timezones, you'll need to convert the desired local time to UTC before sending it to the API. ### Examples Let's say you want to create a subscription that starts at midnight (00:00) in Paris timezone (Europe/Paris): ```javascript theme={null} // Example 1: January 1st, 2024 at 00:00 Paris time // Paris is UTC+1 in winter, so we need to convert to UTC (23:00 previous day) "2023-12-31T23:00:00Z" // Example 2: July 1st, 2024 at 00:00 Paris time // Paris is UTC+2 in summer (due to daylight saving), so we need to convert to UTC (22:00 previous day) "2024-06-30T22:00:00Z" ``` Note that the `Z` suffix in the date string indicates that the timestamp is in UTC. ## Best Practices * Always use ISO 8601 format for dates * Include the UTC indicator (`Z`) in your timestamps * Consider daylight saving time when converting from local timezones * Use a reliable date library (like `date-fns` or `luxon`) to handle timezone conversions # Error handling Source: https://docs.hyperline.co/api-reference/docs/error-handling Learn how to handle errors when using Hyperline's API The Hyperline API uses conventional HTTP response codes to indicate the success or failure of an API request. This page details how to handle errors effectively and what to expect in error responses. ## HTTP Status Codes The API uses standard HTTP status codes to indicate the success or failure of requests: * **2xx Success**: The request was successful * **4xx Client Error**: The request was invalid or cannot be processed * **5xx Server Error**: An internal server error occurred ## Error Response Format When an error occurs, the API returns a JSON response with a `message` property containing a human-readable description of the error: ```json theme={null} { "message": "The requested resource was not found" } ``` ## Common Error Codes ### 400 Bad Request The request was malformed or contains invalid parameters. ```json theme={null} { "message": "Cannot assign a subscription to a customer without a currency set" } ``` ### 401 Unauthorized The request lacks valid authentication credentials. ```json theme={null} { "message": "Missing authentication token" } ``` ### 404 Not Found The requested resource was not found. ```json theme={null} { "message": "Product not found" } ``` ### 429 Too Many Requests The request rate limit has been exceeded. See [Rate Limiting](./rate-limiting) for more details. ## Getting Help If you encounter an error that you cannot resolve, please: 1. Check the error message for guidance 2. Verify your request format and parameters 3. Ensure your authentication credentials are valid 4. Contact our support team with the error details and request information # Getting started Source: https://docs.hyperline.co/api-reference/docs/getting-started Welcome to the Hyperline technical documentation We offer you a complete set of resources, including APIs, a webhook system, low-code solutions, and developer tools, to facilitate the creation of a full technical integration seamlessly. However, our main principle is to minimize the technical workload on your end and abstract away the complexities of managing a billing system, allowing you to focus on delivering your core product value. The Hyperline API is structured following REST principles and utilizes JSON-encoded data payloads. It adheres to industry standards and strives to deliver the most user-friendly interface possible, with straightforward operations, detailed error messages, and predictable behavior. This ensures that integrating with us is an effortless process. **Sandbox environment** In order to experiment, we provide you with a test mode (sandbox environment) where no real money or operations are involved. This allows you to test any flows you want without affecting your live data or interact with the banking networks. To do this, you can switch on the **test mode** option on your Hyperline account. ## Not a developer? Hyperline offers plenty of options to get started with pricing and billing capabilities without any code implementation. For this, you can check out our [product documentation](../../docs). ## Services endpoints ### Production environment | Service | Base URL | | -------------------- | ---------------------------------------------------------- | | Main API | [https://api.hyperline.co](https://api.hyperline.co) | | Events ingestion API | [https://ingest.hyperline.co](https://ingest.hyperline.co) | | Browser application | [https://app.hyperline.co](https://app.hyperline.co) | ### Sandbox environment (test mode) | Service | Base URL | | -------------------- | -------------------------------------------------------------------------- | | Main API | [https://sandbox.api.hyperline.co](https://sandbox.api.hyperline.co) | | Events ingestion API | [https://sandbox.ingest.hyperline.co](https://sandbox.ingest.hyperline.co) | | Browser application | [https://sandbox.app.hyperline.co](https://sandbox.app.hyperline.co) | # Pagination and filtering Source: https://docs.hyperline.co/api-reference/docs/pagination All list requests can be paginated and filtered using the same query format. For convenience, we've made sure all *list-based* endpoints returned data with the same structure. ## Pagination We're using 2 parameters for pagination: * `take` is the number of items the API will return, default is **50**, max is **100** * `skip` is the number of items the API will skip, default is **0** So if you want to get the first 50 items of a list, you don't need any parameters. If you need items from the 350th to the 425th, you'll use `take=75` and `skip=350`. Here's an example with the customer list: ```sh theme={null} curl --request GET \ --url 'https://api.hyperline.co/v1/customers?take=10&skip=10' \ --header 'Authorization: Bearer ' ``` The API will always return a similarly shaped payload containing: * `data` the items you requested * `meta` the contextual information (total number of items, number selected...) For instance for customers: ```json theme={null} { "meta": { "total": 2, "taken": 2, "skipped": 0 }, "data": [ { "id": "cus_3fhwCWcL0Rx5MQ" // other properties }, { "id": "cus_9huL9ahn7KQqHo" // other properties } ] } ``` ## Filtering Our API is offering many filtering capabilities so you can always find what you're looking for. Filters are passed as query parameters using a common pattern. `fieldName__operator=value` For instance: * `GET /v1/customers?name__contains=instagram` will return all customers with the name containing instagram * `GET /v1/customers?id__in=123,456,789` will return customers with ID equals to 123, 456, or 789 ## List of available operators * `equals` (or just `=xxx`) * `not` * `lt` * `lte` * `gt` * `gte` * `contains` * `startsWith` * `endWith` * `in` * `notIn` * `isNull` * `isNotNull` Numerical operators can be applied to numbers or dates. Not all fields can be filtered, please refer to each model in the API Reference to see which ones are available. # Rate limiting Source: https://docs.hyperline.co/api-reference/docs/rate-limiting Our API implements rate limiting to ensure fair usage and protect the system from abuse. This page details our rate limiting policies and how to handle them effectively. ## Rate Limits | Operation Type | Limit | Window | | -------------------------------- | ----- | ---------- | | Read (GET) | 200 | 10 seconds | | Write (POST, PUT, PATCH, DELETE) | 50 | 10 seconds | ## Rate Limit Headers API responses include the following rate limit headers: * `X-RateLimit-Limit`: The maximum number of requests allowed in the current window * `X-RateLimit-Remaining`: The number of requests remaining in the current window * `X-RateLimit-Reset`: The date and time when the rate limit window resets * `Retry-After`: The minimum number of seconds to wait before retrying (only when the limit has been reached) ## Handling Rate Limits When you exceed the rate limit, the API will return a **429 Too Many Requests** HTTP status code. The response body will be: ```json theme={null} Too many requests ``` ### Best Practices 1. **Monitor Rate Limits**: Track the `X-RateLimit-Remaining` header to anticipate when you're approaching the limit 2. **Implement Backoff**: When you receive a 429 response: * Wait until the date specified in the `X-RateLimit-Reset` header * Consider implementing exponential backoff for retries 3. **Batch Requests**: When possible, combine multiple operations into a single request 4. **Caching**: Cache responses when appropriate to reduce the number of API calls ## Example Response Headers Rate limit not exceeded: ``` HTTP/1.1 200 OK X-RateLimit-Limit: 200 X-RateLimit-Remaining: 150 X-RateLimit-Reset: 2025-04-15T10:18:08.107Z ``` Rate limit exceeded: ``` HTTP/1.1 429 Too Many Requests X-RateLimit-Limit: 200 X-RateLimit-Remaining: 0 X-RateLimit-Reset: 2025-04-15T10:18:08.107Z Retry-After: 5 ``` ## Custom Rate Limits If your application requires higher rate limits, please contact our support team. We'll work with you to establish appropriate limits based on your use case. # React components Source: https://docs.hyperline.co/api-reference/docs/react-components Learn how to embed Hyperline directly into your React application Hyperline provides built-in React components to: * For each customer, display their subscriptions * preview and update the payment method * list and download invoices * list and update billing information This doc assumes that you already have a basic working knowledge of [React](https://react.dev/) and that you have already set up a React project. ## Getting started First install the `@hyperline/react-components` NPM package. ```sh Install the package theme={null} npm install @hyperline/react-components ``` To allow a customer to see its Hyperline's data, you need to generate a unique authentication token on your server side. You can use our API and the [create auth token endpoint](../../api-reference/endpoints/integrations/create-component-token) for this. ```sh cURL theme={null} curl -X POST 'https://api.hyperline.co/v1/integrations/components/token' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ # You can create an [api key here](https://app.hyperline.co/app/settings/api) -d '{ "customer_id": "" }' ``` Then, integrate the React components. You will most likely generate a new token every time your customer access the page. ```ts theme={null} import { Subscriptions, PaymentMethod } from "@hyperline/react-components"; export default function HyperlineSubscriptions() { return ( ", mode: "production" // if you're using our sandbox, set "sandbox" here locale: "en" // optional }} /> ); } export default function HyperlinePaymentMethod() { return ( ", mode: "production" // if you're using our sandbox, set "sandbox" here locale: "en" // optional }} onPaymentMethodCreated={() => do something} // optional, from 0.2.20 onPaymentMethodDeleted={() => do something} // optional, from 0.2.20 /> ); } ``` ## Components ### Subscriptions List all active subscriptions ```tsx theme={null} " }} /> ``` ### Subscription Display a subscripton by ID ```tsx theme={null} " }} /> ``` ### InvoicesList List and download all invoices and refunds ```tsx theme={null} " }} /> ``` ### PaymentMethod Display the current payment method, delete it if allowed, or add a new payment method ```tsx theme={null} " }} /> ``` ### CustomerBillingInfoForm Display a form with all billing info, with an optional callback when the form has been successfully saved. ```tsx theme={null} {}} options={{ token: "" }} /> ``` ## Component options When using the components, you will need to provide an `options` prop with the following parameters: | name | Description | Type | Default value | Required | | ---------- | ----------------------------------------- | --------------------- | ------------- | -------- | | token | The token specific to your customer | string | | ☑️ | | mode | Which Hyperline environment are you using | production \| sandbox | production | | | appearance | Customise the appearance of the component | Object | | | ### Appearance You can change the colors and fonts of the component. ```tsx theme={null} ", appearance: { variables: { borderRadius: "10px", colorBackground: "#000000", colorPrimary: "#e1e2f3", colorPrimaryHover: "#d0d1e5", colorPrimaryDisabled: "#667", colorBorder: "#445", colorText: "#f1f2f3", colorTextSecondary: "#dededf", fontFamily: "sacramento" }, fonts: [ { src: "url(https://fonts.gstatic.com/s/sacramento/v13/buEzpo6gcdjy0EiZMBUG4C0f_f5Iai0.woff2)", family: "sacramento" } ] } }} /> ``` ### Variables They are meant to customise all elements at once. | Variable name | Description | | ---------------------- | ------------------------------------------------------------------------------------------------------------------ | | `borderRadius` | Change the roundness of the elements: Buttons, tables, ... | | `colorBackground` | Most elements have a transparent background. In other cases, you can customise the background color of the element | | `colorPrimary` | Color used for buttons and accent text | | `colorPrimaryHover` | Hover color for buttons | | `colorPrimaryDisabled` | Color of disabled buttons | | `colorBorder` | The color of all our regular borders | | `colorText` | Default text color | | `colorTextSecondary` | Text color of secondary text | | `fontFamily` | Font used. If you need to import a font, please read the next section | ### Fonts Set your application's font. * `src` Url of the font file * `family` Name of the font - this is the name you'll use for the `fontFamily` variable ```ts theme={null} ``` # Third-party app Source: https://docs.hyperline.co/api-reference/docs/third-party-app Enable your app to access Hyperline accounts using OAuth flows Hyperline supports the creation of external integrations, so your product can connect with any Hyperline account. This capability allows external apps to build use-cases such as: * automating or white-labeling billing-specific needs * allowing your app to view the data of an Hyperline account * enabling your app to manage the customer base of an Hyperline account * allowing your app to manage the product catalog of an Hyperline account * allowing your app to manage recurring subscriptions or one-time payments of an Hyperline account * fetching invoices from an Hyperline account This list is non-exhaustive and variety of flows can be built levering this kind of app. ## Getting started Hyperline uses **OAuth** standard to allow your app to access data from a connected account with the user consent. This prevents having to manually exchange API keys. For example, with the user's consent, using OAuth you can call the subscription API on behalf of your user to create an Hyperline subscription. Our API supports the Authorization Code Grant flow ([RFC 6749 section 4.1](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1)), which allows your application to get separate access tokens for each connected Hyperline account. We recommend using a well-established library for making OAuth requests. You can find some recommendations [here](https://oauth.net/code/). ## Registering your app ### Prerequisites The third-party app creation capability is granted manually by Hyperline. Please contact our support if you are interested and want to enable it. ### Creating an app The first thing you need to do is [creating a new app](../../api-reference/endpoints/third-party-apps/create-app) using the Apps API. You will receive a Client ID and Client Secret, both of which should be kept secret. These credentials can be used to: 1. Redirect users to your app's authorization form (Client ID) 2. Exchange auth codes for access tokens (Client ID & Client Secret) 3. Renew your access tokens 4. Deauthorize users from your app (Client ID & Client Secret) Use the create new app API, including the following attributes in a JSON body: * `name`: displayed to the user during the authorization flow * `description` (optional): to show more details to the user * `logo_uri` (optional): to customise the authorization screen with your brand * `callbacks`: URLs whitelisted to use as a callback/redirect after authorization (e.g. an URL within your app that processes authorizations) For now, apps can only be managed (listed, updated, deleted) using our API. ## OAuth flow To initiate the flow, you need to direct your user to [`https://api.hyperline.co/v1/oauth/authorize`](../endpoints/oauth2/authorize) (or `https://sandbox.api.hyperline.co/v1/oauth/authorize`). You must append these four query parameters to the URL: * `client_id`: received upon app registration * `redirect_uri`: where the user will be sent after authorization, it must match the URL you set when registering your app * `response_type=code`: the only supported mode at the moment * `state`: a random string to prevent CSRF attacks that you verify when the user returns to your app - [more information](https://auth0.com/docs/secure/attack-protection/state-parameters) This endpoint will redirect the user to the Hyperline login page. After authorization, the user is redirected to your `redirect_uri` with the `code` and `state` query parameters. You must ensure that the query parameter `state` matches the original state you passed at the start of the flow. If it does, you can exchange the provided code for tokens by making a POST request to [`https://api.hyperline.co/v1/oauth/tokens`](../endpoints/oauth2/generate-tokens) (`https://sandbox.api.hyperline.co/v1/oauth/tokens`), including the following attributes in a JSON body: * `client_id`: as above * `client_secret`: received upon app registration * `grant_type: "authorization_code"` * `code`: as provided in the query parameters * `redirect_uri`: must match the value set at the `1. Authorize` step You'll then receive tokens in the JSON body: ```json Response JSON body theme={null} { "access_token": "", "refresh_token": "", "expires_in": 3600, "token_type": "bearer" } ``` Access tokens must be provided with every API call, specified in the `Authorization` header after a Bearer prefix. For example: ```sh API call using cURL theme={null} curl -H "Authorization: Bearer " https://api.hyperline.co/v1/customers ``` ### Tokens expiration Access tokens are time limited — you need to refresh them periodically using the refresh token. The time limits are listed below. * Access token: 24h * Refresh token: does not expire automatically (can be revoked) You can use the `expires_in` field to know the number of seconds left before the app access token expires. Be sure to renew it before this reaches zero. ## Managing tokens ### Refresh a token If you wish to renew an access token, you can make a POST request to [`https://api.hyperline.co/v1/oauth/tokens`](../endpoints/oauth2/generate-tokens) (or `https://sandbox.api.hyperline.co/v1/oauth/tokens`), including the following attributes in a JSON body: * `client_id`: received upon app registration * `client_secret`: received upon app registration * `grant_type: "refresh_token"` * `refresh_token`: received during the first authorization flow ### Revoke a token Once issued, access tokens cannot be revoked in the same way as cookies with session IDs for server-side sessions. As a result, tokens should be refreshed periodically if the user remains active. You can revoke refresh tokens in case they become compromised. Simply make a POST request to [`https://api.hyperline.co/v1/oauth/revoke`](../endpoints/oauth2/revoke-token) (or `https://sandbox.api.hyperline.co/v1/oauth/revoke`), including the following attributes in a JSON body: * `client_id`: received upon app registration * `client_secret`: received upon app registration * `token`: refresh token you want to revoke ## Multiple accounts Learn about [multiple accounts](../../docs/getting-started/multiple-accounts) on Hyperline. Each access token grants access to all companies associated with the user. To retrieve a list of all user-accessible companies, utilize the [`https://api.hyperline.co/v1/companies`](../endpoints/companies/get-companies) endpoint. For targeting a particular company, include the `Hyperline-CompanyId` header in each API request. If a user has access to multiple companies and you don't specify the `Hyperline-CompanyId` header, the first company (oldest one) linked to the user will be used. We advise including this header by default when constructing a third-party app/flow. # API upgrades Source: https://docs.hyperline.co/api-reference/docs/upgrades Keep track of changes and deprecation to the Hyperline API ## December 11, 2025 * Added `Customer.tax_ids` and `Customer.tax_rate_custom` on `/v1/customers` GET, POST endpoints * Added `Customer.tax_ids` and `Customer.tax_rate_custom` on `/v1/customers/{id}` GET, PUT endpoint * Added `Invoice.customer.tax_id` on `/v1/invoices` GET endpoint * Added `Invoice.customer.tax_id` on `/v1/invoices/{id}` GET endpoint * Major Deprecation warning * Deprecating `Customer.vat_number` and `Customer.vat_number_valid` in favor of `Customer.tax_ids` * Deprecating `Customer.vat_rate_custom` in favor of `Customer.tax_rate_custom` * Deprecating `Invoice.customer.vat_number` in favor of `Invoice.customer.tax_id` ## December 4, 2025 * Added `custom_properties` query param on `/v2/subscriptions` GET endpoint ## December 1, 2025 * Added `Customer.shipping_address` on `/v1/customers` GET, POST endpoints * Added `Customer.shipping_address` on `/v1/customers/{id}` GET, PUT endpoints ## November 28, 2025 * Added `Invoice.public_url` on `/v1/invoices/{id}` GET endpoint ## November 19, 2025 * Added `/v1/exports` POST endpoint * Added `/v1/exports/{id}` GET endpoint * Added `/v1/exports/{id}/download` GET endpoint ## October 31, 2025 * Added `/v1/customers/{id}/credits/{id}` PUT endpoint ## October 23, 2025 * Added `Invoice.coupons` on `/v1/invoices` POST endpoint * Added `Invoice.coupons` on `/v1/invoices/{id}` PATCH endpoint * Added `Invoice.coupons` on `/v1/invoices/batch` POST endpoint ## October 16, 2025 * Added `Coupon.product_ids` on `/v1/coupons` GET endpoint * Added `Coupon.product_ids` on `/v1/coupons` POST endpoint * Added `Coupon.product_ids` on `/v1/coupons/{id}` GET endpoint * Added `Coupon.product_ids` on `/v1/coupons/{id}` PUT endpoint * Added `/v1/subscriptions/templates` GET endpoint * Added `/v1/subscriptions/templates/{id}` GET endpoint * Added `Subscription.template_id` on `/v2/subscriptions` POST endpoint * Added `Subscription.template_configuration_id` on `/v2/subscriptions` POST endpoint * Major Deprecation warning * Deprecating `/v1/plans` GET endpoint * Deprecating `/v1/plans/{id}` GET endpoint ## October 1, 2025 * Added `product_id`, `customer_id`, `updated_at` query params on `/v1/customers/credits` GET endpoint ## September 30, 2025 * Added `Customer.is_government_affiliated` on `/v1/customers` POST, GET, PUT endpoints ## September 26, 2025 * Added `/v1/customers/credits` GET endpoint * Added `Credit.auto_topup` on `/v1/customers/{id}/credits` POST, GET endpoints * Added `Credit.auto_topup` on `/v1/customers/{id}/credits/{creditId}` GET endpoint ## September 23, 2025 * Added `/v1/quotes/{id}/approve` POST endpoint ## September 19, 2025 * Added `Customer.integrations` on `/v1/customers` GET endpoint ## September 16, 2025 * Added `period_start` and `period_end` query params on `/v1/invoices` GET endpoint ## September 15, 2025 * Added `Subscription.activation_strategy` on `/v2/subscriptions` GET endpoint ## September 11, 2025 * Added `Subscription.phases[].do_not_invoice_phase` on `/v2/subscriptions/{id}` GET endpoint * Added `Subscription.phases[].do_not_invoice_phase` on `/v2/subscriptions` POST endpoint * Added `Subscription.phases[].do_not_invoice_phase` on `/v2/subscriptions/{id}` PUT endpoint ## September 10, 2025 * Added `/v1/invoices/{id}/uncollectible` POST endpoint ## September 5, 2025 * Added `Subscription.phases` on `/v2/subscriptions/{id}` PUT endpoint ## August 27, 2025 * Added `Invoice.source` on `/v1/invoices` GET endpoint * Added `Invoice.source` on `/v1/invoices/{id}` GET endpoint ## August 25, 2025 * Added `/v1/bank-accounts` GET endpoint * Added `/v1/bank-accounts/{id}` GET endpoint ## August 18, 2025 * Added `/v1/subscriptions/{id}/simulate-updates` POST endpoint * Added `plan.created`, `plan.updated` and `plan.deleted` webhooks ## August 8, 2025 * Added `Quote.updated_at` on `/v1/quotes` GET endpoint * Added `Quote.updated_at` on `/v1/quotes/{id}` GET endpoint * Added `PriceConfiguration.price_book_id` on `/v1/price-configurations` GET endpoint ## July 21, 2025 * Added `Subscription.crm_opportunity_id` on `/v2/subscriptions` POST endpoint * Added `Subscription.crm_opportunity_id` on `/v2/subscriptions/{id}` PUT endpoint ## July 17, 2025 * Added `reason` on `/v1/subscriptions/{id}/cancel` POST endpoint * Added `Subscription.cancellation_reason` on `/v2/subscriptions` GET endpoint * Added `Subscription.cancellation_reason` on `/v2/subscriptions/{id}` GET endpoint ## July 11, 2025 * Added `/v1/customers/{id}/payment-methods` POST endpoint * Added `Transaction.provider_name` and `Transaction.provider_transaction_id` on `/v1/invoices/{id}/transactions` POST endpoint ## July 7, 2025 * Added `/v1/files` GET, POST endpoints * Added `/v1/files/{id}` DELETE endpoint * Added `/v1/files/{id}/download` GET endpoint * Added `Invoice.properties` on `/v1/invoices` GET, POST endpoints * Added `Invoice.properties` on `/v1/invoices/{id}` GET, PATCH endpoints ## July 3, 2025 * Added `/v1/subscriptions/{id}/renew` POST endpoint ## June 27, 2025 * Added `Invoice.coupons` and `Invoice.transactions` on `/v1/invoices` GET endpoint ## June 18, 2025 * Added `Subscription.name` on `/v2/subscriptions/{subscriptionId}` GET endpoint * Added `Subscription.name` on `/v2/subscriptions` GET endpoint ## June 13, 2025 * Added `Subscription.generate_document`, `Subscription.document_name` and `Subscription.add_vat_to_document` on `/v2/subscriptions` POST endpoint ## June 11, 2025 * Added `/v1/invoices/{id}/credit-notes` POST endpoint * Added `Invoice.integrations` on `/v1/invoices/{id}` GET endpoint * Added `Customer.integrations` on `/v1/customers/{id}` GET endpoint * Added `PaymentMethod.integration` on `/v1/customers/{id}/payment-methods/{id}` GET endpoint * Major Deprecation warning- Deprecating `Customer.providers` in favor of `Customer.integrations` ## June 6, 2025 * Added `/v1/price-configurations` GET endpoint * Added `/v1/price-configurations/{id}` DELETE endpoint ## May 16, 2025 * Added `purchase_order` query param on `/v2/subscriptions` GET endpoint ## May 9, 2025 * Added `/v1/promotion-codes` GET, POST endpoints * Added `/v1/promotion-codes/{id}` GET, PATCH, DELETE endpoints ## April 30, 2025 * Added `Subscription.contract_terms` on `/v2/subscriptions/{subscriptionId}` GET endpoint * Added `Subscription.contract_terms` on `/v2/subscriptions` POST endpoint * Added `Quote.subscription.contract_terms` on `/v1/quotes` POST endpoint * Added `Invoice.bank_account_id` on `/v1/invoices/{id}` GET endpoint * Added `Invoice.bank_account_id` on `/v1/invoices/{id}` PATCH endpoint * Added `Invoice.payment_method_type` on `/v1/invoices/{id}` PATCH endpoint * Added `Invoice.payment_method_id` on `/v1/invoices/{id}` PATCH endpoint ## April 18, 2025 * Added `Subscription.billing_cycle_alignment` on `/v2/subscriptions` POST endpoint ## April 8, 2025 * Added `Invoice.type` on `/v1/invoices` POST endpoint * Added `Invoice.type` on `/v1/invoices/{id}` PATCH endpoint * Added `Invoice.document_name` on `/v1/invoices` POST endpoint * Added `Invoice.document_name` on `/v1/invoices/{id}` PATCH endpoint * Added `Invoice.tax_scheme` on `/v1/invoices` POST endpoint * Added `Invoice.tax_scheme` on `/v1/invoices/{id}` PATCH endpoint * Added `Invoice.line_items` on `/v1/invoices/{id}` PATCH endpoint ## April 4, 2025 * Added `Subscription.trial` on `/v2/subscriptions` POST endpoint * Added `Quote.subscription.trial` on `/v1/quotes` POST endpoint * Major Deprecation warning * Deprecating `Subscription.trial_ends_at` and `Subscription.trial_delay_first_invoice` in favor of `Subscription.trial` * Deprecating `Quote.subscription.trial_ends_at` and `Quote.subscription.trial_delay_first_invoice` in favor of `Quote.subscription.trial` ## March 31, 2025 * Added `/v1/invoices/{id}/charge` POST endpoint * Added `Invoice.transactions[].chargeback` on `/v1/invoices/{id}` GET endpoint * Added `Subscription.phases[].billing_cycle_alignment` on `/v2/subscriptions/{subscriptionId}` GET endpoint * Added `SubscriptionPhase.billing_cycle_alignment` on `/v2/subscriptions/{subscriptionId}/phases` GET endpoint * Added `SubscriptionPhase.billing_cycle_alignment` on `/v2/subscriptions/{subscriptionId}/phases/{phaseId}` GET endpoint * Added `Subscription.phases[].billing_cycle_alignment` on `/v2/subscriptions` POST endpoint * Added `Quote.subscription.phases[].billing_cycle_alignment` on `/v1/quotes` POST endpoint * Added `subscription.reinstated` webhook ## March 24, 2025 * Added `PaymentMethod.status` on `/v1/customers/{id}/payment-methods` GET endpoint * Added `PaymentMethod.status` on `/v1/customers/{id}/payment-methods/{paymentMethodId}` GET endpoint * Added `Customer.price_book_id` on `/v1/customers` GET endpoint * Added `Customer.price_book_id` on `/v1/customers/{id}` GET endpoint ## March 11, 2025 * Added `/v1/products/{id}/archive` PUT endpoint * Added `/v1/products/{id}/unarchive` PUT endpoint ## March 6, 2025 * Added `/v1/invoices/{id}/transactions` POST endpoint * Added `/v1/invoices/{id}/transactions/{transactionId}` DELETE endpoint * Added `provider_id` on `/v1/customers/providers-bulk-update` POST endpoint ## February 27, 2025 * Added `Subscription.phases` on `/v2/subscriptions` POST endpoint * Added `Subscription.phases` on `/v2/subscriptions/{id}` GET endpoint ## February 4, 2025 * Added `Invoice.payment_method_id` on `/v1/invoices` POST endpoint * Added `Invoice.line_items[].tax_rate` on `/v1/invoices` POST endpoint ## January 28, 2025 * Added `Invoice.line_items[].product_id` on `/v1/invoices` POST endpoint ## January 15, 2025 * Added `Subscription.quote` on `/v2/subscriptions/{id}` GET endpoint ## January 14, 2025 * Added `/v2/subscriptions/{id}/phases` GET endpoint * Added `/v2/subscriptions/{id}/phases/{phaseId}` GET endpoint * Added `Subscription.current_phase_id` on `/v2/subscriptions` GET endpoint * Added `Subscription.current_phase_id` on `/v2/subscriptions/{id}` GET endpoint ## January 10, 2025 * Added `Quote.original_subscription_id` on `/v1/quotes` GET endpoint * Added `Quote.original_subscription_id` on `/v1/quotes/{id}` GET endpoint ## January 8, 2025 * Added `/v1/invoices/{id}` DELETE endpoint ## November 6, 2024 * Added `/v1/customers/{id}/unarchive` PUT endpoint * Added `/v1/invoices/{id}` PATCH endpoint * Added `/v1/subscriptions/{id}/activate` POST endpoint ## October 23, 2024 * Added `/v1/customers/{id}/payment-methods` GET endpoint * Added `/v1/customers/{id}/payment-methods/{paymentMethodId}` GET, DELETE endpoints ## October 8, 2024 * Added `/v1/companies` POST endpoint ## August 21, 2024 * Added `custom_property.created`, `custom_property.updated`, `custom_property.deleted`, `custom_property.value_created`, `custom_property.value_updated`, `bank_account.created`, `bank_account.deleted` webhooks ## August 20, 2024 * Added `/v1/taxes/rates` GET endpoint * Added `/v1/taxes/rates/{id}` GET endpoint * Added `Product.accounting` on `/v1/products/{id}` GET, POST, PUT endpoints * Added `Invoice.line_items[].tax_rate_id` on `/v1/invoices` GET endpoint * Added `Invoice.line_items[].tax_rate_id` on `/v1/invoices/{id}` GET endpoint * Added `Customer.custom_payment_delay` on `/v1/customers` GET endpoint * Added `Customer.custom_payment_delay` on `/v1/customers/{id}` GET, POST, PUT endpoints ## August 12, 2024 * Added `Subscription.custom_properties` on `/v2/subscriptions` GET, POST endpoints * Added `Subscription.custom_properties` on `/v2/subscriptions/{id}` GET, PUT endpoints ## August 7, 2024 * Added `/v1/quotes/{id}/sign` POST endpoint * Added `/v1/invoices/{id}/void` POST endpoint ## July 30, 2024 * Added `Customer.timezone` on `/v1/customers` GET, POST endpoints * Added `Customer.timezone` on `/v1/customers/{id}` GET, PUT endpoints ## July 3, 2024 * Added `/v1/organisations/{id}` GET endpoint * Added `/v1/organisations/{id}` PATCH endpoint * Added `Customer.organisation_id` and `Customer.organisation_invoicing` on `/v1/customers` POST endpoint * Added `Customer.organisation_id` and `Customer.organisation_invoicing` on `/v1/customers/{id}` GET, PUT endpoints * Added `Subscription.contract_start` and `Subscription.contract_end` on `/v2/subscriptions/*` endpoints * Added `Subscription.products[].attached_at` and `Subscription.products[].detached_at` on `/v2/subscriptions/*` endpoints * Added `/v1/subscriptions/{id}/reinstate` POST endpoint * Added `update_prices` `SubscriptionUpdate.type` on `/v1/subscriptions/{id}/update` POST endpoint * Added `/v1/subscriptions/{id}/update-many` POST endpoint * Major Deprecation warning * Deprecating `Subscription.starts_at` in favor of `Subscription.contract_start` * Major Planned for September 1, 2024 * Removing `SubscriptionUpdate.payload.billing_item_ids` in favor of `SubscriptionUpdate.payload.product_ids` for `add_coupon` update type * Removing `add_item` `SubscriptionUpdate.type` in favor of `add_product` * Removing `remove_item` `SubscriptionUpdate.type` in favor of `remove_product` ## June 26, 2024 * Added `/v1/quotes` POST endpoint * Added `/v1/quotes/{id}/download` GET endpoint * Added `/v1/quotes/{id}/send` POST endpoint * Added `/v1/quotes/{id}/void` POST endpoint ## June 12, 2024 * Added `Customer.custom_properties` on `/v1/customers` GET endpoint ## May 27, 2024 * Added `/v1/quotes` GET endpoint * Added `/v1/quotes/{id}` GET endpoint * Added `/v1/quotes/{quoteId}/files/{id}/download` GET endpoint ## April 2, 2024 * Major Removed deprecated subscription endpoints * Removed `GET /v1/subscriptions` in favor of `GET /v2/subscriptions` * Removed `GET /v1/subscriptions/{id}` in favor of `GET /v2/subscriptions/{id}` * Removed `POST /v1/subscriptions` in favor of `POST /v2/subscriptions` * Removed `GET /v1/billing-plans/{id}` in favor of `GET /v1/plans/{id}` * Removed `GET /v1/billing-scenarios` * Removed `GET /v1/billing-scenarios/{id}` ## March 6, 2024 * Added `/v1/subscriptions/{id}/pause` PUT endpoint * Added `/v1/subscriptions/{id}/reactivate` PUT endpoint * Added `/v1/subscriptions/refresh` POST endpoint ## March 5, 2024 * Added `/v1/webhooks/endpoints` GET, POST endpoints * Added `/v1/webhooks/endpoints/{id}` GET, PUT, DELETE endpoints ## March 1, 2024 * Major Removed unit concept on wallets (only money pocket) in favor of credit-type products to manage credit units. * Removed `WalletBalance.units` * Removed `WalletSettings.unit_credit_prices` * Removed `WalletTransaction.units` and `WalletTransaction.transaction_id` ## February 28, 2024 * Major Removed unique current customer subscription in favor of subscriptions array. * Removed `Customer.current_subscription_id` on `/v1/customers` GET endpoint * Removed `Customer.current_subscription` on `/v1/customers/{id}` GET endpoint ## February 20, 2024 * Added `Customer.type` on `/v1/customers` GET, POST and PUT endpoints * Added `Customer.invoice_emails` on `/v1/customers` GET, POST and PUT endpoints * Added `Customer.vat_rate_custom` on `/v1/customers` GET, POST and PUT endpoints * Added `external` option on `Customer.payment_method_type` on `/v1/customers` POST and PUT endpoints ## February 16, 2024 * Major Planned for April 1, 2024 * Removing `Customer.country` in favor of `Customer.billing_address.country` * Removing `GET /v1/subscriptions` in favor of `GET /v2/subscriptions` * Removing `GET /v1/subscriptions/{id}` in favor of `GET /v2/subscriptions/{id}` * Removing `POST /v1/subscriptions` in favor of `POST /v2/subscriptions` * Major Planned for February 28, 2024 * Removing `Customer.current_subscription_id` on `/v1/customers` GET endpoint in favor of `Customer.subscriptions` * Removing `Customer.current_subscription` on `/v1/customers/{id}` GET endpoint in favor of `Customer.subscriptions` # Webhooks Source: https://docs.hyperline.co/api-reference/docs/webhooks Receive webhook messages Webhooks are automated messages sent from Hyperline when something happens on our system. They have a specific payload for each action they notify and are sent to a unique URL, an HTTPS endpoint on your server. Webhooks are a great way to integrate your application with Hyperline as you can fine-tune product flows and build deeper integrations based on your needs, with little development work on your end. ## Add a webhook endpoint To start listening to webhook message sent by Hyperline, go to your [webhooks settings](https://app.hyperline.co/app/settings/webhooks) in the app, click on "Add Endpoint", provide the termination URL that you control, and select the event types you want to listen to. You can add as many URLs, if you want to segregate the events you want to listen to. That's it! You will now receive webhook calls when the event occurs on the Hyperline system. ## Event types A complete list of the event types and the shape of the event payload can be find in the product Webhooks page, on the "Event Catalog" tab. Here is a preview of the events you can be notified: * `customer.created`, `customer.updated`, `customer.archived`, `customer.recovered`, `customer.deleted` * `subscription.created`, `subscription.contract_started`, `subscription.activated`, `subscription.phase_activated`, `subscription.trial_ended`, `subscription.paused`, `subscription.reinstated`, `subscription.updated`, `subscription.cancellation_scheduled`, `subscription.cancelled`, `subscription.voided`, `subscription.errored`, `subscription.charged`, `subscription.commitment_renewed` * `invoice.created`, `invoice.ready`, `invoice.grace_period.started`, `invoice.settled`, `invoice.errored`, `invoice.voided`, `invoice.reminder_sent` * `quote.created`, `quote.updated`, `quote.approved`, `quote.sent`, `quote.viewed`, `quote.signed`, `quote.voided` * `credit_note.ready`, `credit_note.settled` * `checkout.created`, `checkout.completed` * `payment_method.created`, `payment_method.activated`, `payment_method.errored`, `payment_method.deleted` * `bank_account.created`, `bank_account.deleted` * `wallet.credited`, `wallet.debited` * `credit.created`, `credit.updated`, `credit.balance_refreshed`, `credit.low_balance`, `credit.balance_at_zero`, `credit.topup_transaction_created`, `credit.usage_transaction_created` * `custom_property.created`, `custom_property.updated`, `custom_property.deleted`, `custom_property.value_created`, `custom_property.value_updated` * `product.created`, `product.updated`, `product.archived`, `product.recovered`, `product.deleted` * `coupon.created`, `coupon.updated`, `coupon.deleted` * `daily_analytics.ready` * `dataloader.failed` ## Consuming webhooks Webhook calls will always be `POST` HTTPS request contains a JSON body with this format: ```json theme={null} { "event_type": ".", "data": {} } ``` Your endpoint must quickly return a 2xx (status code 200-299) response prior to any complex logic that could cause a timeout (max 15s). Another important aspect of handling webhooks is to verify the signature and timestamp when processing them. ## Testing events The easiest way to be more confident in your endpoint configuration is to start receiving events as quickly as possible. The "Testing" tab is here to help you to send example events to your endpoint. After sending an example event, you can click into the message to view the message payload, all of the message attempts, and whether it succeeded or failed. Additionally, the Logs section is here to help you have a complete view of past call attempts with their date, status, and payload. ## Event delivery ### Replaying events If you want to replay a single (or multiple) events, you can find the message from the UI, open the options menu next to any of the attempts, and click on "Resend". It's a great help if your service had downtime or if your endpoint was misconfigured. ### Retry schedule Each message is attempted based on the following schedule, where each period is started following the failure of the preceding attempt: * Immediately * 5 seconds * 5 minutes * 30 minutes * 2 hours * 5 hours * 10 hours * 10 hours (in addition to the previous) If an endpoint is removed or disabled delivery attempts to the endpoint will be disabled as well. ### Event ordering Hyperline doesn't guarantee delivery of events in the order in which they're generated. You can find more details about why guaranteeing order doesn't really work in [this article](https://www.svix.com/blog/guaranteeing-webhook-ordering). Your endpoint shouldn't expect delivery of events in a specific order. We recommend designing your system in a way that doesn't require ordering. Additionally, you can use the API to fetch any missing objects (for example, you can fetch the subscription details using the ID provided in the `subscription.created` event payload). ### Static source IP addresses In case your webhook receiving endpoint is behind a firewall or NAT, you may need to allow traffic from our webhook servers' static IP addresses. In such scenarios, we recommend you to whitelist the following IP addresses: ``` 52.215.16.239 54.216.8.72 63.33.109.123 2a05:d028:17:8000::/56 ``` ## Best practices ### Handling duplicate events Webhook endpoints might occasionally receive the same event more than once. You can guard against duplicated event receipts by making your event processing [idempotent](https://en.wikipedia.org/wiki/Idempotence). One way of doing this is logging the events you've processed, and then not processing already-logged events. ### Prevent stale data As webhooks can be retried, another update can occur once your server is finally able to process the event. Therefore, we advise you to query the latest version of the related entity upon receiving a webhook. ### Verify webhooks Verifying webhooks is an important part of the consumption. Because of the way webhooks work, attackers can impersonate services by simply sending a fake webhook to an endpoint. This is a potential security hole for your application. In order to prevent it, every webhook and its metadata is **signed** with a unique key for each endpoint. This signature can then be used to verify the webhook indeed comes from Hyperline, and only process it if it is. Another potential security hole is what's called replay attacks. A replay attack is when an attacker intercepts a valid payload (including the signature), and re-transmits it to your endpoint. This payload will pass signature validation, and will therefore be acted upon. To mitigate this attack, a timestamp (`webhook-timestamp` header) is included in every request for when the webhook attempt occurred. We recommend you reject webhooks with a timestamp that is more than five minutes away (past or future) from the current time. **Verifying signatures** Each webhook call includes three headers with additional information that are used for verification: * `webhook-id`: the unique message identifier for the webhook message. This identifier is unique across all messages but will be the same when the same webhook is being resent (e.g. due to a previous failure). * `webhook-timestamp`: timestamp in seconds since epoch. * `webhook-signature`: the Base64 encoded list of signatures (space delimited). **Constructing the signed content** The content to sign is composed by concatenating the id, timestamp, and payload, separated by the full-stop character (`.`). In code, it will look something like: ``` signedContent = "${webhook_id}.${webhook_timestamp}.${body}" ``` Where `body` is the raw body of the request. The signature is sensitive to any changes, so even a small change in the body will cause the signature to be completely different. This means that you should not change the body in any way before verifying. **Determining the expected signature** `HMAC` with `SHA-256` is used to sign webhooks. So to calculate the expected signature, you should HMAC the `signed_content` from above using the base64 portion of your signing secret (this is the part after the `whsec_` prefix) as the key. For example, given the secret `whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw` you will want to use `MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw`. Here is an example of how you can calculate the signature in Node.js: ```js theme={null} const crypto = require("crypto"); const signedContent = `${webhook_id}.${webhook_timestamp}.${body}`; const secret = "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw"; // Need to base64 decode the secret const secretBytes = new Buffer(secret.split("_")[1], "base64"); const signature = crypto .createHmac("sha256", secretBytes) .update(signedContent) .digest("base64"); console.log(signature); ``` This generated signature should match one of the ones sent in the `webhook-signature` header. This header is composed of a list of space-delimited signatures and their corresponding version identifiers. The signature list is most commonly of length one. Though there could be any number of signatures. For example: ``` v1,g0hM9SsE+OTPJTGt/tmIKtSyZlE3uFJELVlNIOLJ1OE= v1,bm9ldHUjKzFob2VudXRob2VodWUzMjRvdWVvdW9ldQo= v2,MzJsNDk4MzI0K2VvdSMjMTEjQEBAQDEyMzMzMzEyMwo= ``` Make sure to remove the version prefix and delimiter (e.g. v1,) before verifying the signature. # Get analytics Source: https://docs.hyperline.co/api-reference/endpoints/analytics/get-analytics get /v1/analytics Retrieve your pre-computed account's analytics (ARR, revenues, churn, etc). # Get bank account Source: https://docs.hyperline.co/api-reference/endpoints/bank-accounts/get-bank-account get /v1/bank-accounts/{id} Retrieve a specific bank account by ID. # Get bank accounts Source: https://docs.hyperline.co/api-reference/endpoints/bank-accounts/get-bank-accounts get /v1/bank-accounts Retrieve all bank accounts. # Create billable event Source: https://docs.hyperline.co/api-reference/endpoints/billable-events/create-billable-event post /v1/events Create a new billable event. # Create billable events Source: https://docs.hyperline.co/api-reference/endpoints/billable-events/create-billable-events post /v1/events/batch Create several billable events in batch (limited to max 5000 events per request). # Delete billable events Source: https://docs.hyperline.co/api-reference/endpoints/billable-events/delete-billable-events delete /v1/events Delete existing billable events. # Get billable event prices Source: https://docs.hyperline.co/api-reference/endpoints/billable-events/get-billable-event-prices get /v1/events/prices Get previous calculation results for a billable event. You can search by either calculation_id / record_id or both. # Ingest and calculate billable event prices Source: https://docs.hyperline.co/api-reference/endpoints/billable-events/ingest-and-calculate-billable-event-prices post /v1/events/prices Ingest and calculate prices for a single billable event. After the first ingestion, events are not ingested again and the prices won't be calculated again. The initially calculated prices will be returned in subsequent calls. # Simulate billable event prices Source: https://docs.hyperline.co/api-reference/endpoints/billable-events/simulate-billable-event-prices post /v1/events/simulate-prices Simulate prices for a single billable event without ingesting it. # Create company Source: https://docs.hyperline.co/api-reference/endpoints/companies/create-company post /v1/companies Create a new company to which the authentication token will have access to. # Get companies Source: https://docs.hyperline.co/api-reference/endpoints/companies/get-companies get /v1/companies Retrieve all companies that the authentication token has access to. # Create promotion code Source: https://docs.hyperline.co/api-reference/endpoints/coupons->-promotion-codes/create-promotion-code post /v1/promotion-codes Create a new promotion code. # Delete promotion code Source: https://docs.hyperline.co/api-reference/endpoints/coupons->-promotion-codes/delete-promotion-code delete /v1/promotion-codes/{id} Delete an existing promotion code. # Get promotion code Source: https://docs.hyperline.co/api-reference/endpoints/coupons->-promotion-codes/get-promotion-code get /v1/promotion-codes/{id} Retrieve the details of an existing promotion code. # Get promotion codes Source: https://docs.hyperline.co/api-reference/endpoints/coupons->-promotion-codes/get-promotion-codes get /v1/promotion-codes Retrieve existing promotion codes. # Update promotion code Source: https://docs.hyperline.co/api-reference/endpoints/coupons->-promotion-codes/update-promotion-code patch /v1/promotion-codes/{id} Update the details of an existing promotion code. # Create coupon Source: https://docs.hyperline.co/api-reference/endpoints/coupons/create-coupon post /v1/coupons Create a new coupon. # Delete coupon Source: https://docs.hyperline.co/api-reference/endpoints/coupons/delete-coupon delete /v1/coupons/{id} Delete an existing coupon. # Get coupon Source: https://docs.hyperline.co/api-reference/endpoints/coupons/get-coupon get /v1/coupons/{id} Retrieve the details of an existing coupon. # Get coupons Source: https://docs.hyperline.co/api-reference/endpoints/coupons/get-coupons get /v1/coupons Retrieve existing coupons. # Update coupon Source: https://docs.hyperline.co/api-reference/endpoints/coupons/update-coupon put /v1/coupons/{id} Update the details of an existing coupon. # Create custom property Source: https://docs.hyperline.co/api-reference/endpoints/custom-properties/create-custom-property post /v1/custom-properties Create a new custom property. # Delete custom property Source: https://docs.hyperline.co/api-reference/endpoints/custom-properties/delete-custom-property delete /v1/custom-properties/{id} Delete an existing custom property. # Get custom properties Source: https://docs.hyperline.co/api-reference/endpoints/custom-properties/get-custom-properties get /v1/custom-properties Retrieve all custom properties previously created. # Update custom property Source: https://docs.hyperline.co/api-reference/endpoints/custom-properties/update-custom-property put /v1/custom-properties/{id} Update an existing custom property. # Create credit product Source: https://docs.hyperline.co/api-reference/endpoints/customers->-credits/create-credit-product post /v1/customers/{id}/credits Create a credit entity for a given product with an optional balance. # Create credits usage Source: https://docs.hyperline.co/api-reference/endpoints/customers->-credits/create-credits-usage post /v1/customers/{id}/credits/{productId}/usage Create a usage entry for a credit product. This will impact the balance of the customer by `usage_retained`. # Get all credit products Source: https://docs.hyperline.co/api-reference/endpoints/customers->-credits/get-all-credit-products get /v1/customers/credits Retrieve credit products for all customers. # Get credit product Source: https://docs.hyperline.co/api-reference/endpoints/customers->-credits/get-credit-product get /v1/customers/{id}/credits/{productId} Retrieve the details of an existing credit product for a customer. # Get credit products Source: https://docs.hyperline.co/api-reference/endpoints/customers->-credits/get-credit-products get /v1/customers/{id}/credits Retrieve credit products attached to a customer. # Get credit transactions Source: https://docs.hyperline.co/api-reference/endpoints/customers->-credits/get-credit-transactions get /v1/customers/{id}/credits/{productId}/transactions Retrieve all credit transactions associated with a credit product. # Purchase credits Source: https://docs.hyperline.co/api-reference/endpoints/customers->-credits/purchase-credits post /v1/customers/{id}/credits/{productId}/purchase Purchase a number of credits. This action will generate an invoice and charge the customer. # Topup credits Source: https://docs.hyperline.co/api-reference/endpoints/customers->-credits/topup-credits post /v1/customers/{id}/credits/{productId}/topup Topup a number of free credits. This action will not charge the customer. # Update credit product Source: https://docs.hyperline.co/api-reference/endpoints/customers->-credits/update-credit-product put /v1/customers/{id}/credits/{productId} Update the configuration of a customer's credit product. # Create payment method Source: https://docs.hyperline.co/api-reference/endpoints/customers->-payment-methods/create-payment-method post /v1/customers/{id}/payment-methods Import an existing customer payment method from a connected payment provider. # Delete payment method Source: https://docs.hyperline.co/api-reference/endpoints/customers->-payment-methods/delete-payment-method delete /v1/customers/{id}/payment-methods/{paymentMethodId} Delete an existing customer payment method. # Get payment method Source: https://docs.hyperline.co/api-reference/endpoints/customers->-payment-methods/get-payment-method get /v1/customers/{id}/payment-methods/{paymentMethodId} Retrieve the details of an existing customer payment method. # Get payment methods Source: https://docs.hyperline.co/api-reference/endpoints/customers->-payment-methods/get-payment-methods get /v1/customers/{id}/payment-methods Retrieve payment methods attached to a customer. # Archive customer Source: https://docs.hyperline.co/api-reference/endpoints/customers/archive-customer put /v1/customers/{id}/archive Archive an existing customer. # Bulk update providers/customers mapping Source: https://docs.hyperline.co/api-reference/endpoints/customers/bulk-update-providerscustomers-mapping post /v1/customers/providers-bulk-update Bulk update providers/customers mapping, make sure to check the query response to see if all customers were updated. # Create customer Source: https://docs.hyperline.co/api-reference/endpoints/customers/create-customer post /v1/customers Create a new customer. # Create customers batch Source: https://docs.hyperline.co/api-reference/endpoints/customers/create-customers-batch post /v1/customers/batch Create a batch of new customers. # Delete customer Source: https://docs.hyperline.co/api-reference/endpoints/customers/delete-customer delete /v1/customers/{id} Delete an existing customer. The customer must be archived prior to the deletion. # Get customer Source: https://docs.hyperline.co/api-reference/endpoints/customers/get-customer get /v1/customers/{id} Retrieve the details of an existing customer. # Get customer portal Source: https://docs.hyperline.co/api-reference/endpoints/customers/get-customer-portal get /v1/customers/{id}/portal Retrieve the URL of the customer portal. # Get customer tax rates Source: https://docs.hyperline.co/api-reference/endpoints/customers/get-customer-tax-rates get /v1/customers/{id}/taxes/rates Retrieve the eligible tax rates for a customer. # Get customers Source: https://docs.hyperline.co/api-reference/endpoints/customers/get-customers get /v1/customers Retrieve existing customers. # Unarchive customer Source: https://docs.hyperline.co/api-reference/endpoints/customers/unarchive-customer put /v1/customers/{id}/unarchive Unarchive an archived customer. # Update customer Source: https://docs.hyperline.co/api-reference/endpoints/customers/update-customer put /v1/customers/{id} Update the details of an existing customer. # Create export Source: https://docs.hyperline.co/api-reference/endpoints/exports/create-export post /v1/exports Prepare an export of a given type for download. You can check the export readiness status using the GET endpoint. Once the export is ready, download the export using the download endpoint. # Download export Source: https://docs.hyperline.co/api-reference/endpoints/exports/download-export get /v1/exports/{exportId}/download Download the file associated with a specific export. # Get export Source: https://docs.hyperline.co/api-reference/endpoints/exports/get-export get /v1/exports/{exportId} Retrieve the details of an existing export. # Create file Source: https://docs.hyperline.co/api-reference/endpoints/files/create-file post /v1/files Create a new file. # Delete file Source: https://docs.hyperline.co/api-reference/endpoints/files/delete-file delete /v1/files/{id} Delete an existing file. # Download file Source: https://docs.hyperline.co/api-reference/endpoints/files/download-file get /v1/files/{id}/download Download an existing file content. # Get files Source: https://docs.hyperline.co/api-reference/endpoints/files/get-files get /v1/files Retrieve existing files. # Create component token Source: https://docs.hyperline.co/api-reference/endpoints/integrations/create-component-token post /v1/integrations/components/token Create a new token for embedded components. # Create transaction Source: https://docs.hyperline.co/api-reference/endpoints/invoices->-transactions/create-transaction post /v1/invoices/{id}/transactions Create a transaction linked to an existing invoice. This may update the invoice status to paid/partially paid. # Delete transaction Source: https://docs.hyperline.co/api-reference/endpoints/invoices->-transactions/delete-transaction delete /v1/invoices/{id}/transactions/{transactionId} Delete a transaction linked to an existing invoice. Only applies to scheduled transaction. # Charge invoice Source: https://docs.hyperline.co/api-reference/endpoints/invoices/charge-invoice post /v1/invoices/{id}/charge Manually trigger the payment of the invoice. # Create credit note Source: https://docs.hyperline.co/api-reference/endpoints/invoices/create-credit-note post /v1/invoices/{id}/credit-notes Create a credit note for an existing invoice. # Create invoice Source: https://docs.hyperline.co/api-reference/endpoints/invoices/create-invoice post /v1/invoices Create a new invoice. # Create invoices Source: https://docs.hyperline.co/api-reference/endpoints/invoices/create-invoices post /v1/invoices/batch Create new invoices in batch (max 50 items). # Delete invoice Source: https://docs.hyperline.co/api-reference/endpoints/invoices/delete-invoice delete /v1/invoices/{id} Delete an invoice in `draft` status or imported from an external source. For other statuses, the `POST /v1/invoices/{id}/void` endpoint must be used. # Download invoice Source: https://docs.hyperline.co/api-reference/endpoints/invoices/download-invoice get /v1/invoices/{id}/download Download the PDF of an existing invoice. # Get invoice Source: https://docs.hyperline.co/api-reference/endpoints/invoices/get-invoice get /v1/invoices/{id} Retrieve the details of an existing invoice. # Get invoices Source: https://docs.hyperline.co/api-reference/endpoints/invoices/get-invoices get /v1/invoices Retrieve existing invoices. By default, invoices with status `open` are not included. # Mark as uncollectible Source: https://docs.hyperline.co/api-reference/endpoints/invoices/mark-as-uncollectible post /v1/invoices/{id}/uncollectible Mark an invoice as uncollectible, useful for keeping track of bad debts that can be written off for accounting purposes. # Update invoice Source: https://docs.hyperline.co/api-reference/endpoints/invoices/update-invoice patch /v1/invoices/{id} Update an invoice in draft or grace_period status. # Upload PDF to invoice Source: https://docs.hyperline.co/api-reference/endpoints/invoices/upload-pdf-to-invoice post /v1/invoices/{id}/upload Upload a PDF file to an existing invoice. # Validate draft invoice Source: https://docs.hyperline.co/api-reference/endpoints/invoices/validate-draft-invoice post /v1/invoices/{id}/validate Send a draft invoice for payment, set the status to `to_pay` and its number. This is not reversible. # Void invoice Source: https://docs.hyperline.co/api-reference/endpoints/invoices/void-invoice post /v1/invoices/{id}/void Void an invoice in a `to_pay` status. This action generates a corresponding credit note. # Create invoicing entity Source: https://docs.hyperline.co/api-reference/endpoints/invoicing-entities/create-invoicing-entity post /v1/invoicing-entities Create a new invoicing entity to send invoices from. # Delete invoicing entity Source: https://docs.hyperline.co/api-reference/endpoints/invoicing-entities/delete-invoicing-entity delete /v1/invoicing-entities/{id} Soft deletes an invoicing entity. This action won't delete the associated invoices. # Get invoicing entities Source: https://docs.hyperline.co/api-reference/endpoints/invoicing-entities/get-invoicing-entities get /v1/invoicing-entities Retrieve all invoicing entities for your current client. # Get invoicing entity Source: https://docs.hyperline.co/api-reference/endpoints/invoicing-entities/get-invoicing-entity get /v1/invoicing-entities/{id} Retrieve a specific invoicing entity. # Update invoicing entity Source: https://docs.hyperline.co/api-reference/endpoints/invoicing-entities/update-invoicing-entity put /v1/invoicing-entities/{id} Update an existing invoicing entity. # Authorize Source: https://docs.hyperline.co/api-reference/endpoints/oauth2/authorize get /v1/oauth/authorize Redirects the user to the Hyperline's login page, and grants authorization to your integration. # Generate tokens Source: https://docs.hyperline.co/api-reference/endpoints/oauth2/generate-tokens post /v1/oauth/tokens Exchange an auth code received at the authorize endpoint for an actual access token, or refresh it. # Get user info Source: https://docs.hyperline.co/api-reference/endpoints/oauth2/get-user-info get /v1/oauth/userinfo Returns the user information associated with an access token. # Revoke token Source: https://docs.hyperline.co/api-reference/endpoints/oauth2/revoke-token post /v1/oauth/revoke Revoke a refresh token. Once revoked the token can not be used anymore. # Get organisation Source: https://docs.hyperline.co/api-reference/endpoints/organisations/get-organisation get /v1/organisations/{id} Retrieve the details of an existing organisation. # Patch organisation Source: https://docs.hyperline.co/api-reference/endpoints/organisations/patch-organisation patch /v1/organisations/{id} Update the details of an existing organisation. # Create payment Source: https://docs.hyperline.co/api-reference/endpoints/payments/create-payment post /v1/payments Initiate a new payment (limited to one-time): generate an invoice and charge it directly or with a checkout session # Get plan Source: https://docs.hyperline.co/api-reference/endpoints/plans/get-plan get /v1/plans/{id} Plans are discontinued and progressively replaced by subscription templates. # Get plans Source: https://docs.hyperline.co/api-reference/endpoints/plans/get-plans get /v1/plans Plans are discontinued and progressively replaced by subscription templates. # Delete price configuration Source: https://docs.hyperline.co/api-reference/endpoints/price-configurations/delete-price-configuration delete /v1/price-configurations/{id} Delete an existing price configuration. # Get price configurations Source: https://docs.hyperline.co/api-reference/endpoints/price-configurations/get-price-configurations get /v1/price-configurations Retrieve existing price configurations. # Update prices Source: https://docs.hyperline.co/api-reference/endpoints/price-configurations/update-prices put /v1/price-configurations/{id}/prices Update prices of an existing price configuration. # Archive product Source: https://docs.hyperline.co/api-reference/endpoints/products/archive-product put /v1/products/{id}/archive Archive an existing product. # Create product Source: https://docs.hyperline.co/api-reference/endpoints/products/create-product post /v1/products Create a new product. # Get product Source: https://docs.hyperline.co/api-reference/endpoints/products/get-product get /v1/products/{id} Retrieve the details of an existing product. Only the first 50 price configurations are returned, to retrieve all of them use `GET /v1/price-configurations`. # Get products Source: https://docs.hyperline.co/api-reference/endpoints/products/get-products get /v1/products Retrieve existing products. # Unarchive product Source: https://docs.hyperline.co/api-reference/endpoints/products/unarchive-product put /v1/products/{id}/unarchive Unarchive an archived product. # Update product Source: https://docs.hyperline.co/api-reference/endpoints/products/update-product put /v1/products/{id} Update the details of an existing product. # Approve quote Source: https://docs.hyperline.co/api-reference/endpoints/quotes/approve-quote post /v1/quotes/{id}/approve Approve an existing quote (acting as the account owner). # Create quote Source: https://docs.hyperline.co/api-reference/endpoints/quotes/create-quote post /v1/quotes Create a new quote. # Download quote Source: https://docs.hyperline.co/api-reference/endpoints/quotes/download-quote get /v1/quotes/{id}/download Download an existing quote. # Download quote file Source: https://docs.hyperline.co/api-reference/endpoints/quotes/download-quote-file get /v1/quotes/{quoteId}/files/{id}/download Download a file (attachment or manually signed file) attached to an existing quote. # Get quote Source: https://docs.hyperline.co/api-reference/endpoints/quotes/get-quote get /v1/quotes/{id} Retrieve the details of an existing quote. # Get quotes Source: https://docs.hyperline.co/api-reference/endpoints/quotes/get-quotes get /v1/quotes Retrieve existing quotes. # Send quote Source: https://docs.hyperline.co/api-reference/endpoints/quotes/send-quote post /v1/quotes/{id}/send Send an existing quote by email for signature. # Sign quote Source: https://docs.hyperline.co/api-reference/endpoints/quotes/sign-quote post /v1/quotes/{id}/sign Manually mark the quote as signed externally. Built-in Hyperline signature flow won't be used. # Void quote Source: https://docs.hyperline.co/api-reference/endpoints/quotes/void-quote post /v1/quotes/{id}/void Void an existing quote. # Get subscription template Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions->-templates/get-subscription-template get /v1/subscriptions/templates/{id} Retrieve an existing subscription template with its configurations details. # Get subscription templates Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions->-templates/get-subscription-templates get /v1/subscriptions/templates Retrieve existing subscription templates. # Activate subscription Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/activate-subscription post /v1/subscriptions/{id}/activate Manually start a subscription for the first time. # Cancel subscription Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/cancel-subscription post /v1/subscriptions/{id}/cancel Cancel an existing subscription. # Create subscription Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/create-subscription post /v2/subscriptions Create a new subscription from a plan or manually with products. # Create subscription update Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/create-subscription-update post /v1/subscriptions/{id}/update Create an update to apply on an existing subscription. # Create subscription updates Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/create-subscription-updates post /v1/subscriptions/{id}/update-many Create multiple updates to apply at once to an existing subscription. # Get subscription Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/get-subscription get /v2/subscriptions/{id} Retrieve the details of an existing subscription. # Get subscription phase Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/get-subscription-phase get /v2/subscriptions/{id}/phases/{phaseId} Retrieve the details of a phase for an existing subscription. # Get subscription phases Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/get-subscription-phases get /v2/subscriptions/{id}/phases Retrieve the details of the phases for an existing subscription. # Get subscriptions Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/get-subscriptions get /v2/subscriptions Retrieve existing subscriptions. By default, draft, voided, and cancelled subscriptions are not included. # Pause subscription Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/pause-subscription post /v1/subscriptions/{id}/pause Pause a subscription. # Reactivate subscription Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/reactivate-subscription post /v1/subscriptions/{id}/reactivate Reactivate a paused subscription. # Refresh seat products Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/refresh-seat-products post /v2/subscriptions/{id}/refresh-seat-products Triggers 'count' updates on connected seat products within the subscription. This action will use the dataloader query to retrieve and update the number of units for each seat product. # Refresh subscriptions Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/refresh-subscriptions post /v1/subscriptions/refresh Triggers refresh of subscriptions usage data and related open invoices. This action is used when the automatic billing update upon ingestion option is disabled for the account. # Reinstate subscription Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/reinstate-subscription post /v1/subscriptions/{id}/reinstate Reinstate an existing subscription scheduled for cancellation. # Renew subscription Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/renew-subscription post /v1/subscriptions/{id}/renew This action will move the subscription into the future up to a specific date (exclusive), as if the renewals had occurred. As a result, the corresponding future invoices will be generated. If the subscription is currently pending, this action will activate it. A limit of 36 renewals applies. # Simulate subscription updates Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/simulate-subscription-updates post /v1/subscriptions/{id}/simulate-updates Simulate the effect of updates on a subscription without actually applying them. # Transition subscription to next phase Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/transition-subscription-to-next-phase post /v2/subscriptions/{id}/next-phase Update a subscription and transition it to the next available phase. # Update subscription Source: https://docs.hyperline.co/api-reference/endpoints/subscriptions/update-subscription put /v2/subscriptions/{id} Update configuration of a subscription including phases and products. # Get tax rate Source: https://docs.hyperline.co/api-reference/endpoints/taxes/get-tax-rate get /v1/taxes/rates/{id} Retrieve the details of an existing custom tax rate. # Get tax rates Source: https://docs.hyperline.co/api-reference/endpoints/taxes/get-tax-rates get /v1/taxes/rates Retrieve existing custom tax rates. # Create app Source: https://docs.hyperline.co/api-reference/endpoints/third-party-apps/create-app post /v1/apps Create a new third-party app. # Delete app Source: https://docs.hyperline.co/api-reference/endpoints/third-party-apps/delete-app delete /v1/apps/{id} Delete an existing third-party app. # Get apps Source: https://docs.hyperline.co/api-reference/endpoints/third-party-apps/get-apps get /v1/apps Retrieve existing third-party apps. # Update app Source: https://docs.hyperline.co/api-reference/endpoints/third-party-apps/update-app put /v1/apps/{id} Update an existing third-party app. # Create wallet Source: https://docs.hyperline.co/api-reference/endpoints/wallets/create-wallet post /v1/wallets Create a new wallet. # Get wallet Source: https://docs.hyperline.co/api-reference/endpoints/wallets/get-wallet get /v1/wallets/{id} Retrieve the details of an existing wallet. # Get wallet settings Source: https://docs.hyperline.co/api-reference/endpoints/wallets/get-wallet-settings get /v1/wallets/settings Retrieve the global settings of the wallets. # Get wallet transactions Source: https://docs.hyperline.co/api-reference/endpoints/wallets/get-wallet-transactions get /v1/wallets/{id}/transactions Retrieve all transactions of an existing wallet. # Get wallets Source: https://docs.hyperline.co/api-reference/endpoints/wallets/get-wallets get /v1/wallets Retrieve existing wallets. # Load wallet Source: https://docs.hyperline.co/api-reference/endpoints/wallets/load-wallet post /v1/wallets/{id}/load Load credits on an existing wallet. The related customer must have an active payment method. # Update wallet Source: https://docs.hyperline.co/api-reference/endpoints/wallets/update-wallet put /v1/wallets/{id} Update the details of an existing wallet. # Update wallet settings Source: https://docs.hyperline.co/api-reference/endpoints/wallets/update-wallet-settings patch /v1/wallets/settings Update the global settings of the wallets. # Create webhook endpoint Source: https://docs.hyperline.co/api-reference/endpoints/webhooks/create-webhook-endpoint post /v1/webhooks/endpoints Create a new webhook endpoint. # Delete webhook endpoint Source: https://docs.hyperline.co/api-reference/endpoints/webhooks/delete-webhook-endpoint delete /v1/webhooks/endpoints/{id} Delete an existing webhook endpoint. # Get webhook endpoint Source: https://docs.hyperline.co/api-reference/endpoints/webhooks/get-webhook-endpoint get /v1/webhooks/endpoints/{id} Retrieve an existing webhook endpoint. # Get webhook endpoints Source: https://docs.hyperline.co/api-reference/endpoints/webhooks/get-webhook-endpoints get /v1/webhooks/endpoints Retrieve all webhook endpoints. # Get webhook messages Source: https://docs.hyperline.co/api-reference/endpoints/webhooks/get-webhook-messages get /v1/webhooks/messages Retrieve all webhook messages sent. Please note that, by default, this endpoint is limited to retrieving 90 days' worth of data relative to now. Messages that date back more than 90 days are still accessible, but their payloads are expunged. If an iterator is provided, the endpoint retrieves data spanning 90 days before/after the time indicated by the iterator ID. If you require data beyond those time ranges, you will need to explicitly set the before or after parameter as appropriate. # Update webhook endpoint Source: https://docs.hyperline.co/api-reference/endpoints/webhooks/update-webhook-endpoint put /v1/webhooks/endpoints/{id} Update an existing webhook endpoint. # Product updates June, 2025 Source: https://docs.hyperline.co/changelog/2025-06 ## Multi-Factor Authentication (MFA) Hyperline now supports advanced authentication via Multi-Factor Authentication (MFA or 2FA) for our enterprise clients. Supported methods include one-time passwords (OTP), one-time codes via email, and biometric authentication (e.g., Touch ID or passkeys). Once MFA is activated, it will be enforced for all account members at their next login. If a user belongs to multiple accounts, MFA will be required for each. ## Update subscription phases Subscription future phases can now be updated. Additionally, you can add new phases or remove existing ones. This allows you to plan contract changes in advance, such as pricing updates or multi-year configurations. ## Record cancellation reason You can now record the reason for cancelling a subscription. This will be displayed in the subscription details page and accessible from the API. ## New bundle pricing model The bundle pricing model is now available for seat-based products. This allows you to configure predefined bundles with specific quantity/price combinations, making only those options available when creating new quotes and subscriptions. ## Edit footer invoice In addition to the global invoice legal/additional information global settings, you can now edit these footer sections of each invoice directly in the invoice editor. This allows for advanced invoice customization to meet ad-hoc needs. ## Switch between B2C or B2B on public pages Public pages (customer portal, checkout, and quote pages) now allow your customers to select between B2C (person) and B2B (corporate) typologies. This selection will determine the required form fields during these flows, and categorize more accurately the customers in Hyperline. ## ChorusPro auto-transmission As part of e-invoicing regulations, Hyperline now supports the automatic transmission of invoices to ChorusPro for Business-to-Government (B2G) customers. Until now, only PDF/XML file generation was available — this new capability removes the need for any manual action on the ChorusPro side by finance teams. # Product updates July, 2025 Source: https://docs.hyperline.co/changelog/2025-07 ## Apple Pay / Google Pay Hyperline now supports Apple Pay and Google Pay, enabling frictionless payments and removing the need to manually enter card details. With these methods, customers can also save their card for future use. The payment flow works the same as with credit or debit cards. ## More filters We've added new filters on list pages: * Customers can now be filtered by integration. * Invoices can now be filtered by plan and integration. * Subscriptions can now be filtered by product and coupon. ## Manage customer files via the API You can now list, create, delete, and download customer files through the API. This allows you to programmatically manage files and build advanced use cases for your product on top of Hyperline. ## Custom quote file names The name of a downloaded quote file can now be customized for your account. ## Import external payment methods Payment methods collected outside of Hyperline (for example, via an embedded PSP form in your product) can now be imported into Hyperline using the API. # Product updates August, 2025 Source: https://docs.hyperline.co/changelog/2025-08 ## Edit subscription phases You can now add, edit, and delete subscription phases for active subscriptions directly from the subscription update page. This makes it easier to customize phases to better align with each customer or contract's future needs. ## Prefill quantity from plan Plans with seat-based products can now include a preconfigured quantity. When the plan is used to create a subscription, the quantity will be automatically prefilled—no manual input required. ## Preview invoices and quotes We improved the PDF preview of invoices and quotes by clearly highlighting the displayed language. You can now easily switch between the account language (legal) and the customer's language with a single click when both are different. ## Product order in subscriptions The order of products in a subscription can now be adjusted during creation. Simply move products up or down to control the display order, which will be reflected in related quotes and invoices. ## ChartMogul integration [ChartMogul](https://www.chartmogul.com?utm_source=hyperline) now natively supports Hyperline. Benefit from all ChartMogul capabilities to analyze your subscription revenue from your Hyperline data. ## Schedule subscription changes It's now possible to schedule subscription changes for a specific date using the API. This allows you to programmatically plan updates in advance and build more advanced subscription flows. ## Support for Stripe Link Hyperline now supports Stripe Link, a Stripe-specific payment method that can be automatically imported and used to process invoice charges in Hyperline. # Product updates September, 2025 Source: https://docs.hyperline.co/changelog/2025-09 ## Subscription templates We are progressively rolling out a subscription templates module, introducing a new way to preconfigure subscriptions with their full set of options and capabilities. Similar to plans, they allow subscriptions to be assigned in a single click and can be used in quote templates. The key difference from plans is that all subscription options available in the subscription assignment flow are included in these templates (phases, contracts, advanced options, etc.), removing existing limitations and moving toward a broader concept of templates. Plans will be gradually discontinued. *Contact our support if you are interested.* ## Auto top-up on credits Customer credit balances can now be automatically topped up, either from an existing catalog price or a custom one. These options are available both in the UI and via the API. ## Relative duration on coupons Coupons within subscriptions can now be configured with a relative duration (e.g., 6 months). You can now set them to apply once, for a fixed duration, or for the entire phase or subscription period. ## Custom quote name Clients can now customize the quote name on the document — for example, renaming “Quote” to “Contract” or removing the quote number displayed. The configuration of this name is available in all supported languages. ## Uncollectible invoice Invoices can now be marked as uncollectible, allowing you to track bad debts that may be written off for accounting purposes. An uncollectible invoice can still be paid by the customer (it remains “to pay”). ## Non-recurring subscriptions Hyperline subscriptions can now contain one-time products only, allowing you to represent customer contracts and terms, or include only credit-based products — all without recurring usage. ## Transition options on quote update When configuring a quote for a subscription update, you now have different options to transition from the current configuration to the new one: * Direct: a new billing cycle starts when the quote is signed, with no transition invoice (no refund from the previous phase and no prorated charge for the new phase). * Pro-rata: the default behavior until now — billing cycles are preserved when possible, and a transition invoice with prorations is issued at quote signature. This remains the default behavior. ## Transaction synchronization with accounting software When using an integration with accounting software, you now have the flexibility to configure the synchronization direction between Hyperline and your accounting system. ## UI updates We've rolled out several UI improvements: * Added a secondary navigation bar for each product category * Moved audit pages to the main navigation * Added filters to the products page * Updated status iconography for quotes, invoices, and transactions # Product updates October, 2025 Source: https://docs.hyperline.co/changelog/2025-10 ## Transactions page We added a brand-new page in Hyperline to track transactions at the account level. This page lists all transactions that occurred in your account, including payments and refunds, providing a clear overview of your cash activity. Filters and export options are also available. ## Subscription versions We introduced subscription versions to help you track changes to your subscriptions over time. Each time a subscription is updated, a new version is created, allowing you to view the full history of changes made to that subscription. ## Accounting integrations observability We improved the observability of our accounting integrations by adding detailed logs in case of issues. This helps you clearly monitor syncs and quickly identify and resolve any problems that may arise. ## Edit current subscription phase Just like with future phases, you can now edit the current phase of a subscription. ## E-invoicing Spain and Belgium Automated e-invoicing transmission is now available for Spain and Belgium. We now send your invoices directly to the tax authorities in these countries, ensuring compliance with local regulations. ## Coupons improvements We made several improvements to the coupons feature. Coupons can now be applied with a relative duration (e.g., for 3 months), and you can choose which line items the coupon applies to when creating or editing an invoice in the visual editor. Additionally, you can now create invoices with coupons using the API. ## Bank account error We now send an email to the “Email for technical alerts” address (configured in the email settings) when a connected bank account cannot be refreshed. This proactive notification helps you reconnect your account promptly and ensure invoice reconciliation continues to work seamlessly. ## Update on parent invoices From now on, in the context of organization-based billing, when a parent invoice includes products from a child customer, the child customer's name will be added as a prefix to the corresponding product (e.g., ChildCustomerA - Pro Subscription). # Product updates November, 2025 Source: https://docs.hyperline.co/changelog/2025-11 ## Insights Hyperline now offers a full Insights module that provides a comprehensive overview of your financial and revenue metrics. The **Financial page** includes cash-flow visibility, MRR and debt evolution, aged balances, and complete breakdowns of your revenue and accounts receivable, as well as detailed MRR analytics including new, expansion, contraction, lost, and net changes. The **Revenue page** provides in-depth insights into your revenue streams, including breakdowns by product, currency, and customer. *This module is in beta. Contact our support if you are interested.* ## Attio integration Hyperline now natively supports [Attio](https://www.attio.com?utm_source=hyperline) CRM. The Hyperline Attio app enables you to create custom quotes or manage subscriptions directly from your Attio deals or companies using pre-built actions. Additionally, the integration can automatically sync your Hyperline quotes, subscriptions, and invoices into Attio as custom objects. [More details in the documentation](../integrations/attio) ## Reconcile from bank statements Automated invoice reconciliation from bank accounts has long been available in Hyperline, including the ability to validate matches from each invoice. Hyperline now also supports reconciliation from bank statements. From a dedicated transactions page listing inbound transactions from your connected bank accounts, you can now reconcile invoices with granular manual control and have a overview of all your connected bank accounts balance. ## Quote countersigner A quote countersigner can now be configured in the settings (first name, last name, and email). When a quote is signed by your customer, if a countersigner is configured, we automatically countersign the quote (i.e. apply an additional signature) before finalising the full quote signature. ## Exports API You can now [trigger and download exports](../api-reference/endpoints/exports/create-export) of pre-built Hyperline reports (including aged balances, revenue per product/line item/country, line-by-line revenue, etc.) directly from the API. This enables you to automate data extraction from Hyperline for use in your own systems or for further analysis. In addition, [customers](../api-reference/endpoints/customers/get-customers), [invoices](../api-reference/endpoints/invoices/get-invoices), [subscriptions](../api-reference/endpoints/subscriptions/get-subscriptions), and [quotes](../api-reference/endpoints/quotes/get-quotes) can also be exported via the API using the list endpoints with advanced filtering options. ## Custom subscription ARR and contract value Hyperline provides automatic calculation of Annual Recurring Revenue (ARR) and contract value for subscriptions out of the box, based on their pricing and billing cycles. However, there are scenarios where you may want to override these automatic calculations. Hyperline now allows you to set custom values for both ARR and contract value on a per-subscription basis, in addition to displaying them in the subscription overview. ## Update subscriptions We've begun rolling out new flows for updating existing subscriptions, offering both simpler and more advanced options. You can now update a subscription using an existing template (or plan) or edit subscription details with enhanced versioning support. This change is the first step in a broader revamp of our subscription update flows, aimed at making them more flexible and easier to use — including the ability to schedule changes in advance and preview their impact on upcoming invoices. ## Advanced Exact Online settings In Exact Online, a yearly invoice spanning 13 calendar months (e.g., 2025-11-19 to 2026-11-18) is recognized over 13 months instead of 12, resulting in incorrect monthly revenue recognition. Hyperline now supports an advanced setting to adjust this behavior. When this setting is enabled, the invoice period end date for yearly invoices is adjusted (e.g., to 2026-10-31 instead of 2026-11-18) so that revenue is recognized over 12 months. # Dashboard Source: https://docs.hyperline.co/docs/analytics/dashboard The dashboard is the first interface you see when logging in to your Hyperline account. It will give you a quick, effective overview of your business and hints on actions needed to recover money faster. It welcomes you with the amount collected this week with the number of invoices involved. The data displayed on the dashboard is updated every day at midnight UTC. ## Business metrics This section provides key financial insights at a glance, helping you monitor revenue performance, debt, and cash flow. This information can be filtered by currency, invoicing entity, and date range. ### ARR Annual Recurring Revenue (ARR) represents the total annualized revenue a SaaS company expects to generate from active subscriptions over a year. It provides a long-term view of predictable revenue and helps track revenue growth trends. * Coupons with a "once" application are excluded * Coupons with a "forever" application schedule are included * Coupons with a duration less than the subscription period are excluded * Taxes (e.g., VAT) are excluded from the calculations The number of customers reflects the total active subscribers contributing to ARR, while ARPA (Average Revenue Per Account) represents the average revenue per customer, calculated as ARR ÷ number of customers. ### Outstanding debt Outstanding debt represents the total amount of unpaid invoices, helping businesses track overdue and pending revenue. It is categorized into three components: * Pending: Invoices that are issued but still within the payment term. * Late: Invoices that are past their due date. * Error: Invoices where payment methods could not be charged after retries. Monitoring outstanding debt allows businesses to stay on top of collections, reduce late payments, and address potential billing issues. ### Cashflow This metric tracks the total revenue collected month over month, providing visibility into financial inflows. It helps assess liquidity, revenue trends, and payment patterns. * Recurring revenue: Revenue collected from subscriptions, representing predictable, ongoing revenue. * One-off revenue: Revenue collected from one-time payments and manual invoices. ### Additional metrics These metrics provide insights into upcoming renewals, pending deals, tax collections, and billing issues. For each of these metrics, you can explore the detailed elements by clicking on the `eye` button. * **Contracts renewing soon** represent the contracts attached to subscriptions automatically renewing in the next 30 days. * **Quotes pending signature** indicate potential revenue that has yet to be confirmed. * **Taxes collected** represent the total amount of tax collected from invoices, providing visibility into tax obligations. * **Errored invoices** highlight invoices that failed due to payment errors, highlighting potential revenue at risk that may require action. ## Billing insights Tracking unpaid balances helps businesses prioritize revenue collection, while renewal monitoring ensures revenue continuity. Together, these insights improve cash flow stability and financial management. ### Top 5 balances due Highlights the five customers with the highest outstanding debt, allowing you to quickly identify and follow up on overdue payments. For each customer, this section displays the total unpaid balance and the number of invoices involved. ### Contracts renewing soon This section highlights upcoming subscription renewals, helping businesses anticipate revenue retention and manage customer relationships proactively. For each contract, it displays the customer name, the contract value, whether it renews automatically, and the renewal date. # Reports Source: https://docs.hyperline.co/docs/analytics/reports Hyperline offers a complete set of pre-built report files, where you can get a clear view of company performance. This will be able to explore a comprehensive range of analysis designed to empower finance teams in making informed decisions or do deeper analysis into their preferred external tools. The reports are accessible through the dedicated Reports page within the Hyperline platform. ## Available reports Hyperline offers a curated selection of reports (as depicted in the screenshot above), important for assessing various aspects of your company's financial health, all of which are downloadable as CSV files for convenient access to the data you need at any time. # Coupons Source: https://docs.hyperline.co/docs/coupons/overview Learn about creating and applying coupons in Hyperline ## Coupons definition Coupons in Hyperline are a way to offer discounts to your customers. Coupons can be offered as a fixed amount or a percentage of a given price. Coupons can only be applied when [assigning a subscription](../subscriptions/create). They are a way to offer a discount on a subscription amount and will be applied to the subscription invoice right away. To offer discounts to your customers out of the context of a subscription (one-time payments), you can top-up their wallet for free. Learn how to [top-up a wallet](../wallets/top-up). ## How to create coupons To create a new coupon, go to the **Coupons** section and click on **+ New coupon.** Then fill-up the following information: * **Name**: the coupon's name (try to use simple, clear names) * **Description**: the description is for internal use only and is not required to create a coupon * Choose if you want to create a **fixed amount or a percentage** discount * Choose **the amount or the value** of the coupon * **Redemption deadline**: set up a deadline if you want your coupon to become invalid after a specific date * **Redemption limit**: set up a limit if you want your coupon to be used only a specific amount of times Click on **Create new coupon** once you are done. Your new coupon will appear instantly. ## Apply coupons Once you created coupons, you can apply them to customers. To do so, go to **Customer,** then to **Subscription**, and click on **Assign new subscription.** In the process, you can add coupons. Visit our page [assign a subscription](../subscriptions/create) to learn more about this process. # Set-up credits on your account Source: https://docs.hyperline.co/docs/credits/overview Learn how to set-up customer credit ledgers Hyperline offers a way to represent credits for each of your customers and provides a dedicated credit product type for this. It can represent any granted quota relevant to your business. This allows you to easily implement a pre-built ledger, enabling your customers to pay upfront, consume, and purchase new credits as needed. **Prerequisite** To configure credits, you will need to have connected events first so usage data can be detected. ## Create a credit product To get started with credits, you should create a credit product first in your catalog, where you will specify the events that rule the consumption. Usage of credits will be deducted automatically accordingly. You can set a limit to warn of a low balance and set-up which event will consume credits on the customer's balance. For credits, the pricing type is bundle pricing, a given price for a number of credits. You can also choose to display different purchase options on the customer's portal. ## Set up credits on a customer Once your credit product is set up, you can enable a credit balance on your customer and link their credit usage immediately. Note that this can also be done via the API. Here, you can also change the name, choose the starting balance, and set the credit warning limit. This won't override the values previously set in your product catalog, but will be specific to the customer. Once the balance is created, you will be able to see the most recent consumption by your customer. Additionally, you can manually top up or retain usage via the interface if desired. ## Add credit products in plan and subscription Credit products created in the product catalog can be added to predefined billing plans and subscriptions like any other product. Options for this product can also be changed at the customer/subscription level, allowing full customization without altering your catalog configuration. # Create customer Source: https://docs.hyperline.co/docs/customers/create We call customers the individuals or companies buying products and/or subscribed to you. We recommend that you create a customer in Hyperline as soon as someone registers for your product. If you have a payment provider connected, we'll make sure to automatically create the customers there for you when necessary. Click on **New Customer** Click on **Save customer** If you don't have all the information now, you can still create the customer and come back later to edit its details. Only a name is required at this step, but we recommend filling in at least the currency and country of the customer. It will appear right away in your customer list (under the `All` filter). You can click on your customer's name from the previous screen to access their information. From this page, you get an overview of your customer's information on the left of the screen, and you can navigate through their [subscriptions](../subscriptions/manage), [wallet](../wallets/overview), [invoices](../invoices/overview) and events on the right. ## Edit customer information Customer information can be updated at any time by clicking on Edit in the actions dropdown. Once the customer has a wallet with funds or an active payment method, the **currency** cannot be changed. In order to change it, you can remove the payment method and delete the wallet. If this is not possible, contact support. ## Addresses You can add multiple addresses to a customer. These addresses will be available for use in quotes, invoices, and other documents. By default, the billing address is used as the shipping address. If you need to use a different address for shipping, you can click on the **Edit** button in the customer details page. When enabled, your customer will be able to edit the shipping address on the customer portal page. Shipping details can also be displayed in the customer's quotes and invoices. # Customer exports Source: https://docs.hyperline.co/docs/customers/exports Learn how to export your customers If you wish to export your customer data for external analysis, Hyperline provides you with built-in file export within the Customers section. ## Export flow After clicking the export button, your customer data will be compiled into a CSV file. Download the file to access a complete export, including customer details, their number of active subscriptions, estimated ARR, and more. # Organisation-based billing Source: https://docs.hyperline.co/docs/customers/organisation-based Learn how to bill customers together Sometimes you need to bill a group of customers on a single entity without sacrificing the details of each independent account and subscription. The organisation-based billing feature is available directly from the customer page, where you can attach a customer to another. ## Activate organisation-based billing Here, you can see the parent/children relationship and the invoicing configuration for this customer. By clicking "Set parent organisation", you'll be able to choose a parent organisation for this customer. You'll be prompted to choose a parent organisation and then to select an invoicing configuration. 3 options are available at this stage. * `Individual invoices` will move every invoice for the current customer to the parent and invoice it under the parent configuration while keeping the content identical. * `Grouped` will set the current customers invoices as pending and concatenate them regularly with other children from the parent. Concatenated invoices will display one line item per children invoice with the original line items listed in description. * `No change` will attach the child to the parent but will not change any invoicing parameter. If you have chosen `Grouped` for the child invoicing configuration, you'll need to set the grouping schedule on the parent. To do this, go to the parent customer page, click on the dots next to "Org. based billing" and select "Children settings". You'll be able to select a schedule (monthly, quarterly or yearly) and the next invoicing date. From there everything will be automated, but you can adjust the next invoicing date at any time. When going to the parent, you will see all the children and the related settings. A callout will appear on the invoicing section of the children to inform you that the invoices are being billed to the parent. ## Precisions on organisation-based billing **Payment methods** If a customer is billed through a parent, Hyperline will use the parent payment method configuration to process the payment. So for instance if the child customer is connected to Stripe and has a credit card on file, we won't use it. **See child invoices** When an invoice from a child is reported to a parent, Hyperline keeps a document specific to the children to make tracking and audits easier. These documents have the status `Charged on parent` and are kept in the child "Invoices" tab. If a child invoice is pending a parent grouped invoicing, it will have the status `Pending parent concat`. **Remove a child company from its parent** In the modal where you linked the child company to its parent, a red button has appeared. If you click on this button, the child company will be removed from the parent and any future invoice will stay on the child. Invoices with the status `Pending parent concat` will move back to the child to get processed. # Public customer portal Source: https://docs.hyperline.co/docs/customers/portal Learn about the hosted customer portal page ## Overview Hyperline offers a customer portal where your customers can get access to their live subscription, payment methods, billing information and invoices. Our objective is to ensure a transparent and well-organized billing summary to offer to your own customers. As well as displaying information correctly, this portal offers a number of action options for your customers: #### Portal language The language will be displayed following these rules: * If the customer's browser language is part of our 9 supported languages (English, French, German, Italian, Spanish, Polish, Portuguese and Dutch), it will be displayed in the language. * If it is not part of the supported languages, we will default on the customer language selected on Hyperline customer information. By default, this language is inferred based on the customer's country. #### View subscription details Customers can access the full details of their subscription by clicking on 'Subscription details' on the portal. This sub-page will display the content of the next invoice that will be billed, as well as the detailed price structure of every product. #### Change payment method To do that, they just have to click on the trash button next to their payment and add the new payment method they want to use. #### Top-up wallet You can make your customers autonomous by offering them to top-up their wallet in the portal. For this, make sure you enable the option on the wallet settings first. Clicking on Top-up wallet on this screen will trigger an immediate payment from the registered credit card and credit the wallets instantly. #### Edit billing information To make changes, they simply need to click on the "Edit" option. This grants them the ability to update and modify their billing details as needed, ensuring accuracy and up-to-date information for a seamless payment process. #### Download invoices All invoices are listed and can be open to their dedicated [invoice page](../invoices/invoice-page). Customer can download their invoice PDF using the 'Download' button on the top-right corner. ## How to access the customer portal To view the portal for a specific customer: go to the customer page, select the customer you want to view then click on the 'Portal' button. You can easily provide your customers with this unique portal link. Each customer portal link is individually generated and secured through a unique ID. ## Customize the portal ### Colors & brand identity The portal adopts the primary brand color and icon that have been configured in the 'Settings' section under the 'General' tab of Hyperline. This uses the same codes as those displayed on the invoice sent to your customers. This feature enables you to personalize your customer portal with the distinct colors and branding of your company ### Set a custom domain In order to personalize further the experience for your customers, you can configure a custom domain for the hosted portal and checkout pages. You can set it in [your settings](https://app.hyperline.co/app/settings/hosted-pages), and to enable it you need to add a `CNAME` record pointing to `cname.hyperline.co` on your DNS provider. For example: you want to set your custom domain to `billing.alpeak.com` in Hyperline, and add the related `CNAME` record on your DNS provider, we will provide you portal and checkout URLs with the form: ``` https://billing.alpeak.com/portal/:customerId https://billing.alpeak.com/checkout/:sessionId ``` We will automatically manage the related HTTPS SSL certificate. ### Set a redirect button You can configure a back button in the hosted pages settings. And it will looks like this in the portal ### Display personalization You can add this query parameters in you portal URL to hide the sidebar `&hideSidebar=true`, it will looks like: It works both for custom domain and hyperline hosted pages. ### Embed the customer portal in an iframe You can embed the Hyperline customer portal inside your application using an `