Kalo te dokumentacioni
C#

client.Billing

Çdo metodë në këtë hapësirë emrash: nënshkrimi, parametrat, çfarë kthen dhe një shembull.

Metodat

The plan of the workspace and what it costs, as Plans & Billing shows them: the plan and its usage, the plans on sale, pay as you go, every charge with its invoice, and the links that start a checkout or open the billing portal. Only the workspace owner reaches it, and nothing is paid through the API.

Billing.GetAsync

Read the plan

Lejetbilling:read
Nënshkrimi
Task<JsonObject> GetAsync(string? apiKey = null, CancellationToken cancellationToken = default)

Returns the plan of the workspace and what it includes, as Plans & Billing shows it: how it is billed, when it renews or ends and the next charge, how many domains it holds, how much of this month's sends and today's AI actions are used, and pay as you go. metered is false when billing is off on the install, and then nothing is capped.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with plan, planName, interval, renewsAt, nextCharge, domains, usage and payAsYouGo.

Shembull

var billing = await client.Billing.GetAsync();var sends = billing["usage"]?["sends"]; Console.WriteLine($"{billing["planName"]}: {sends?["used"]} of {sends?["limit"]?.ToString() ?? "unlimited"} sends this month");

Shënime

  • A limit of null means the plan has none.

E disponueshme edhe në

API
GET /billing
TypeScript
billing.get()
Python
billing.get()
Ruby
billing.get
PHP
billing->get
Go
Billing.Get
Java
billing().get
CLI
openemail billing get

Billing.ListPlansAsync

List the plans

Lejetbilling:read
Nënshkrimi
Task<JsonObject> ListPlansAsync(    string? apiKey = null,    CancellationToken cancellationToken = default)

Returns every plan, cheapest first, with its price in US cents and what it includes. available says whether it is sold on the install, and intervals the billing intervals it is sold at.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with data, a list with one object per plan.

Shembull

var plans = await client.Billing.ListPlansAsync(); Console.WriteLine(plans.ToJsonString());

E disponueshme edhe në

API
GET /billing/plans
TypeScript
billing.listPlans()
Python
billing.list_plans()
Ruby
billing.list_plans
PHP
billing->listPlans
Go
Billing.ListPlans
Java
billing().listPlans
CLI
openemail billing list-plans

Billing.GetUsageAsync

Read the usage history

Lejetbilling:read
Nënshkrimi
Task<JsonObject> GetUsageAsync(    string? days = null,    string? apiKey = null,    CancellationToken cancellationToken = default)

Returns the sends and AI actions of each day, and what pay as you go extras cost each month, as the Usage charts show them.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

daysstring?

How many days back to go, from 1 to 3,660, or all (BillingUsageWindows.All) for every day since the workspace was made. The server defaults to 30.

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with days, months, dailyAiActions and monthlySends.

Shembull

var usage = await client.Billing.GetUsageAsync(days: "90"); Console.WriteLine($"{(usage["days"]?.AsArray() ?? []).Sum(row => (long?)row?["sends"] ?? 0)} sends in the last 90 days"); foreach (var month in usage["months"]?.AsArray() ?? []){    Console.WriteLine($"{month?["month"]}: {month?["cents"]} cents of extras");}

E disponueshme edhe në

API
GET /billing/usage
TypeScript
billing.getUsage()
Python
billing.get_usage()
Ruby
billing.get_usage
PHP
billing->getUsage
Go
Billing.GetUsage
Java
billing().getUsage
CLI
openemail billing get-usage

Billing.ListAlertsAsync

List the billing alerts

Lejetbilling:read
Nënshkrimi
Task<JsonObject> ListAlertsAsync(    string? apiKey = null,    CancellationToken cancellationToken = default)

Returns what the billing banner of the app would say now, most urgent first: a failed payment, paused pay as you go, sending or AI paused at a limit, a plan about to end, an allowance nearly used and a charge coming soon. An empty list means there is nothing to say.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with data, a list with one object per alert.

Shembull

using OpenEmail.Constants; var alerts = await client.Billing.ListAlertsAsync(); foreach (var alert in alerts["data"]?.AsArray() ?? []){    if ((string?)alert?["severity"] == BillingAlertSeverities.Blocked)    {        Console.WriteLine($"Blocked: {alert?["kind"]}");    }}

