Act-On · Authentication Profile

Act On Authentication

Authentication

Act-On declares 3 security scheme(s) across its OpenAPI definitions.

CompanyMarketingMarketing AutomationEmail MarketingEmailMarketing TechnologyLead GenerationCampaign ManagementCustomer DataWebhooksAPI
Methods: Schemes: 3 OAuth flows: API key in:

Security Schemes

oauth2 oauth2
· flows: , ,
sec0 apiKey
· in: header ()
bearerAuth http
scheme: bearer

Source

Authentication Profile

Raw ↑
generated: '2026-08-13'
method: searched
source: https://developer.act-on.com/reference/api-overview + openapi/ (4 published
  documents) + live probes of api.actonsoftware.com, api-eu.actonsoftware.com and restapi.actonsoftware.com
api: Act-On REST API
summary: >-
  Act-On's REST API authenticates with OAuth 2.0. Clients exchange credentials at the
  token endpoint for a short-lived bearer access_token (sent as
  Authorization: Bearer <token>) plus a refresh_token. Three grant types are
  documented. There are no scopes: the published securityScheme declares
  `flows: {}`, and authorization is governed by the Act-On account's own user
  permissions rather than by anything the API negotiates.
token_endpoint: https://api.actonsoftware.com/token
token_endpoint_regional:
- {region: US / default, url: 'https://api.actonsoftware.com/token', probe_status: 401}
- {region: EU, url: 'https://api-eu.actonsoftware.com/token', probe_status: 401, evidence: '"If
    you are in Europe, you will want to update your base url to api-eu.actonsoftware.com"
    — API Overview'}
- {region: alias (live, undocumented), url: 'https://restapi.actonsoftware.com/token',
  probe_status: 401}
token_endpoint_probe:
  method: POST
  status: 401
  body: '{"error":"access_denied","error_description":"Unauthorized"}'
  note: Unauthenticated POST returns a standard OAuth 2.0 error object on all three
    hosts, confirming OAuth 2.0.
credential_model:
  client_credentials:
    what: Client ID + Client Secret
    scope: identify the INTEGRATION
    tied_to_account: false
    evidence: '"These credentials are unique to your integration and are not tied to
      a specific account."'
    obtained_via: Act-On UI — Settings > Other Settings > Custom Account Settings >
      API Access Keys > Generate API Keys; or the Request a Developer Account form
  account_credentials:
    what: Act-On username + password
    scope: select the ACCOUNT being acted on
    evidence: '"Calls to our authentication endpoints will require both your unique
      Client ID/Secret and a username/password for the specific account you are
      accessing."'
  note: >-
    Because the account is chosen by the username, the same client credentials can be
    pointed at a sandbox account or a production account. Nothing in the key itself
    distinguishes test from live — see sandbox/act-on-sandbox.yml.
schemes:
- type: oauth2
  name: oauth2
  spec_source: openapi/act-on-oauth-openapi.yml
  scopes_declared: 'none — `flows: {}` in the published securityScheme'
  flows:
  - {grant_type: password, doc: 'https://developer.act-on.com/reference/grant-type-password',
    description: Exchange username and password for an access_token and refresh_token.,
    in_spec: true}
  - {grant_type: refresh_token, doc: 'https://developer.act-on.com/reference/grant-type-refresh',
    description: Exchange a refresh_token for a new access_token and refresh_token.,
    in_spec: true}
  - {grant_type: authorization_code, doc: 'https://developer.act-on.com/reference/grant-type-code',
    description: Exchange an authorization code for an access_token and refresh_token.,
    in_spec: false, note: Documented on the developer portal but absent from the published
      oauth OpenAPI document.}
  transmit: Authorization header, Bearer scheme
- type: apiKey
  name: sec0
  in: header
  header: Authorization
  bearer_format: bearer
  spec_source: openapi/act-on-rest-api-openapi.yml, openapi/act-on-raw-body-api-openapi.yml
  note: >-
    Declared as `apiKey` in the header rather than `http`/`bearer`. It is not a
    separate credential — it is the OAuth bearer token modelled loosely by the ReadMe
    tooling. There is NO API-key-only authentication path on Act-On.
- type: http
  scheme: bearer
  bearerFormat: JWT
  name: bearerAuth
  spec_source: openapi/act-on-custom-objects-service-openapi.yml
  note: The Custom Objects Service models the same bearer token correctly, and states
    the format is JWT.
authorization_model:
  scopes: false
  permissions: >-
    Act-On users carry per-capability privileges set on the account (launch, admin,
    contactLists create/delete/download, content create/delete, programs
    create/delete, accountWideEmail view/manage) — documented on the Userspecs
    Overview page as fields on user creation. Those permissions bound what a token
    obtained for that user can do, but they are not exposed or negotiated through the
    API and do not appear in any token response.
  evidence: https://developer.act-on.com/reference/userspecs-overview
  ref: scopes/act-on-scopes.yml
rate_limit:
  auth_calls: 5 per hour, per account
  consequence: >-
    The single most important operational fact about Act-On auth. Token acquisition
    must be cached and refreshed on expiry; an integration that authenticates per
    request exhausts its hourly budget in the first minute.
  source: https://developer.act-on.com/reference/api-overview
  ref: rate-limits/act-on-rate-limits.yml
discovery:
  oauth_authorization_server_metadata: absent (RFC 8414 — /.well-known/oauth-authorization-server
    404 on every host)
  protected_resource_metadata: absent (RFC 9728 — /.well-known/oauth-protected-resource
    404 on every host)
  openid_configuration: absent (404 on every host)
  note: An agent cannot discover the token endpoint; it must be read out of prose docs.
  ref: well-known/act-on-well-known.yml
mtls: false
docs: https://developer.act-on.com/reference/api-overview
notes:
- Developer/API access requires an Act-On developer account (see request-a-developer-account);
  provisioning takes 24-48 hours.
- No API-key-only scheme is documented; OAuth 2.0 is the sole mechanism.
- Token lifetime and refresh_token lifetime are not published.
probes:
- {url: 'https://api.actonsoftware.com/token', status: 401}
- {url: 'https://api-eu.actonsoftware.com/token', status: 401}
- {url: 'https://restapi.actonsoftware.com/token', status: 401}
- {url: 'https://api.actonsoftware.com/api/1/message', status: 401}
- {url: 'https://api.actonsoftware.com/.well-known/openid-configuration', status: 404}