Maxio Billing Portal API

The Billing Portal object allows you to enable, disable, and manage customer access to the self-service Billing Portal, where customers can view invoices and manage their own payment details. For more information, see [Understand the Billing Portal](https://docs.maxio.com/billing/billing-portal/overview/understand-the-billing-portal).

GitHub OpenAPI

Operations 4

POST /portal/customers/{customer_id}/enable.json enableBillingPortalForCustomer #
POST /portal/customers/{customer_id}/invitations/invite.json resendBillingPortalInvitation #
DELETE /portal/customers/{customer_id}/invitations/revoke.json revokeBillingPortalAccess #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/maxio:maxio-billing-portal-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

maxio-billing-portal-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Maxio Billing Portal API
  version: '1.0'
  contact:
    email: support@maxio.com
  description: 'Operations tagged Billing Portal across 2 of this provider''s published API definitions: maxio-advanced-billing-openapi31json.json, maxio-advanced-billing-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://{site}.chargify.com
  description: Default Advanced Billing environment hosted in US. Valid for the majority of our customers.
  variables:
    site:
      default: subdomain
      description: The subdomain for your Advanced Billing site.
- url: https://events.chargify.com/{site}
  description: Default Advanced Billing environment hosted in US. Valid for the majority of our customers.
  variables:
    site:
      default: subdomain
      description: The subdomain for your Advanced Billing site.
- url: https://{site}.ebilling.maxio.com
  description: Advanced Billing environment hosted in EU. Use only when you requested EU hosting for your AB account.
  variables:
    site:
      default: subdomain
      description: The subdomain for your Advanced Billing site.
security:
- BasicAuth: []
tags:
- name: Billing Portal
  description: The Billing Portal object allows you to enable, disable, and manage customer access to the self-service Billing Portal, where customers can view invoices and manage their own payment details. For more information, see Understand the Billing Portal.
paths:
  /portal/customers/{customer_id}/enable.json:
    parameters: []
    post:
      tags:
      - Billing Portal
      summary: enableBillingPortalForCustomer
      description: 'Enables Billing Portal access for a customer, with an option to send an invitation email at the same time.


        ## Billing Portal Security


        If your customer has been invited to the Billing Portal, they receive a link to manage their subscription (the “Management URL”) automatically at the bottom of their statements, invoices, and receipts. **This link changes periodically for security and is only valid for 65 days.**


        If you need to provide your customer their Management URL through other means, you can retrieve it via the API. Because the URL is cryptographically signed with a timestamp, merchants cannot generate the URL without requesting it through the API.


        To prevent abuse and overuse, request a new URL only when absolutely necessary. Management URLs are good for 65 days, so you should re-use a previously generated one as much as possible. If you use the URL frequently (such as to display on your website), **do not** make an API request every time.


        For more information configuring the Billing Portal, see Billing Portal Overview.'
      operationId: enableBillingPortalForCustomer
      parameters:
      - name: customer_id
        in: path
        description: The Chargify id of the customer
        required: true
        schema:
          type: integer
          contentEncoding: int32
      - name: auto_invite
        in: query
        description: 'When set to 1, an Invitation email will be sent to the Customer.

          When set to 0, or not sent, an email will not be sent.

          Use in query: `auto_invite=1`.'
        style: form
        explode: true
        schema:
          allOf:
          - $ref: '#/components/schemas/AutoInvite'
          - description: 'When set to 1, an Invitation email will be sent to the Customer.

              When set to 0, or not sent, an email will not be sent.

              Use in query: `auto_invite=1`.'
      responses:
        '200':
          description: OK
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerResponse'
        '422':
          description: Unprocessable Entity (WebDAV)
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ErrorListResponse1'
                - description: Error which contains list of messages.
                  examples:
                  - errors:
                    - Portal is already enabled for this customer.
                contentMediaType: application/json
              examples:
                Example:
                  value:
                    errors:
                    - Portal is already enabled for this customer.
      deprecated: false
    servers:
    - url: https://{site}.chargify.com
      description: Default Advanced Billing environment hosted in US. Valid for the majority of our customers.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
    - url: https://events.chargify.com/{site}
      description: Default Advanced Billing environment hosted in US. Valid for the majority of our customers.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
    - url: https://{site}.ebilling.maxio.com
      description: Advanced Billing environment hosted in EU. Use only when you requested EU hosting for your AB account.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
    - url: https://events.chargify.com/{site}
      description: Advanced Billing environment hosted in EU. Use only when you requested EU hosting for your AB account.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
  /portal/customers/{customer_id}/management_link.json:
    parameters: []
    get:
      tags:
      - Billing Portal
      summary: readBillingPortalLink
      description: 'Returns the exact URL required for a subscriber to access the Billing Portal.


        ## Management Link Request Rules


        + When retrieving a management URL, multiple requests for the same customer in a short period return the **same** URL

        + A new URL is not generated for 15 days

        + You must cache and remember this URL if you are going to need it again within 15 days

        + Only request a new URL after the `new_link_available_at` date

        + You are limited to 15 requests for the same URL. If you make more than 15 requests before `new_link_available_at`, you are blocked from further Management URL requests (with a response code `429`).'
      operationId: readBillingPortalLink
      parameters:
      - name: customer_id
        in: path
        description: The Chargify id of the customer
        required: true
        schema:
          type: integer
          contentEncoding: int32
      responses:
        '200':
          description: OK
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PortalManagementLink'
                - examples:
                  - url: https://www.billingportal.com/manage/19804639/1517596469/bd16498719a7d3e6
                    fetch_count: 1
                    created_at: '2018-02-02T18:34:29Z'
                    new_link_available_at: '2018-02-17T18:34:29Z'
                    expires_at: '2018-04-08T17:34:29Z'
                    last_invite_sent_at: '2018-02-02T18:34:29Z'
                contentMediaType: application/json
              examples:
                Example:
                  value:
                    url: https://www.billingportal.com/manage/19804639/1517596469/bd16498719a7d3e6
                    fetch_count: 1
                    created_at: '2018-02-02T18:34:29Z'
                    new_link_available_at: '2018-02-17T18:34:29Z'
                    expires_at: '2018-04-08T17:34:29Z'
                    last_invite_sent_at: '2018-02-02T18:34:29Z'
        '422':
          description: Unprocessable Entity (WebDAV)
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ErrorListResponse1'
                - description: Error which contains list of messages.
                  examples:
                  - errors:
                    - Billing Portal is not enabled for this customer.
                contentMediaType: application/json
              examples:
                Example:
                  value:
                    errors:
                    - Billing Portal is not enabled for this customer.
        '429':
          description: Too Many Requests
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/TooManyManagementLinkRequestsError1'
                - examples:
                  - errors:
                      error: Too many requests for this customer's management link
                      new_link_available_at: '2023-10-20T10:46:56Z'
                contentMediaType: application/json
              examples:
                Example:
                  value:
                    errors:
                      error: Too many requests for this customer's management link
                      new_link_available_at: '2023-10-20T10:46:56Z'
      deprecated: false
    servers:
    - url: https://{site}.chargify.com
      description: Default Advanced Billing environment hosted in US. Valid for the majority of our customers.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
    - url: https://events.chargify.com/{site}
      description: Default Advanced Billing environment hosted in US. Valid for the majority of our customers.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
    - url: https://{site}.ebilling.maxio.com
      description: Advanced Billing environment hosted in EU. Use only when you requested EU hosting for your AB account.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
    - url: https://events.chargify.com/{site}
      description: Advanced Billing environment hosted in EU. Use only when you requested EU hosting for your AB account.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
  /portal/customers/{customer_id}/invitations/invite.json:
    parameters: []
    post:
      tags:
      - Billing Portal
      summary: resendBillingPortalInvitation
      description: 'Resends a customer''s Billing Portal invitation.


        If you attempt to resend an invitation 5 times within 30 minutes, you will receive a `422` response with an `error` message in the body.


        If you attempt to resend an invitation when the Billing Portal is already disabled for a Customer, you will receive a `422` error response.


        If you attempt to resend an invitation when the Customer does not exist, you will receive a `404` error response.


        ## Limitations


        This endpoint will only return a JSON response.'
      operationId: resendBillingPortalInvitation
      parameters:
      - name: customer_id
        in: path
        description: The Chargify id of the customer
        required: true
        schema:
          type: integer
          contentEncoding: int32
      responses:
        '200':
          description: OK
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResentInvitation'
                - examples:
                  - last_sent_at: enim Duis esse dolore
                    last_accepted_at: adipisicing magna do in irure
                    send_invite_link_text: veniam sit
                    uninvited_count: 66254678
                contentMediaType: application/json
              examples:
                Example:
                  value:
                    last_sent_at: enim Duis esse dolore
                    last_accepted_at: adipisicing magna do in irure
                    send_invite_link_text: veniam sit
                    uninvited_count: 66254678
        '404':
          description: Not Found
          headers: {}
          content: {}
        '422':
          description: Unprocessable Entity (WebDAV)
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ErrorListResponse1'
                - description: Error which contains list of messages.
                  examples:
                  - errors:
                    - Too many requests for this customer. You can perform 5 requests within 00:30:00.
                contentMediaType: application/json
              examples:
                Example:
                  value:
                    errors:
                    - Too many requests for this customer. You can perform 5 requests within 00:30:00.
      deprecated: false
    servers:
    - url: https://{site}.chargify.com
      description: Default Advanced Billing environment hosted in US. Valid for the majority of our customers.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
    - url: https://events.chargify.com/{site}
      description: Default Advanced Billing environment hosted in US. Valid for the majority of our customers.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
    - url: https://{site}.ebilling.maxio.com
      description: Advanced Billing environment hosted in EU. Use only when you requested EU hosting for your AB account.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
    - url: https://events.chargify.com/{site}
      description: Advanced Billing environment hosted in EU. Use only when you requested EU hosting for your AB account.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
  /portal/customers/{customer_id}/invitations/revoke.json:
    parameters: []
    delete:
      tags:
      - Billing Portal
      summary: revokeBillingPortalAccess
      description: 'Revokes a customer''s Billing Portal invitation.


        If you attempt to revoke an invitation when the Billing Portal is already disabled for a Customer, you will receive a 422 error response.


        ## Limitations


        This endpoint will only return a JSON response.'
      operationId: revokeBillingPortalAccess
      parameters:
      - name: customer_id
        in: path
        description: The Chargify id of the customer
        required: true
        schema:
          type: integer
          contentEncoding: int32
      responses:
        '200':
          description: OK
          headers: {}
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/RevokedInvitation'
                - examples:
                  - last_sent_at: Not Invited
                    last_accepted_at: Invite Revoked
                    uninvited_count: 8
                contentMediaType: application/json
              examples:
                Example:
                  value:
                    last_sent_at: Not Invited
                    last_accepted_at: Invite Revoked
                    uninvited_count: 8
      deprecated: false
    servers:
    - url: https://{site}.chargify.com
      description: Default Advanced Billing environment hosted in US. Valid for the majority of our customers.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
    - url: https://events.chargify.com/{site}
      description: Default Advanced Billing environment hosted in US. Valid for the majority of our customers.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
    - url: https://{site}.ebilling.maxio.com
      description: Advanced Billing environment hosted in EU. Use only when you requested EU hosting for your AB account.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
    - url: https://events.chargify.com/{site}
      description: Advanced Billing environment hosted in EU. Use only when you requested EU hosting for your AB account.
      variables:
        site:
          default: subdomain
          description: The subdomain for your Advanced Billing site.
components:
  schemas:
    ErrorListResponse1:
      title: ErrorListResponse1
      required:
      - errors
      type: object
      properties:
        errors:
          type: array
          items:
            type: string
          description: ''
      description: Error which contains list of messages.
    RevokedInvitation:
      title: RevokedInvitation
      type: object
      properties:
        last_sent_at:
          type: string
        last_accepted_at:
          type: string
        uninvited_count:
          type: integer
          contentEncoding: int32
    ResentInvitation:
      title: ResentInvitation
      type: object
      properties:
        last_sent_at:
          type: string
          deprecated: true
        last_accepted_at:
          type: string
          deprecated: true
        send_invite_link_text:
          type: string
        uninvited_count:
          type: integer
          contentEncoding: int32
        last_invite_sent_at:
          type: string
          contentEncoding: date-time
          examples:
          - '2024-01-01T00:30:00-04:00'
        last_invite_accepted_at:
          type: string
          contentEncoding: date-time
          examples:
          - '2024-01-01T00:35:00-04:00'
    AutoInvite:
      title: AutoInvite
      enum:
      - 0
      - 1
      type: integer
    EntityIdentifierKind:
      title: EntityIdentifierKind
      enum:
      - vat_eu
      - national_tax
      - company_reg
      - gln
      - duns
      - lei
      type: string
      description: 'The kind of tax or business identifier held by the customer:

        - `vat_eu`: an EU VAT number. Requires `vat_country` to be an EU member state code or `GB`.

        - `national_tax`: a national tax ID registered outside the EU. Requires `vat_country` to be one of `AL`, `AM`, `AR`, `AU`, `BR`, `CA`, `CH`, `DZ`, `IN`, `MX`, `NO`, `NZ`, or `ZA`.

        - `company_reg`: a company registration number, such as a French SIREN. No `vat_country` is required.

        - `gln`: a Global Location Number. The value must be 13 digits.

        - `duns`: a D-U-N-S Number. The value must be 9 digits.

        - `lei`: a Legal Entity Identifier. The value must be 20 characters: 18 letters or digits followed by 2 digits.


        A customer holds one identifier at a time. Saving an identifier of a different kind replaces the existing one.'
    TooManyManagementLinkRequestsError1:
      title: TooManyManagementLinkRequestsError1
      required:
      - errors
      type: object
      properties:
        errors:
          $ref: '#/components/schemas/TooManyManagementLinkRequests'
    TooManyManagementLinkRequests:
      title: TooManyManagementLinkRequests
      required:
      - error
      - new_link_available_at
      type: object
      properties:
        error:
          type: string
        new_link_available_at:
          type: string
          contentEncoding: date-time
    PortalManagementLink:
      title: PortalManagementLink
      type: object
      properties:
        url:
          type: string
        fetch_count:
          type: integer
          contentEncoding: int32
        created_at:
          type: string
          contentEncoding: date-time
        new_link_available_at:
          type: string
          contentEncoding: date-time
        expires_at:
          type: string
          contentEncoding: date-time
        last_invite_sent_at:
          type:
          - string
          - 'null'
          contentEncoding: date-time
    CustomerResponse:
      title: CustomerResponse
      required:
      - customer
      type: object
      properties:
        customer:
          $ref: '#/components/schemas/Customer'
    Customer:
      title: Customer
      type: object
      properties:
        first_name:
          type: string
          description: The first name of the customer
        last_name:
          type: string
          description: The last name of the customer
        email:
          type: string
          description: The email address of the customer
        cc_emails:
          type:
          - string
          - 'null'
          description: “A comma-separated list of emails that should be cc’d on all customer communications (e.g., “joe@example.com, sue@example.com”)”
        organization:
          type:
          - string
          - 'null'
          description: The organization of the customer. If no value, `null` or empty string is provided, `organization` will be populated with the customer's first and last name, separated with a space.
        reference:
          type:
          - string
          - 'null'
          description: The unique identifier used within your own application for this customer
        id:
          type: integer
          description: The customer ID in Chargify
          contentEncoding: int32
        created_at:
          type: string
          description: The timestamp in which the customer object was created in Chargify
          contentEncoding: date-time
        updated_at:
          type: string
          description: The timestamp in which the customer object was last edited
          contentEncoding: date-time
        address:
          type:
          - string
          - 'null'
          description: The customer’s shipping street address (e.g., “123 Main St.”)
        address_2:
          type:
          - string
          - 'null'
          description: Second line of the customer’s shipping address e.g., “Apt. 100”
        city:
          type:
          - string
          - 'null'
          description: The customer’s shipping address city (e.g., “Boston”)
        state:
          type:
          - string
          - 'null'
          description: The customer’s shipping address state (e.g., “MA”)
        state_name:
          type:
          - string
          - 'null'
          description: The customer's full name of state
        zip:
          type:
          - string
          - 'null'
          description: The customer’s shipping address zip code (e.g., “12345”)
        country:
          type:
          - string
          - 'null'
          description: The customer shipping address country
        country_name:
          type:
          - string
          - 'null'
          description: The customer's full name of country
        phone:
          type:
          - string
          - 'null'
          description: The phone number of the customer
        verified:
          type:
          - boolean
          - 'null'
          description: Is the customer verified to use ACH as a payment method.
        portal_customer_created_at:
          type:
          - string
          - 'null'
          description: The timestamp of when the Billing Portal entry was created at for the customer
          contentEncoding: date-time
        portal_invite_last_sent_at:
          type:
          - string
          - 'null'
          description: The timestamp of when the Billing Portal invite was last sent at
          contentEncoding: date-time
        portal_invite_last_accepted_at:
          type:
          - string
          - 'null'
          description: The timestamp of when the Billing Portal invite was last accepted
          contentEncoding: date-time
        tax_exempt:
          type: boolean
          description: The tax exempt status for the customer. Acceptable values are true or 1 for true and false or 0 for false.
        surcharging:
          type: boolean
          description: Whether surcharging is enabled for the customer. Only included on sites where surcharging control is enabled.
        vat_number:
          type:
          - string
          - 'null'
          description: The VAT business identification number for the customer. This number is used to determine VAT tax opt out rules. It is not validated when added or updated on a customer record. Instead, it is validated via VIES before calculating taxes. Only valid business identification numbers will allow for VAT opt out. When the customer holds an entity identifier, this field returns that identifier's value, whatever its kind.
        vat_country:
          type:
          - string
          - 'null'
          description: The two-letter ISO 3166-1 country code that qualifies the customer's VAT number. Set to `null` when an identifier is stored through `entity_identifier_kind` for a kind that is not tied to a VAT country, meaning `company_reg`, `gln`, `duns`, or `lei`.
        entity_identifier_kind:
          allOf:
          - oneOf:
            - {}
            - $ref: '#/components/schemas/EntityIdentifierKind'
          - description: The kind of tax or business identifier held by the customer. Returned as `null` when the customer has no entity identifier, including a legacy customer whose `vat_number` predates entity identifiers.
        entity_identifier_value:
          type:
          - string
          - 'null'
          description: The value of the customer's tax or business identifier. Returned as `null` when the customer has no entity identifier.
        parent_id:
          type:
          - integer
          - 'null'
          description: The parent ID in Chargify if applicable. Parent is another Customer object.
          contentEncoding: int32
        locale:
          type:
          - string
          - 'null'
          description: The locale for the customer to identify language-region
        default_subscription_group_uid:
          type:
          - string
          - 'null'
        salesforce_id:
          type:
          - string
          - 'null'
          description: The Salesforce ID for the customer
        tax_exempt_reason:
          type:
          - string
          - 'null'
          description: The Tax Exemption Reason Code for the customer
        default_auto_renewal_profile_id:
          type:
          - integer
          - 'null'
          description: The default auto-renewal profile ID for the customer
          contentEncoding: int32
        maxioid:
          type:
          - string
          - 'null'
          description: The Maxio-generated unique identifier for the customer.
        branding_theme_id:
          type:
          - integer
          - 'null'
          description: The ID of the Branding Theme assigned to this customer as the customer's default Branding Theme. This customer-level Branding Theme is used when a subscription does not have its own subscription-level Branding Theme.  Available only when Branding Themes are enabled for the site.
          contentEncoding: int32
  securitySchemes:
    BasicAuth:
      type: http
      description: The `username` is a Maxio Chargify API key. The `password` is `x`.
      scheme: basic
x-refined-from:
- maxio-advanced-billing-openapi31json.json
- maxio-advanced-billing-openapi.yml
x-provenance:
  method: harvested
  publisher: Maxio
  source: https://developers.maxio.com/static/exports/maxio-advanced-billing-openapi31json.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)