Shënime

  • An alert keeps its id while the same thing is true, so one that was dismissed can stay dismissed.

E disponueshme edhe në

API
GET /billing/alerts
TypeScript
billing.listAlerts()
Python
billing.list_alerts()
Ruby
billing.list_alerts
PHP
billing->listAlerts
Go
Billing.ListAlerts
Java
billing().listAlerts
CLI
openemail billing list-alerts

Billing.ListCountriesAsync

List the billing countries

Lejetbilling:read
Nënshkrimi
Task<JsonObject> ListCountriesAsync(    string? apiKey = null,    CancellationToken cancellationToken = default)

Returns every country a billing address can be in, as the two-letter ISO 3166 codes SaveInvoiceDetailsAsync takes as country.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with the codes in data, a list of strings.

Shembull

var countries = await client.Billing.ListCountriesAsync(); Console.WriteLine(countries.ToJsonString());

E disponueshme edhe në

API
GET /billing/countries
TypeScript
billing.listCountries()
Python
billing.list_countries()
Ruby
billing.list_countries
PHP
billing->listCountries
Go
Billing.ListCountries
Java
billing().listCountries
CLI
openemail billing list-countries

Billing.GetPayAsYouGoAsync

Read pay as you go

Lejetbilling:read
Nënshkrimi
Task<JsonObject> GetPayAsYouGoAsync(    string? apiKey = null,    CancellationToken cancellationToken = default)

Returns pay as you go on the workspace: whether usage past the allowances is billed, the monthly limit and what extras cost so far, the current billing period once it is set up, the limits that can be chosen and the prices.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with the state, limits, prices and period.

Shembull

var payAsYouGo = await client.Billing.GetPayAsYouGoAsync(); Console.WriteLine($"{((bool?)payAsYouGo["enabled"] == true ? "On" : "Off")}, {payAsYouGo["spentCents"]} of {payAsYouGo["limitCents"]} cents spent");Console.WriteLine($"Limits on offer: {string.Join(", ", payAsYouGo["limits"]?.AsArray() ?? [])}");

Shënime

  • Amounts are in US cents.

E disponueshme edhe në

API
GET /billing/pay-as-you-go
TypeScript
billing.getPayAsYouGo()
Python
billing.get_pay_as_you_go()
Ruby
billing.get_pay_as_you_go
PHP
billing->getPayAsYouGo
Go
Billing.GetPayAsYouGo
Java
billing().getPayAsYouGo
CLI
openemail billing get-pay-as-you-go

Billing.SetPayAsYouGoAsync

Turn pay as you go on or off

Lejetbilling:write
Nënshkrimi
Task<JsonObject> SetPayAsYouGoAsync(    IReadOnlyDictionary<string, object?> body,    string? apiKey = null,    CancellationToken cancellationToken = default)

Turns pay as you go on or off, as the switch on Plans & Billing does. Off takes effect at once, and usage stops at the allowances. On takes effect at once when a card is already saved. The first time, checkoutUrl is a link where the person adds a card, and pay as you go starts once they have: call ConfirmPayAsYouGoAsync after they return.

Nothing is paid through the API: the person pays, changes the card or cancels on the billing provider's page the link opens, as they do from the app.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

enabledboolE detyrueshme

true to turn it on, false to turn it off.

themestring

light or dark, for the page the link opens, as in OpenEmail\Constants\BillingThemes.

localestring

A language tag such as de or pt-PT, for the page the link opens.

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with enabled, suspended, activating and checkoutUrl.

Shembull

var result = await client.Billing.SetPayAsYouGoAsync(new Body { ["enabled"] = true, ["theme"] = "dark" }); if (result["checkoutUrl"] is not null){    Console.WriteLine($"Add a card here: {result["checkoutUrl"]}");}

Shënime

  • With an OAuth access token it asks for a verification code: until the app has verified one, it is refused with 403 step_up_required. An API key is never asked.

  • Turning it on where pay as you go is not set up on the install is 503 billing_not_configured.

  • The SDK does not retry it.

E disponueshme edhe në

API
PATCH /billing/pay-as-you-go
TypeScript
billing.setPayAsYouGo()
Python
billing.set_pay_as_you_go()
Ruby
billing.set_pay_as_you_go
PHP
billing->setPayAsYouGo
Go
Billing.SetPayAsYouGo
Java
billing().setPayAsYouGo
CLI
openemail billing set-pay-as-you-go

Billing.SetPayAsYouGoLimitAsync

Set the pay as you go limit

Lejetbilling:write
Nënshkrimi
Task<JsonObject> SetPayAsYouGoLimitAsync(    IReadOnlyDictionary<string, object?> body,    string? apiKey = null,    CancellationToken cancellationToken = default)

Sets the monthly spending limit of pay as you go, in US cents, one of the amounts GetPayAsYouGoAsync lists in limits. Extras stop for the rest of a calendar month once it is reached.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

limitCentsintE detyrueshme

The limit in US cents: 1,000, 2,500, 5,000, 10,000, 25,000, 50,000, 100,000, 250,000 or 500,000, the amounts in OpenEmail.Constants.PayAsYouGoLimitsCents.All.

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with limitCents.

Shembull

var saved = await client.Billing.SetPayAsYouGoLimitAsync(new Body { ["limitCents"] = 10000 }); Console.WriteLine(saved.ToJsonString());

Shënime

  • With an OAuth access token it asks for a verification code: until the app has verified one, it is refused with 403 step_up_required. An API key is never asked.

  • A workspace where pay as you go was never set up is 409 pay_as_you_go_not_enrolled.

  • The SDK does not retry it.

E disponueshme edhe në

API
PUT /billing/pay-as-you-go/limit
TypeScript
billing.setPayAsYouGoLimit()
Python
billing.set_pay_as_you_go_limit()
Ruby
billing.set_pay_as_you_go_limit
PHP
billing->setPayAsYouGoLimit
Go
Billing.SetPayAsYouGoLimit
Java
billing().setPayAsYouGoLimit
CLI
openemail billing set-pay-as-you-go-limit

Billing.ConfirmPayAsYouGoAsync

Confirm pay as you go

Lejetbilling:write
Nënshkrimi
Task<JsonObject> ConfirmPayAsYouGoAsync(    string? apiKey = null,    CancellationToken cancellationToken = default)

Checks with the billing provider whether the card from a pay as you go checkout was saved, and records it, as the app does when the person comes back from the checkout. enabled says whether pay as you go is on now.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with enabled.

Shembull

var confirmation = await client.Billing.ConfirmPayAsYouGoAsync(); Console.WriteLine($"{((bool?)confirmation["enabled"] == true ? "Pay as you go is on" : "No card was saved")}");

Shënime

  • With an OAuth access token it asks for a verification code: until the app has verified one, it is refused with 403 step_up_required. An API key is never asked.

  • It is safe to call again.

  • The SDK does not retry it.

E disponueshme edhe në

API
POST /billing/pay-as-you-go/confirm
TypeScript
billing.confirmPayAsYouGo()
Python
billing.confirm_pay_as_you_go()
Ruby
billing.confirm_pay_as_you_go
PHP
billing->confirmPayAsYouGo
Go
Billing.ConfirmPayAsYouGo
Java
billing().confirmPayAsYouGo
CLI
openemail billing confirm-pay-as-you-go

Billing.StartCheckoutAsync

Start a checkout

Lejetbilling:write
Nënshkrimi
Task<JsonObject> StartCheckoutAsync(    IReadOnlyDictionary<string, object?> body,    string? apiKey = null,    CancellationToken cancellationToken = default)

Starts buying a paid plan for a workspace on Free, as choosing a plan in the app does, and returns the link to the checkout. Nothing is charged until the person pays there, and the plan starts once they have. A workspace that already pays for a plan changes it with OpenPortalAsync instead.

Nothing is paid through the API: the person pays, changes the card or cancels on the billing provider's page the link opens, as they do from the app.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

planstringE detyrueshme

starter, business or enterprise, as in OpenEmail\Constants\PaidPlanIds.

intervalstring

month or year, as in OpenEmail\Constants\BillingIntervals. Defaults to month.

themestring

light or dark, for the page the link opens, as in OpenEmail\Constants\BillingThemes.

localestring

A language tag such as de or pt-PT, for the page the link opens.

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with url.

Shembull

using OpenEmail.Constants; var checkout = await client.Billing.StartCheckoutAsync(new Body{    ["plan"] = PaidPlanIds.Business,    ["interval"] = BillingIntervals.Year,    ["locale"] = "de",}); Console.WriteLine($"Pay here: {checkout["url"]}");

Shënime

  • With an OAuth access token it asks for a verification code: until the app has verified one, it is refused with 403 step_up_required. An API key is never asked.

  • A workspace that already pays for a plan is 409 plan_conflict, and a plan or interval not sold on the install is 422 plan_unavailable.

  • The SDK does not retry it.

E disponueshme edhe në

API
POST /billing/checkout
TypeScript
billing.startCheckout()
Python
billing.start_checkout()
Ruby
billing.start_checkout
PHP
billing->startCheckout
Go
Billing.StartCheckout
Java
billing().startCheckout
CLI
openemail billing start-checkout

Billing.OpenPortalAsync

Open the billing portal

Lejetbilling:write
Nënshkrimi
Task<JsonObject> OpenPortalAsync(    IReadOnlyDictionary<string, object?>? body = null,    string? apiKey = null,    CancellationToken cancellationToken = default)

Returns a link to the billing portal, where the person changes or cancels the plan, updates the card and downloads past invoices, as Manage does in the app.

Nothing is paid through the API: the person pays, changes the card or cancels on the billing provider's page the link opens, as they do from the app.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

themestring

light or dark, for the page the link opens, as in OpenEmail\Constants\BillingThemes.

localestring

A language tag such as de or pt-PT, for the page the link opens.

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with url.

Shembull

var portal = await client.Billing.OpenPortalAsync(body: new Body { ["theme"] = "dark" }); Console.WriteLine($"Manage the plan here: {portal["url"]}");

Shënime

  • With an OAuth access token it asks for a verification code: until the app has verified one, it is refused with 403 step_up_required. An API key is never asked.

  • The SDK does not retry it.

E disponueshme edhe në

API
POST /billing/portal
TypeScript
billing.openPortal()
Python
billing.open_portal()
Ruby
billing.open_portal
PHP
billing->openPortal
Go
Billing.OpenPortal
Java
billing().openPortal
CLI
openemail billing open-portal

Billing.ListInvoicesAsync

List the charges

Lejetbilling:read
Nënshkrimi
Task<JsonObject> ListInvoicesAsync(    int? page = null,    int? limit = null,    string? sort = null,    string? search = null,    string? apiKey = null,    CancellationToken cancellationToken = default)

Returns every charge of the workspace with the state of its invoice, a page at a time, as History on Plans & Billing lists them. search: matches the plan, the invoice number, the charge id and the name billed.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

pageint?

Which page, from 1.

limitint?

Charges per page, from 1 to 100. The server defaults to 25.

sortstring?

newest, the default, or oldest, as in OpenEmail\Constants\BillingInvoiceSorts.

searchstring?

Words to look for, up to 120 characters.

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with data, total, page, limit, hasMore and metered.

Shembull

var invoices = await client.Billing.ListInvoicesAsync(limit: 10); foreach (var charge in invoices["data"]?.AsArray() ?? []){    if ((bool?)charge?["paid"] != true)    {        Console.WriteLine($"{charge?["id"]} {charge?["amountCents"]} cents, {charge?["status"]}");    }} Console.WriteLine($"{((bool?)invoices["hasMore"] == true ? "More on page 2" : "That is every charge")}");

Shënime

E disponueshme edhe në

API
GET /billing/invoices
TypeScript
billing.listInvoices()
Python
billing.list_invoices()
Ruby
billing.list_invoices
PHP
billing->listInvoices
Go
Billing.ListInvoices
Java
billing().listInvoices
CLI
openemail billing list-invoices

Billing.GetInvoiceAsync

Get the invoice of a charge

Lejetbilling:read
Nënshkrimi
Task<JsonObject> GetInvoiceAsync(    string orderId,    string? apiKey = null,    CancellationToken cancellationToken = default)

Returns the link to the invoice of one charge, as a PDF, and its file name. An invoice that was not written yet is written first, which can take a few seconds. The link is signed by the billing provider, downloads the PDF and stops working after a while, so fetch it again rather than keeping it.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

orderIdstringE detyrueshme

The charge id, as ListInvoicesAsync returns it.

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with url and fileName.

Shembull

var invoices = await client.Billing.ListInvoicesAsync(limit: 1); if (invoices["data"]?.AsArray().FirstOrDefault() is { } latest){    var invoice = await client.Billing.GetInvoiceAsync(latest["id"]!.GetValue<string>());     Console.WriteLine($"{invoice["fileName"]}: {invoice["url"]}");}

Shënime

E disponueshme edhe në

API
GET /billing/invoices/{orderId}
TypeScript
billing.getInvoice()
Python
billing.get_invoice()
Ruby
billing.get_invoice
PHP
billing->getInvoice
Go
Billing.GetInvoice
Java
billing().getInvoice
CLI
openemail billing get-invoice

Billing.SaveInvoiceDetailsAsync

Save the billing details of a charge

Lejetbilling:write
Nënshkrimi
Task<JsonObject> SaveInvoiceDetailsAsync(    string orderId,    IReadOnlyDictionary<string, object?> body,    string? apiKey = null,    CancellationToken cancellationToken = default)

Saves the name and address billed on a charge, as the Billing address dialog does, keeps the address for later charges, and starts writing its invoice. invoice is ready when the charge already had one, started when it is being written, and refused with the reason in message.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

orderIdstringE detyrueshme

The charge id, as ListInvoicesAsync returns it.

namestringE detyrueshme

Who is billed, up to 200 characters.

line1stringE detyrueshme

The street address, up to 200 characters.

line2string

A flat, suite or building, up to 200 characters.

citystringE detyrueshme

Up to 120 characters.

postalCodestring

Up to 40 characters.

statestring

The state or region, up to 60 characters. In the US and Canada, its two-letter code.

countrystringE detyrueshme

A two-letter ISO 3166 code, one of those ListCountriesAsync returns.

apiKeystring?

Overrides the client's API key for this call only.

cancellationTokenCancellationToken

Cancels the request.

Kthen

A JsonObject with invoice and message.

Shembull

var result = await client.Billing.SaveInvoiceDetailsAsync("3b9f2c4e-7a1d-4e8b-9c0f-5d6a7b8c9d0e", new Body{    ["name"] = "Acme Ltd",    ["line1"] = "1 Market Street",    ["city"] = "London",    ["postalCode"] = "EC1A 1AA",    ["country"] = "GB",}); Console.WriteLine($"Invoice {result["invoice"]}");

Shënime

  • With an OAuth access token it asks for a verification code: until the app has verified one, it is refused with 403 step_up_required. An API key is never asked.

  • An address the billing provider refuses is 422 billing_address_rejected.

  • The SDK does not retry it.

E disponueshme edhe në

API
PUT /billing/invoices/{orderId}/details
TypeScript
billing.saveInvoiceDetails()
Python
billing.save_invoice_details()
Ruby
billing.save_invoice_details
PHP
billing->saveInvoiceDetails
Go
Billing.SaveInvoiceDetails
Java
billing().saveInvoiceDetails
CLI
openemail billing save-invoice-details

Billing.ListAddOnsAsync

List add-ons

Lejetbilling:read
Nënshkrimi
Task<JsonObject> ListAddOnsAsync(    string? apiKey = null,    CancellationToken cancellationToken = default)

Returns what can be bought on top of the plan, today the dedicated sending IP: whether it is for sale, its price per IP a month in priceCents, whether the workspace has it and when it ends, the IPs it brought, and eligibility, which says whether the workspace qualifies. A dedicated IP needs the Business or Enterprise plan and at least 100,000 emails sent in a month, because below that volume it delivers worse than the shared IPs.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

cancellationTokenCancellationToken

Cancels the request.

apiKeystring?

Overrides the client's API key for this call only.

Kthen

A JsonObject with one object per add-on in data: addOn, available, status, priceCents, endsAt, eligibility and ips.

Shembull

var addOns = await client.Billing.ListAddOnsAsync(); foreach (var addOn in addOns["data"]?.AsArray() ?? []){    Console.WriteLine($"{addOn?["addOn"]}: {addOn?["status"]?.ToString() ?? "not bought"}, {addOn?["priceCents"]} cents a month");}

Shënime

  • status is null until the workspace has the add-on. pending is paid and being set up, warming and active send through the dedicated IP, and releasing is being taken down.

  • A GET is retried automatically on network failure and on 408, 500, 502, 503 and 504 responses, up to the client MaxRetries, and on a 429 only when it carries a Retry-After of a minute or less.

E disponueshme edhe në

API
GET /billing/add-ons
TypeScript
billing.listAddOns()
Python
billing.list_add_ons()
Ruby
billing.list_add_ons
PHP
billing->listAddOns
Go
Billing.ListAddOns
Java
billing().listAddOns
CLI
openemail billing list-add-ons

Billing.StartAddOnCheckoutAsync

Start a checkout for an add-on

Lejetbilling:write
Nënshkrimi
Task<JsonObject> StartAddOnCheckoutAsync(    IReadOnlyDictionary<string, object?> body,    string? apiKey = null,    CancellationToken cancellationToken = default)

Starts buying an add-on, as the button under Plans & Billing does, and returns the link to the checkout. Nothing is charged until the person pays there. Once it is paid the dedicated IP is set up and warmed up, which Sending.ListDedicatedIpsAsync shows.

Nothing is paid through the API: the person pays on the billing provider's page the link opens, as they do from the app.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

addOnstringE detyrueshme

The add-on to buy: dedicated-ip.

themestring

light or dark, for the page the link opens.

localestring

A language tag such as de or pt-PT, for the page the link opens.

cancellationTokenCancellationToken

Cancels the request.

apiKeystring?

Overrides the client's API key for this call only.

Kthen

A JsonObject with addOn and url.

Shembull

using OpenEmail.Constants; var checkout = await client.Billing.StartAddOnCheckoutAsync(new Body { ["addOn"] = AddOns.DedicatedIp, ["theme"] = BillingThemes.Dark }); Console.WriteLine($"Pay for {checkout["addOn"]} at {checkout["url"]}");

Shënime

E disponueshme edhe në

API
POST /billing/add-ons/checkout
TypeScript
billing.startAddOnCheckout()
Python
billing.start_add_on_checkout()
Ruby
billing.start_add_on_checkout
PHP
billing->startAddOnCheckout
Go
Billing.StartAddOnCheckout
Java
billing().startAddOnCheckout
CLI
openemail billing start-add-on-checkout

Billing.CancelAddOnAsync

Cancel an add-on

Lejetbilling:write
Nënshkrimi
Task<JsonObject> CancelAddOnAsync(    string addOn,    string? apiKey = null,    CancellationToken cancellationToken = default)

Cancels an add-on. It stays until the end of the month already paid for, which endsAt gives. Then the dedicated IP is released and mail leaves through the shared IPs again.

Billing belongs to the owner of the workspace: an API key acts for the owner, and an OAuth access token reaches billing only when the owner connected the app with every address. A token that acts for a member is 403 owner_only, and a key or token limited to particular addresses or domains is 422 capability_unsupported.

Parametrat

addOnstringE detyrueshme

The add-on to cancel: dedicated-ip.

cancellationTokenCancellationToken

Cancels the request.

apiKeystring?

Overrides the client's API key for this call only.

Kthen

A JsonObject, now with endsAt set.

Shembull

using OpenEmail.Constants; var addOn = await client.Billing.CancelAddOnAsync(AddOns.DedicatedIp); Console.WriteLine($"{addOn["addOn"]} ends {addOn["endsAt"]}");

Shënime

  • With an OAuth access token it asks for a verification code: until the app has verified one, it is refused with 403 step_up_required. An API key is never asked.

  • A workspace that does not have the add-on, or whose add-on is already ending, is 409 add_on_not_active.

  • The SDK does not retry a delete.

E disponueshme edhe në

API
DELETE /billing/add-ons/{addOn}
TypeScript
billing.cancelAddOn()
Python
billing.cancel_add_on()
Ruby
billing.cancel_add_on
PHP
billing->cancelAddOn
Go
Billing.CancelAddOn
Java
billing().cancelAddOn
CLI
openemail billing cancel-add-on