Skip to content

API reference ​

Every operation, generated from the OpenAPI document, which you can also download. Platform operations live on https://microauth.com and authenticate with a workspace API key. SDK operations live on https://api.microauth.com and use the SDK secret key. Guides for both are in Platform API and Any language (HTTP).

Each operation shows its authentication:

  • Workspace API key or dashboard session: callable from scripts.
  • Dashboard session: only from the signed in dashboard, for actions that need a person.
  • SDK secret key: your API's server, through the SDK or your own code.
  • None: public, mostly sign up and sign in.

APIs ​

Launch APIs and manage their settings, SDK secret, test key and custom domain.

GET List APIs ​

/api/v1/workspaces/{wid}/apis

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.

Response 200

OK

Example request
curl "https://microauth.com/api/v1/workspaces/{wid}/apis" \
  -H "Authorization: Bearer mak_..."
Example response
[
  {
    "created_at": "2026-10-11T12:00:00Z",
    "customers": 0,
    "id": "string",
    "logo_url": "string",
    "month_requests": 0,
    "name": "string",
    "plan_code": "string",
    "portal_url": "string",
    "sdk_last_seen_at": "2026-10-11T12:00:00Z",
    "slug": "string",
    "status": "string"
  }
]

POST Launch an API ​

/api/v1/workspaces/{wid}/apis

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.

Request body

api_base_urlstringUp to 300 characters.
namerequiredstringUp to 80 characters.
presetrequiredstringStarting pricing, change it any time. One of payg, free, subscriptions. Defaults to "payg".
slugstringPortal address, <slug>.microauth.dev. Generated from the name when empty. Up to 40 characters.

Response 201

apiobject
api.accent_colorstring
api.api_base_urlstringWhere your API runs, shown in the portal quickstart.
api.auto_recharge_allowedboolean
api.billable_status_codesarray of integers or null
api.created_atstring (date-time)
api.docs_urlstring
api.domainobject
api.domain.allowedbooleanThe API's plan includes custom domains.
api.domain.checked_atstring (date-time)
api.domain.cname_targetstringPoint the domain here with a CNAME record.
api.domain.domainstring
api.domain.errorstring
api.domain.statusstringOne of none, pending, verified, active, failed.
api.domain.txt_namestring
api.domain.txt_valuestring
api.first_usage_atstring (date-time)
api.idstring
api.key_headerstringHeader customers send their key in.
api.logo_urlstring
api.low_balance_microinteger
api.min_topup_centsinteger
api.monthly_quotaintegerRequests per month per customer, 0 for no limit.
api.namestring
api.payg_enabledbooleanCustomers can buy prepaid credit.
api.planobject
api.plan.codestring
api.plan.custom_domainboolean
api.plan.max_customersinteger
api.plan.monthly_requestsinteger
api.plan.namestring
api.plan.price_monthly_centsinteger
api.plan.purchasablebooleanTrue when checkout is available for this plan.
api.plan.remove_brandingboolean
api.plan.teamsboolean
api.plan_grace_untilstring (date-time)
api.plan_period_endstring (date-time)
api.plan_statusstringOne of active, past_due, canceled.
api.plans_enabledbooleanCustomers can subscribe to public plans.
api.portal_urlstring
api.previous_secret_valid_untilstring (date-time)
api.price_per_request_microinteger
api.privacy_urlstring
api.rolestringYour role in the API's workspace.
api.rpsintegerRequests per second per customer, 0 for no limit.
api.sdk_agentstring
api.sdk_first_seen_atstring (date-time)
api.sdk_last_seen_atstring (date-time)
api.secret_prefixstring
api.signup_modestringOne of open, approval, invite.
api.slugstring
api.statusstringOne of active, suspended.
api.stripeobject
api.stripe.account_idstring
api.stripe.account_namestring
api.stripe.charges_enabledboolean
api.stripe.configuredbooleanMicroAuth has Stripe Connect set up.
api.stripe.connectedboolean
api.stripe.connected_atstring (date-time)
api.stripe.livemodeboolean
api.support_emailstring
api.suspended_reasonstring
api.taglinestring
api.terms_urlstring
api.topup_amounts_centsarray of integers or null
api.website_urlstring
api.welcome_credit_microinteger
api.workspace_idstring
secretstringSDK secret key. You can reveal it again from the API's Connect page.
Example request
curl -X POST "https://microauth.com/api/v1/workspaces/{wid}/apis" \
  -H "Authorization: Bearer mak_..." \
  -H "Content-Type: application/json" \
  -d '{
  "api_base_url": "string",
  "name": "string",
  "preset": "payg",
  "slug": "string"
}'
Example response
{
  "api": {
    "accent_color": "string",
    "api_base_url": "string",
    "auto_recharge_allowed": true,
    "billable_status_codes": [
      0
    ],
    "created_at": "2026-10-11T12:00:00Z",
    "docs_url": "string",
    "domain": {
      "allowed": true,
      "checked_at": "2026-10-11T12:00:00Z",
      "cname_target": "string",
      "domain": "string",
      "error": "string",
      "status": "none",
      "txt_name": "string",
      "txt_value": "string"
    },
    "first_usage_at": "2026-10-11T12:00:00Z",
    "id": "string",
    "key_header": "string",
    "logo_url": "string",
    "low_balance_micro": 0,
    "min_topup_cents": 0,
    "monthly_quota": 0,
    "name": "string",
    "payg_enabled": true,
    "plan": {
      "code": "string",
      "custom_domain": true,
      "max_customers": 0,
      "monthly_requests": 0,
      "name": "string",
      "price_monthly_cents": 0,
      "purchasable": true,
      "remove_branding": true,
      "teams": true
    },
    "plan_grace_until": "2026-10-11T12:00:00Z",
    "plan_period_end": "2026-10-11T12:00:00Z",
    "plan_status": "active",
    "plans_enabled": true,
    "portal_url": "string",
    "previous_secret_valid_until": "2026-10-11T12:00:00Z",
    "price_per_request_micro": 0,
    "privacy_url": "string",
    "role": "string",
    "rps": 0,
    "sdk_agent": "string",
    "sdk_first_seen_at": "2026-10-11T12:00:00Z",
    "sdk_last_seen_at": "2026-10-11T12:00:00Z",
    "secret_prefix": "string",
    "signup_mode": "open",
    "slug": "string",
    "status": "active",
    "stripe": {
      "account_id": "string",
      "account_name": "string",
      "charges_enabled": true,
      "configured": true,
      "connected": true,
      "connected_at": "2026-10-11T12:00:00Z",
      "livemode": true
    },
    "support_email": "string",
    "suspended_reason": "string",
    "tagline": "string",
    "terms_url": "string",
    "topup_amounts_cents": [
      0
    ],
    "website_url": "string",
    "welcome_credit_micro": 0,
    "workspace_id": "string"
  },
  "secret": "string"
}

GET Check a portal address ​

/api/v1/slug-available

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

query slugstringUp to 60 characters.

Response 200

availableboolean
reasonstring
slugstring
Example request
curl "https://microauth.com/api/v1/slug-available" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "available": true,
  "reason": "string",
  "slug": "string"
}

GET Get an API ​

/api/v1/apis/{id}

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

accent_colorstring
api_base_urlstringWhere your API runs, shown in the portal quickstart.
auto_recharge_allowedboolean
billable_status_codesarray of integers or null
created_atstring (date-time)
docs_urlstring
domainobject
domain.allowedbooleanThe API's plan includes custom domains.
domain.checked_atstring (date-time)
domain.cname_targetstringPoint the domain here with a CNAME record.
domain.domainstring
domain.errorstring
domain.statusstringOne of none, pending, verified, active, failed.
domain.txt_namestring
domain.txt_valuestring
first_usage_atstring (date-time)
idstring
key_headerstringHeader customers send their key in.
logo_urlstring
low_balance_microinteger
min_topup_centsinteger
monthly_quotaintegerRequests per month per customer, 0 for no limit.
namestring
payg_enabledbooleanCustomers can buy prepaid credit.
planobject
plan.codestring
plan.custom_domainboolean
plan.max_customersinteger
plan.monthly_requestsinteger
plan.namestring
plan.price_monthly_centsinteger
plan.purchasablebooleanTrue when checkout is available for this plan.
plan.remove_brandingboolean
plan.teamsboolean
plan_grace_untilstring (date-time)
plan_period_endstring (date-time)
plan_statusstringOne of active, past_due, canceled.
plans_enabledbooleanCustomers can subscribe to public plans.
portal_urlstring
previous_secret_valid_untilstring (date-time)
price_per_request_microinteger
privacy_urlstring
rolestringYour role in the API's workspace.
rpsintegerRequests per second per customer, 0 for no limit.
sdk_agentstring
sdk_first_seen_atstring (date-time)
sdk_last_seen_atstring (date-time)
secret_prefixstring
signup_modestringOne of open, approval, invite.
slugstring
statusstringOne of active, suspended.
stripeobject
stripe.account_idstring
stripe.account_namestring
stripe.charges_enabledboolean
stripe.configuredbooleanMicroAuth has Stripe Connect set up.
stripe.connectedboolean
stripe.connected_atstring (date-time)
stripe.livemodeboolean
support_emailstring
suspended_reasonstring
taglinestring
terms_urlstring
topup_amounts_centsarray of integers or null
website_urlstring
welcome_credit_microinteger
workspace_idstring
Example request
curl "https://microauth.com/api/v1/apis/{id}" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "accent_color": "string",
  "api_base_url": "string",
  "auto_recharge_allowed": true,
  "billable_status_codes": [
    0
  ],
  "created_at": "2026-10-11T12:00:00Z",
  "docs_url": "string",
  "domain": {
    "allowed": true,
    "checked_at": "2026-10-11T12:00:00Z",
    "cname_target": "string",
    "domain": "string",
    "error": "string",
    "status": "none",
    "txt_name": "string",
    "txt_value": "string"
  },
  "first_usage_at": "2026-10-11T12:00:00Z",
  "id": "string",
  "key_header": "string",
  "logo_url": "string",
  "low_balance_micro": 0,
  "min_topup_cents": 0,
  "monthly_quota": 0,
  "name": "string",
  "payg_enabled": true,
  "plan": {
    "code": "string",
    "custom_domain": true,
    "max_customers": 0,
    "monthly_requests": 0,
    "name": "string",
    "price_monthly_cents": 0,
    "purchasable": true,
    "remove_branding": true,
    "teams": true
  },
  "plan_grace_until": "2026-10-11T12:00:00Z",
  "plan_period_end": "2026-10-11T12:00:00Z",
  "plan_status": "active",
  "plans_enabled": true,
  "portal_url": "string",
  "previous_secret_valid_until": "2026-10-11T12:00:00Z",
  "price_per_request_micro": 0,
  "privacy_url": "string",
  "role": "string",
  "rps": 0,
  "sdk_agent": "string",
  "sdk_first_seen_at": "2026-10-11T12:00:00Z",
  "sdk_last_seen_at": "2026-10-11T12:00:00Z",
  "secret_prefix": "string",
  "signup_mode": "open",
  "slug": "string",
  "status": "active",
  "stripe": {
    "account_id": "string",
    "account_name": "string",
    "charges_enabled": true,
    "configured": true,
    "connected": true,
    "connected_at": "2026-10-11T12:00:00Z",
    "livemode": true
  },
  "support_email": "string",
  "suspended_reason": "string",
  "tagline": "string",
  "terms_url": "string",
  "topup_amounts_cents": [
    0
  ],
  "website_url": "string",
  "welcome_credit_micro": 0,
  "workspace_id": "string"
}

PATCH Update an API's settings ​

/api/v1/apis/{id}

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Request body

accent_colorstringUp to 7 characters.
api_base_urlstringUp to 300 characters.
auto_recharge_allowedboolean
billable_status_codesarray of integersUp to 40 items.
docs_urlstringUp to 300 characters.
key_headerstringUp to 40 characters.
low_balance_microinteger
min_topup_centsinteger100 to 100,000.
monthly_quotainteger0 removes the quota.
namestringUp to 80 characters.
payg_enabledboolean
plans_enabledboolean
price_per_request_microinteger0 to 100,000,000.
privacy_urlstringUp to 300 characters.
rpsinteger0 to 100,000.
signup_modestringOne of open, approval, invite.
slugstringUp to 40 characters.
support_emailstringUp to 254 characters.
taglinestringUp to 160 characters.
terms_urlstringUp to 300 characters.
topup_amounts_centsarray of integersUp to 6 items.
website_urlstringUp to 300 characters.
welcome_credit_microinteger0 to 1,000,000,000.

Response 200

accent_colorstring
api_base_urlstringWhere your API runs, shown in the portal quickstart.
auto_recharge_allowedboolean
billable_status_codesarray of integers or null
created_atstring (date-time)
docs_urlstring
domainobject
domain.allowedbooleanThe API's plan includes custom domains.
domain.checked_atstring (date-time)
domain.cname_targetstringPoint the domain here with a CNAME record.
domain.domainstring
domain.errorstring
domain.statusstringOne of none, pending, verified, active, failed.
domain.txt_namestring
domain.txt_valuestring
first_usage_atstring (date-time)
idstring
key_headerstringHeader customers send their key in.
logo_urlstring
low_balance_microinteger
min_topup_centsinteger
monthly_quotaintegerRequests per month per customer, 0 for no limit.
namestring
payg_enabledbooleanCustomers can buy prepaid credit.
planobject
plan.codestring
plan.custom_domainboolean
plan.max_customersinteger
plan.monthly_requestsinteger
plan.namestring
plan.price_monthly_centsinteger
plan.purchasablebooleanTrue when checkout is available for this plan.
plan.remove_brandingboolean
plan.teamsboolean
plan_grace_untilstring (date-time)
plan_period_endstring (date-time)
plan_statusstringOne of active, past_due, canceled.
plans_enabledbooleanCustomers can subscribe to public plans.
portal_urlstring
previous_secret_valid_untilstring (date-time)
price_per_request_microinteger
privacy_urlstring
rolestringYour role in the API's workspace.
rpsintegerRequests per second per customer, 0 for no limit.
sdk_agentstring
sdk_first_seen_atstring (date-time)
sdk_last_seen_atstring (date-time)
secret_prefixstring
signup_modestringOne of open, approval, invite.
slugstring
statusstringOne of active, suspended.
stripeobject
stripe.account_idstring
stripe.account_namestring
stripe.charges_enabledboolean
stripe.configuredbooleanMicroAuth has Stripe Connect set up.
stripe.connectedboolean
stripe.connected_atstring (date-time)
stripe.livemodeboolean
support_emailstring
suspended_reasonstring
taglinestring
terms_urlstring
topup_amounts_centsarray of integers or null
website_urlstring
welcome_credit_microinteger
workspace_idstring
Example request
curl -X PATCH "https://microauth.com/api/v1/apis/{id}" \
  -H "Authorization: Bearer mak_..." \
  -H "Content-Type: application/json" \
  -d '{
  "accent_color": "string",
  "api_base_url": "string",
  "auto_recharge_allowed": true,
  "billable_status_codes": [
    0
  ],
  "docs_url": "string",
  "key_header": "string",
  "low_balance_micro": 0,
  "min_topup_cents": 100,
  "monthly_quota": 0,
  "name": "string",
  "payg_enabled": true,
  "plans_enabled": true,
  "price_per_request_micro": 0,
  "privacy_url": "string",
  "rps": 0,
  "signup_mode": "open",
  "slug": "string",
  "support_email": "string",
  "tagline": "string",
  "terms_url": "string",
  "topup_amounts_cents": [
    0
  ],
  "website_url": "string",
  "welcome_credit_micro": 0
}'
Example response
{
  "accent_color": "string",
  "api_base_url": "string",
  "auto_recharge_allowed": true,
  "billable_status_codes": [
    0
  ],
  "created_at": "2026-10-11T12:00:00Z",
  "docs_url": "string",
  "domain": {
    "allowed": true,
    "checked_at": "2026-10-11T12:00:00Z",
    "cname_target": "string",
    "domain": "string",
    "error": "string",
    "status": "none",
    "txt_name": "string",
    "txt_value": "string"
  },
  "first_usage_at": "2026-10-11T12:00:00Z",
  "id": "string",
  "key_header": "string",
  "logo_url": "string",
  "low_balance_micro": 0,
  "min_topup_cents": 0,
  "monthly_quota": 0,
  "name": "string",
  "payg_enabled": true,
  "plan": {
    "code": "string",
    "custom_domain": true,
    "max_customers": 0,
    "monthly_requests": 0,
    "name": "string",
    "price_monthly_cents": 0,
    "purchasable": true,
    "remove_branding": true,
    "teams": true
  },
  "plan_grace_until": "2026-10-11T12:00:00Z",
  "plan_period_end": "2026-10-11T12:00:00Z",
  "plan_status": "active",
  "plans_enabled": true,
  "portal_url": "string",
  "previous_secret_valid_until": "2026-10-11T12:00:00Z",
  "price_per_request_micro": 0,
  "privacy_url": "string",
  "role": "string",
  "rps": 0,
  "sdk_agent": "string",
  "sdk_first_seen_at": "2026-10-11T12:00:00Z",
  "sdk_last_seen_at": "2026-10-11T12:00:00Z",
  "secret_prefix": "string",
  "signup_mode": "open",
  "slug": "string",
  "status": "active",
  "stripe": {
    "account_id": "string",
    "account_name": "string",
    "charges_enabled": true,
    "configured": true,
    "connected": true,
    "connected_at": "2026-10-11T12:00:00Z",
    "livemode": true
  },
  "support_email": "string",
  "suspended_reason": "string",
  "tagline": "string",
  "terms_url": "string",
  "topup_amounts_cents": [
    0
  ],
  "website_url": "string",
  "welcome_credit_micro": 0,
  "workspace_id": "string"
}

DELETE Delete an API ​

/api/v1/apis/{id}

Auth Dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

okboolean
Example response
{
  "ok": true
}

/api/v1/apis/{id}/logo

Send the image as the raw request body with Content-Type image/png, image/jpeg or image/webp. Up to 512 KB.

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
header Content-Typestring

Response 200

logo_urlstring
Example request
curl -X PUT "https://microauth.com/api/v1/apis/{id}/logo" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "logo_url": "string"
}

/api/v1/apis/{id}/logo

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

okboolean
Example request
curl -X DELETE "https://microauth.com/api/v1/apis/{id}/logo" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "ok": true
}

GET Reveal the SDK secret key ​

/api/v1/apis/{id}/secret

Auth Dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

secretstring
Example response
{
  "secret": "string"
}

POST Rotate the SDK secret key ​

/api/v1/apis/{id}/secret/rotate

Auth Dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Request body

grace_hoursrequiredintegerHow long the old secret keeps working. 0 to 168. Defaults to 24.

Response 200

secretstring
Example response
{
  "secret": "string"
}

GET Get the test customer's key ​

/api/v1/apis/{id}/test-key

Auth Dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

balance_microinteger
customer_idstring
keystring
key_headerstring
Example response
{
  "balance_micro": 0,
  "customer_id": "string",
  "key": "string",
  "key_header": "string"
}

POST Replace the test customer's key ​

/api/v1/apis/{id}/test-key/regenerate

Auth Dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

balance_microinteger
customer_idstring
keystring
key_headerstring
Example response
{
  "balance_micro": 0,
  "customer_id": "string",
  "key": "string",
  "key_header": "string"
}

POST Add $5 of test credit ​

/api/v1/apis/{id}/test-credit

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

balance_microinteger
customer_idstring
keystring
key_headerstring
Example request
curl -X POST "https://microauth.com/api/v1/apis/{id}/test-credit" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "balance_micro": 0,
  "customer_id": "string",
  "key": "string",
  "key_header": "string"
}

GET Integration status ​

/api/v1/apis/{id}/connection

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

customersinteger
first_usage_atstring (date-time)
sdk_agentstring
sdk_connectedbooleanThe SDK fetched a snapshot in the last 10 minutes.
sdk_first_seen_atstring (date-time)
sdk_last_seen_atstring (date-time)
stripe_readyboolean
test_requestsinteger
Example request
curl "https://microauth.com/api/v1/apis/{id}/connection" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "customers": 0,
  "first_usage_at": "2026-10-11T12:00:00Z",
  "sdk_agent": "string",
  "sdk_connected": true,
  "sdk_first_seen_at": "2026-10-11T12:00:00Z",
  "sdk_last_seen_at": "2026-10-11T12:00:00Z",
  "stripe_ready": true,
  "test_requests": 0
}

GET Usage and revenue ​

/api/v1/apis/{id}/stats

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
query daysinteger7 to 90. Defaults to 30.

Response 200

active_customersintegerCustomers with requests this month.
charged_month_microintegerUsage charged to real customers this month.
customersinteger
dailyarray of objects or nullRequests include the test key; charged_micro does not.
daily[].billableinteger
daily[].charged_microinteger
daily[].daystring
daily[].errorsinteger
daily[].requestsinteger
pending_customersinteger
platform_limitinteger
requests_monthintegerAll requests this month, the number your MicroAuth plan counts.
requests_todayintegerAll requests today, test key included.
top_customersarray of objects or nullBusiest customers this month.
top_customers[].balance_microinteger
top_customers[].charged_microinteger
top_customers[].idstring
top_customers[].namestring
top_customers[].requestsinteger
topups_month_microintegerCredit bought with Stripe this month.
Example request
curl "https://microauth.com/api/v1/apis/{id}/stats" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "active_customers": 0,
  "charged_month_micro": 0,
  "customers": 0,
  "daily": [
    {
      "billable": 0,
      "charged_micro": 0,
      "day": "string",
      "errors": 0,
      "requests": 0
    }
  ],
  "pending_customers": 0,
  "platform_limit": 0,
  "requests_month": 0,
  "requests_today": 0,
  "top_customers": [
    {
      "balance_micro": 0,
      "charged_micro": 0,
      "id": "string",
      "name": "string",
      "requests": 0
    }
  ],
  "topups_month_micro": 0
}

PUT Set a custom portal domain ​

/api/v1/apis/{id}/domain

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Request body

domainrequiredstringUp to 253 characters.

Response 200

accent_colorstring
api_base_urlstringWhere your API runs, shown in the portal quickstart.
auto_recharge_allowedboolean
billable_status_codesarray of integers or null
created_atstring (date-time)
docs_urlstring
domainobject
domain.allowedbooleanThe API's plan includes custom domains.
domain.checked_atstring (date-time)
domain.cname_targetstringPoint the domain here with a CNAME record.
domain.domainstring
domain.errorstring
domain.statusstringOne of none, pending, verified, active, failed.
domain.txt_namestring
domain.txt_valuestring
first_usage_atstring (date-time)
idstring
key_headerstringHeader customers send their key in.
logo_urlstring
low_balance_microinteger
min_topup_centsinteger
monthly_quotaintegerRequests per month per customer, 0 for no limit.
namestring
payg_enabledbooleanCustomers can buy prepaid credit.
planobject
plan.codestring
plan.custom_domainboolean
plan.max_customersinteger
plan.monthly_requestsinteger
plan.namestring
plan.price_monthly_centsinteger
plan.purchasablebooleanTrue when checkout is available for this plan.
plan.remove_brandingboolean
plan.teamsboolean
plan_grace_untilstring (date-time)
plan_period_endstring (date-time)
plan_statusstringOne of active, past_due, canceled.
plans_enabledbooleanCustomers can subscribe to public plans.
portal_urlstring
previous_secret_valid_untilstring (date-time)
price_per_request_microinteger
privacy_urlstring
rolestringYour role in the API's workspace.
rpsintegerRequests per second per customer, 0 for no limit.
sdk_agentstring
sdk_first_seen_atstring (date-time)
sdk_last_seen_atstring (date-time)
secret_prefixstring
signup_modestringOne of open, approval, invite.
slugstring
statusstringOne of active, suspended.
stripeobject
stripe.account_idstring
stripe.account_namestring
stripe.charges_enabledboolean
stripe.configuredbooleanMicroAuth has Stripe Connect set up.
stripe.connectedboolean
stripe.connected_atstring (date-time)
stripe.livemodeboolean
support_emailstring
suspended_reasonstring
taglinestring
terms_urlstring
topup_amounts_centsarray of integers or null
website_urlstring
welcome_credit_microinteger
workspace_idstring
Example request
curl -X PUT "https://microauth.com/api/v1/apis/{id}/domain" \
  -H "Authorization: Bearer mak_..." \
  -H "Content-Type: application/json" \
  -d '{
  "domain": "string"
}'
Example response
{
  "accent_color": "string",
  "api_base_url": "string",
  "auto_recharge_allowed": true,
  "billable_status_codes": [
    0
  ],
  "created_at": "2026-10-11T12:00:00Z",
  "docs_url": "string",
  "domain": {
    "allowed": true,
    "checked_at": "2026-10-11T12:00:00Z",
    "cname_target": "string",
    "domain": "string",
    "error": "string",
    "status": "none",
    "txt_name": "string",
    "txt_value": "string"
  },
  "first_usage_at": "2026-10-11T12:00:00Z",
  "id": "string",
  "key_header": "string",
  "logo_url": "string",
  "low_balance_micro": 0,
  "min_topup_cents": 0,
  "monthly_quota": 0,
  "name": "string",
  "payg_enabled": true,
  "plan": {
    "code": "string",
    "custom_domain": true,
    "max_customers": 0,
    "monthly_requests": 0,
    "name": "string",
    "price_monthly_cents": 0,
    "purchasable": true,
    "remove_branding": true,
    "teams": true
  },
  "plan_grace_until": "2026-10-11T12:00:00Z",
  "plan_period_end": "2026-10-11T12:00:00Z",
  "plan_status": "active",
  "plans_enabled": true,
  "portal_url": "string",
  "previous_secret_valid_until": "2026-10-11T12:00:00Z",
  "price_per_request_micro": 0,
  "privacy_url": "string",
  "role": "string",
  "rps": 0,
  "sdk_agent": "string",
  "sdk_first_seen_at": "2026-10-11T12:00:00Z",
  "sdk_last_seen_at": "2026-10-11T12:00:00Z",
  "secret_prefix": "string",
  "signup_mode": "open",
  "slug": "string",
  "status": "active",
  "stripe": {
    "account_id": "string",
    "account_name": "string",
    "charges_enabled": true,
    "configured": true,
    "connected": true,
    "connected_at": "2026-10-11T12:00:00Z",
    "livemode": true
  },
  "support_email": "string",
  "suspended_reason": "string",
  "tagline": "string",
  "terms_url": "string",
  "topup_amounts_cents": [
    0
  ],
  "website_url": "string",
  "welcome_credit_micro": 0,
  "workspace_id": "string"
}

POST Check the custom domain's DNS now ​

/api/v1/apis/{id}/domain/check

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

accent_colorstring
api_base_urlstringWhere your API runs, shown in the portal quickstart.
auto_recharge_allowedboolean
billable_status_codesarray of integers or null
created_atstring (date-time)
docs_urlstring
domainobject
domain.allowedbooleanThe API's plan includes custom domains.
domain.checked_atstring (date-time)
domain.cname_targetstringPoint the domain here with a CNAME record.
domain.domainstring
domain.errorstring
domain.statusstringOne of none, pending, verified, active, failed.
domain.txt_namestring
domain.txt_valuestring
first_usage_atstring (date-time)
idstring
key_headerstringHeader customers send their key in.
logo_urlstring
low_balance_microinteger
min_topup_centsinteger
monthly_quotaintegerRequests per month per customer, 0 for no limit.
namestring
payg_enabledbooleanCustomers can buy prepaid credit.
planobject
plan.codestring
plan.custom_domainboolean
plan.max_customersinteger
plan.monthly_requestsinteger
plan.namestring
plan.price_monthly_centsinteger
plan.purchasablebooleanTrue when checkout is available for this plan.
plan.remove_brandingboolean
plan.teamsboolean
plan_grace_untilstring (date-time)
plan_period_endstring (date-time)
plan_statusstringOne of active, past_due, canceled.
plans_enabledbooleanCustomers can subscribe to public plans.
portal_urlstring
previous_secret_valid_untilstring (date-time)
price_per_request_microinteger
privacy_urlstring
rolestringYour role in the API's workspace.
rpsintegerRequests per second per customer, 0 for no limit.
sdk_agentstring
sdk_first_seen_atstring (date-time)
sdk_last_seen_atstring (date-time)
secret_prefixstring
signup_modestringOne of open, approval, invite.
slugstring
statusstringOne of active, suspended.
stripeobject
stripe.account_idstring
stripe.account_namestring
stripe.charges_enabledboolean
stripe.configuredbooleanMicroAuth has Stripe Connect set up.
stripe.connectedboolean
stripe.connected_atstring (date-time)
stripe.livemodeboolean
support_emailstring
suspended_reasonstring
taglinestring
terms_urlstring
topup_amounts_centsarray of integers or null
website_urlstring
welcome_credit_microinteger
workspace_idstring
Example request
curl -X POST "https://microauth.com/api/v1/apis/{id}/domain/check" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "accent_color": "string",
  "api_base_url": "string",
  "auto_recharge_allowed": true,
  "billable_status_codes": [
    0
  ],
  "created_at": "2026-10-11T12:00:00Z",
  "docs_url": "string",
  "domain": {
    "allowed": true,
    "checked_at": "2026-10-11T12:00:00Z",
    "cname_target": "string",
    "domain": "string",
    "error": "string",
    "status": "none",
    "txt_name": "string",
    "txt_value": "string"
  },
  "first_usage_at": "2026-10-11T12:00:00Z",
  "id": "string",
  "key_header": "string",
  "logo_url": "string",
  "low_balance_micro": 0,
  "min_topup_cents": 0,
  "monthly_quota": 0,
  "name": "string",
  "payg_enabled": true,
  "plan": {
    "code": "string",
    "custom_domain": true,
    "max_customers": 0,
    "monthly_requests": 0,
    "name": "string",
    "price_monthly_cents": 0,
    "purchasable": true,
    "remove_branding": true,
    "teams": true
  },
  "plan_grace_until": "2026-10-11T12:00:00Z",
  "plan_period_end": "2026-10-11T12:00:00Z",
  "plan_status": "active",
  "plans_enabled": true,
  "portal_url": "string",
  "previous_secret_valid_until": "2026-10-11T12:00:00Z",
  "price_per_request_micro": 0,
  "privacy_url": "string",
  "role": "string",
  "rps": 0,
  "sdk_agent": "string",
  "sdk_first_seen_at": "2026-10-11T12:00:00Z",
  "sdk_last_seen_at": "2026-10-11T12:00:00Z",
  "secret_prefix": "string",
  "signup_mode": "open",
  "slug": "string",
  "status": "active",
  "stripe": {
    "account_id": "string",
    "account_name": "string",
    "charges_enabled": true,
    "configured": true,
    "connected": true,
    "connected_at": "2026-10-11T12:00:00Z",
    "livemode": true
  },
  "support_email": "string",
  "suspended_reason": "string",
  "tagline": "string",
  "terms_url": "string",
  "topup_amounts_cents": [
    0
  ],
  "website_url": "string",
  "welcome_credit_micro": 0,
  "workspace_id": "string"
}

DELETE Remove the custom domain ​

/api/v1/apis/{id}/domain

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

accent_colorstring
api_base_urlstringWhere your API runs, shown in the portal quickstart.
auto_recharge_allowedboolean
billable_status_codesarray of integers or null
created_atstring (date-time)
docs_urlstring
domainobject
domain.allowedbooleanThe API's plan includes custom domains.
domain.checked_atstring (date-time)
domain.cname_targetstringPoint the domain here with a CNAME record.
domain.domainstring
domain.errorstring
domain.statusstringOne of none, pending, verified, active, failed.
domain.txt_namestring
domain.txt_valuestring
first_usage_atstring (date-time)
idstring
key_headerstringHeader customers send their key in.
logo_urlstring
low_balance_microinteger
min_topup_centsinteger
monthly_quotaintegerRequests per month per customer, 0 for no limit.
namestring
payg_enabledbooleanCustomers can buy prepaid credit.
planobject
plan.codestring
plan.custom_domainboolean
plan.max_customersinteger
plan.monthly_requestsinteger
plan.namestring
plan.price_monthly_centsinteger
plan.purchasablebooleanTrue when checkout is available for this plan.
plan.remove_brandingboolean
plan.teamsboolean
plan_grace_untilstring (date-time)
plan_period_endstring (date-time)
plan_statusstringOne of active, past_due, canceled.
plans_enabledbooleanCustomers can subscribe to public plans.
portal_urlstring
previous_secret_valid_untilstring (date-time)
price_per_request_microinteger
privacy_urlstring
rolestringYour role in the API's workspace.
rpsintegerRequests per second per customer, 0 for no limit.
sdk_agentstring
sdk_first_seen_atstring (date-time)
sdk_last_seen_atstring (date-time)
secret_prefixstring
signup_modestringOne of open, approval, invite.
slugstring
statusstringOne of active, suspended.
stripeobject
stripe.account_idstring
stripe.account_namestring
stripe.charges_enabledboolean
stripe.configuredbooleanMicroAuth has Stripe Connect set up.
stripe.connectedboolean
stripe.connected_atstring (date-time)
stripe.livemodeboolean
support_emailstring
suspended_reasonstring
taglinestring
terms_urlstring
topup_amounts_centsarray of integers or null
website_urlstring
welcome_credit_microinteger
workspace_idstring
Example request
curl -X DELETE "https://microauth.com/api/v1/apis/{id}/domain" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "accent_color": "string",
  "api_base_url": "string",
  "auto_recharge_allowed": true,
  "billable_status_codes": [
    0
  ],
  "created_at": "2026-10-11T12:00:00Z",
  "docs_url": "string",
  "domain": {
    "allowed": true,
    "checked_at": "2026-10-11T12:00:00Z",
    "cname_target": "string",
    "domain": "string",
    "error": "string",
    "status": "none",
    "txt_name": "string",
    "txt_value": "string"
  },
  "first_usage_at": "2026-10-11T12:00:00Z",
  "id": "string",
  "key_header": "string",
  "logo_url": "string",
  "low_balance_micro": 0,
  "min_topup_cents": 0,
  "monthly_quota": 0,
  "name": "string",
  "payg_enabled": true,
  "plan": {
    "code": "string",
    "custom_domain": true,
    "max_customers": 0,
    "monthly_requests": 0,
    "name": "string",
    "price_monthly_cents": 0,
    "purchasable": true,
    "remove_branding": true,
    "teams": true
  },
  "plan_grace_until": "2026-10-11T12:00:00Z",
  "plan_period_end": "2026-10-11T12:00:00Z",
  "plan_status": "active",
  "plans_enabled": true,
  "portal_url": "string",
  "previous_secret_valid_until": "2026-10-11T12:00:00Z",
  "price_per_request_micro": 0,
  "privacy_url": "string",
  "role": "string",
  "rps": 0,
  "sdk_agent": "string",
  "sdk_first_seen_at": "2026-10-11T12:00:00Z",
  "sdk_last_seen_at": "2026-10-11T12:00:00Z",
  "secret_prefix": "string",
  "signup_mode": "open",
  "slug": "string",
  "status": "active",
  "stripe": {
    "account_id": "string",
    "account_name": "string",
    "charges_enabled": true,
    "configured": true,
    "connected": true,
    "connected_at": "2026-10-11T12:00:00Z",
    "livemode": true
  },
  "support_email": "string",
  "suspended_reason": "string",
  "tagline": "string",
  "terms_url": "string",
  "topup_amounts_cents": [
    0
  ],
  "website_url": "string",
  "welcome_credit_micro": 0,
  "workspace_id": "string"
}

Customers ​

Customers of an API, with their keys, limits, credit, ledger and usage.

GET List customers ​

/api/v1/apis/{id}/customers

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
query statusstringOne of active, pending, suspended.
query qstringUp to 100 characters.
query plan_idstring
query cursorstringnext_cursor from the previous page.
query limitinteger1 to 200. Defaults to 50.

Response 200

customersarray of objects or null
customers[].balance_microinteger
customers[].created_atstring (date-time)
customers[].custom_limitsboolean
customers[].emailstring
customers[].idstring
customers[].is_testboolean
customers[].last_used_atstring (date-time)
customers[].month_requestsinteger
customers[].namestring
customers[].plan_idstring
customers[].plan_namestring
customers[].statusstringOne of active, pending, suspended.
next_cursorstring
Example request
curl "https://microauth.com/api/v1/apis/{id}/customers" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "customers": [
    {
      "balance_micro": 0,
      "created_at": "2026-10-11T12:00:00Z",
      "custom_limits": true,
      "email": "string",
      "id": "string",
      "is_test": true,
      "last_used_at": "2026-10-11T12:00:00Z",
      "month_requests": 0,
      "name": "string",
      "plan_id": "string",
      "plan_name": "string",
      "status": "active"
    }
  ],
  "next_cursor": "string"
}

POST Invite a customer to the portal ​

/api/v1/apis/{id}/customers/invite

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Request body

emailrequiredstringUp to 254 characters.

Response 201

sentboolean
Example request
curl -X POST "https://microauth.com/api/v1/apis/{id}/customers/invite" \
  -H "Authorization: Bearer mak_..." \
  -H "Content-Type: application/json" \
  -d '{
  "email": "string"
}'
Example response
{
  "sent": true
}

GET Get a customer ​

/api/v1/apis/{id}/customers/{customer}

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
customerrequiredstring (uuid)Customer ID.

Response 200

auto_rechargeobject
auto_recharge.amount_centsinteger
auto_recharge.enabledboolean
auto_recharge.failed_atstring (date-time)
auto_recharge.has_cardboolean
auto_recharge.threshold_microinteger
balance_microinteger
created_atstring (date-time)
customobject
custom.monthly_quotainteger or null
custom.price_per_request_microinteger or null0 to 100,000,000.
custom.rpsinteger or null0 to 100,000.
custom_limitsboolean
effectiveobject
effective.billing_modelstringOne of payg, subscription, none.
effective.monthly_quotainteger
effective.price_per_request_microinteger
effective.rpsinteger
effective.sourcestringOne of custom, plan, payg.
emailstring
idstring
is_testboolean
keysarray of objects or null
keys[].created_atstring (date-time)
keys[].idstring
keys[].last_used_atstring (date-time)
keys[].namestring
keys[].prefixstring
last_used_atstring (date-time)
low_balance_microinteger
membersarray of objects or null
members[].created_atstring (date-time)
members[].emailstring
members[].idstring
members[].last_login_atstring (date-time)
members[].namestring
members[].rolestring
month_requestsinteger
namestring
notesstring
plan_idstring
plan_namestring
plan_sourcestringOne of manual, stripe.
statusstringOne of active, pending, suspended.
stripe_customer_idstring
subscription_period_endstring (date-time)
subscription_statusstring
Example request
curl "https://microauth.com/api/v1/apis/{id}/customers/{customer}" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "auto_recharge": {
    "amount_cents": 0,
    "enabled": true,
    "failed_at": "2026-10-11T12:00:00Z",
    "has_card": true,
    "threshold_micro": 0
  },
  "balance_micro": 0,
  "created_at": "2026-10-11T12:00:00Z",
  "custom": {
    "monthly_quota": 0,
    "price_per_request_micro": 0,
    "rps": 0
  },
  "custom_limits": true,
  "effective": {
    "billing_model": "payg",
    "monthly_quota": 0,
    "price_per_request_micro": 0,
    "rps": 0,
    "source": "custom"
  },
  "email": "string",
  "id": "string",
  "is_test": true,
  "keys": [
    {
      "created_at": "2026-10-11T12:00:00Z",
      "id": "string",
      "last_used_at": "2026-10-11T12:00:00Z",
      "name": "string",
      "prefix": "string"
    }
  ],
  "last_used_at": "2026-10-11T12:00:00Z",
  "low_balance_micro": 0,
  "members": [
    {
      "created_at": "2026-10-11T12:00:00Z",
      "email": "string",
      "id": "string",
      "last_login_at": "2026-10-11T12:00:00Z",
      "name": "string",
      "role": "string"
    }
  ],
  "month_requests": 0,
  "name": "string",
  "notes": "string",
  "plan_id": "string",
  "plan_name": "string",
  "plan_source": "manual",
  "status": "active",
  "stripe_customer_id": "string",
  "subscription_period_end": "2026-10-11T12:00:00Z",
  "subscription_status": "string"
}

PATCH Update a customer ​

/api/v1/apis/{id}/customers/{customer}

Approve a pending customer with status active. Suspending blocks the customer's keys within a minute.

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
customerrequiredstring (uuid)Customer ID.

Request body

low_balance_microinteger-1 uses the API default. At least -1.
namestringUp to 100 characters.
notesstringUp to 2,000 characters.
plan_idstringPut the customer on a plan without Stripe. Send an empty string to remove the plan.
statusstringOne of active, suspended.

Response 200

auto_rechargeobject
auto_recharge.amount_centsinteger
auto_recharge.enabledboolean
auto_recharge.failed_atstring (date-time)
auto_recharge.has_cardboolean
auto_recharge.threshold_microinteger
balance_microinteger
created_atstring (date-time)
customobject
custom.monthly_quotainteger or null
custom.price_per_request_microinteger or null0 to 100,000,000.
custom.rpsinteger or null0 to 100,000.
custom_limitsboolean
effectiveobject
effective.billing_modelstringOne of payg, subscription, none.
effective.monthly_quotainteger
effective.price_per_request_microinteger
effective.rpsinteger
effective.sourcestringOne of custom, plan, payg.
emailstring
idstring
is_testboolean
keysarray of objects or null
keys[].created_atstring (date-time)
keys[].idstring
keys[].last_used_atstring (date-time)
keys[].namestring
keys[].prefixstring
last_used_atstring (date-time)
low_balance_microinteger
membersarray of objects or null
members[].created_atstring (date-time)
members[].emailstring
members[].idstring
members[].last_login_atstring (date-time)
members[].namestring
members[].rolestring
month_requestsinteger
namestring
notesstring
plan_idstring
plan_namestring
plan_sourcestringOne of manual, stripe.
statusstringOne of active, pending, suspended.
stripe_customer_idstring
subscription_period_endstring (date-time)
subscription_statusstring
Example request
curl -X PATCH "https://microauth.com/api/v1/apis/{id}/customers/{customer}" \
  -H "Authorization: Bearer mak_..." \
  -H "Content-Type: application/json" \
  -d '{
  "low_balance_micro": 0,
  "name": "string",
  "notes": "string",
  "plan_id": "string",
  "status": "active"
}'
Example response
{
  "auto_recharge": {
    "amount_cents": 0,
    "enabled": true,
    "failed_at": "2026-10-11T12:00:00Z",
    "has_card": true,
    "threshold_micro": 0
  },
  "balance_micro": 0,
  "created_at": "2026-10-11T12:00:00Z",
  "custom": {
    "monthly_quota": 0,
    "price_per_request_micro": 0,
    "rps": 0
  },
  "custom_limits": true,
  "effective": {
    "billing_model": "payg",
    "monthly_quota": 0,
    "price_per_request_micro": 0,
    "rps": 0,
    "source": "custom"
  },
  "email": "string",
  "id": "string",
  "is_test": true,
  "keys": [
    {
      "created_at": "2026-10-11T12:00:00Z",
      "id": "string",
      "last_used_at": "2026-10-11T12:00:00Z",
      "name": "string",
      "prefix": "string"
    }
  ],
  "last_used_at": "2026-10-11T12:00:00Z",
  "low_balance_micro": 0,
  "members": [
    {
      "created_at": "2026-10-11T12:00:00Z",
      "email": "string",
      "id": "string",
      "last_login_at": "2026-10-11T12:00:00Z",
      "name": "string",
      "role": "string"
    }
  ],
  "month_requests": 0,
  "name": "string",
  "notes": "string",
  "plan_id": "string",
  "plan_name": "string",
  "plan_source": "manual",
  "status": "active",
  "stripe_customer_id": "string",
  "subscription_period_end": "2026-10-11T12:00:00Z",
  "subscription_status": "string"
}

DELETE Delete a customer ​

/api/v1/apis/{id}/customers/{customer}

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
customerrequiredstring (uuid)Customer ID.

Response 200

okboolean
Example request
curl -X DELETE "https://microauth.com/api/v1/apis/{id}/customers/{customer}" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "ok": true
}

PUT Set custom limits ​

/api/v1/apis/{id}/customers/{customer}/limits

Custom limits beat the customer's plan and the API defaults. null inherits.

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
customerrequiredstring (uuid)Customer ID.

Request body

monthly_quotainteger or null
price_per_request_microinteger or null0 to 100,000,000.
rpsinteger or null0 to 100,000.

Response 200

auto_rechargeobject
auto_recharge.amount_centsinteger
auto_recharge.enabledboolean
auto_recharge.failed_atstring (date-time)
auto_recharge.has_cardboolean
auto_recharge.threshold_microinteger
balance_microinteger
created_atstring (date-time)
customobject
custom.monthly_quotainteger or null
custom.price_per_request_microinteger or null0 to 100,000,000.
custom.rpsinteger or null0 to 100,000.
custom_limitsboolean
effectiveobject
effective.billing_modelstringOne of payg, subscription, none.
effective.monthly_quotainteger
effective.price_per_request_microinteger
effective.rpsinteger
effective.sourcestringOne of custom, plan, payg.
emailstring
idstring
is_testboolean
keysarray of objects or null
keys[].created_atstring (date-time)
keys[].idstring
keys[].last_used_atstring (date-time)
keys[].namestring
keys[].prefixstring
last_used_atstring (date-time)
low_balance_microinteger
membersarray of objects or null
members[].created_atstring (date-time)
members[].emailstring
members[].idstring
members[].last_login_atstring (date-time)
members[].namestring
members[].rolestring
month_requestsinteger
namestring
notesstring
plan_idstring
plan_namestring
plan_sourcestringOne of manual, stripe.
statusstringOne of active, pending, suspended.
stripe_customer_idstring
subscription_period_endstring (date-time)
subscription_statusstring
Example request
curl -X PUT "https://microauth.com/api/v1/apis/{id}/customers/{customer}/limits" \
  -H "Authorization: Bearer mak_..." \
  -H "Content-Type: application/json" \
  -d '{
  "monthly_quota": 0,
  "price_per_request_micro": 0,
  "rps": 0
}'
Example response
{
  "auto_recharge": {
    "amount_cents": 0,
    "enabled": true,
    "failed_at": "2026-10-11T12:00:00Z",
    "has_card": true,
    "threshold_micro": 0
  },
  "balance_micro": 0,
  "created_at": "2026-10-11T12:00:00Z",
  "custom": {
    "monthly_quota": 0,
    "price_per_request_micro": 0,
    "rps": 0
  },
  "custom_limits": true,
  "effective": {
    "billing_model": "payg",
    "monthly_quota": 0,
    "price_per_request_micro": 0,
    "rps": 0,
    "source": "custom"
  },
  "email": "string",
  "id": "string",
  "is_test": true,
  "keys": [
    {
      "created_at": "2026-10-11T12:00:00Z",
      "id": "string",
      "last_used_at": "2026-10-11T12:00:00Z",
      "name": "string",
      "prefix": "string"
    }
  ],
  "last_used_at": "2026-10-11T12:00:00Z",
  "low_balance_micro": 0,
  "members": [
    {
      "created_at": "2026-10-11T12:00:00Z",
      "email": "string",
      "id": "string",
      "last_login_at": "2026-10-11T12:00:00Z",
      "name": "string",
      "role": "string"
    }
  ],
  "month_requests": 0,
  "name": "string",
  "notes": "string",
  "plan_id": "string",
  "plan_name": "string",
  "plan_source": "manual",
  "status": "active",
  "stripe_customer_id": "string",
  "subscription_period_end": "2026-10-11T12:00:00Z",
  "subscription_status": "string"
}

POST Add or remove credit ​

/api/v1/apis/{id}/customers/{customer}/credits

Use this to sell credit outside Stripe. Pass ref to make the call safe to retry.

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
customerrequiredstring (uuid)Customer ID.

Request body

amount_microrequiredintegerPositive adds credit, negative removes it. 1,000,000 is $1. -100,000,000,000 to 100,000,000,000.
noterequiredstringUp to 300 characters.
refstringYour idempotency reference, for example an invoice number. A repeated ref is ignored. Up to 200 characters.

Response 200

appliedbooleanFalse when this ref was already applied.
balance_microinteger
Example request
curl -X POST "https://microauth.com/api/v1/apis/{id}/customers/{customer}/credits" \
  -H "Authorization: Bearer mak_..." \
  -H "Content-Type: application/json" \
  -d '{
  "amount_micro": 0,
  "note": "string",
  "ref": "string"
}'
Example response
{
  "applied": true,
  "balance_micro": 0
}

GET Customer ledger ​

/api/v1/apis/{id}/customers/{customer}/ledger

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
customerrequiredstring (uuid)Customer ID.
query cursorstring
query limitinteger1 to 200. Defaults to 50.

Response 200

entriesarray of objects or null
entries[].actorstring
entries[].amount_microinteger
entries[].created_atstring (date-time)
entries[].customer_idstring
entries[].customer_namestring
entries[].idstring
entries[].kindstring
entries[].notestring
entries[].refstring
entries[].requestsinteger
entries[].updated_atstring (date-time)
entries[].usage_daystring (date-time)
next_cursorstring
Example request
curl "https://microauth.com/api/v1/apis/{id}/customers/{customer}/ledger" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "entries": [
    {
      "actor": "string",
      "amount_micro": 0,
      "created_at": "2026-10-11T12:00:00Z",
      "customer_id": "string",
      "customer_name": "string",
      "id": "string",
      "kind": "string",
      "note": "string",
      "ref": "string",
      "requests": 0,
      "updated_at": "2026-10-11T12:00:00Z",
      "usage_day": "2026-10-11T12:00:00Z"
    }
  ],
  "next_cursor": "string"
}

GET Customer usage by day ​

/api/v1/apis/{id}/customers/{customer}/usage

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
customerrequiredstring (uuid)Customer ID.
query daysinteger1 to 90. Defaults to 30.

Response 200

OK

Example request
curl "https://microauth.com/api/v1/apis/{id}/customers/{customer}/usage" \
  -H "Authorization: Bearer mak_..."
Example response
[
  {
    "billable": 0,
    "charged_micro": 0,
    "day": "string",
    "errors": 0,
    "requests": 0
  }
]

DELETE Revoke a customer's key ​

/api/v1/apis/{id}/customers/{customer}/keys/{key}

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
customerrequiredstring (uuid)Customer ID.
keyrequiredstring (uuid)Key ID.

Response 200

okboolean
Example request
curl -X DELETE "https://microauth.com/api/v1/apis/{id}/customers/{customer}/keys/{key}" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "ok": true
}

GET API ledger ​

/api/v1/apis/{id}/ledger

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
query kindstringComma separated kinds, for example topup,refund.
query cursorstring
query limitinteger1 to 200. Defaults to 50.

Response 200

entriesarray of objects or null
entries[].actorstring
entries[].amount_microinteger
entries[].created_atstring (date-time)
entries[].customer_idstring
entries[].customer_namestring
entries[].idstring
entries[].kindstring
entries[].notestring
entries[].refstring
entries[].requestsinteger
entries[].updated_atstring (date-time)
entries[].usage_daystring (date-time)
next_cursorstring
Example request
curl "https://microauth.com/api/v1/apis/{id}/ledger" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "entries": [
    {
      "actor": "string",
      "amount_micro": 0,
      "created_at": "2026-10-11T12:00:00Z",
      "customer_id": "string",
      "customer_name": "string",
      "id": "string",
      "kind": "string",
      "note": "string",
      "ref": "string",
      "requests": 0,
      "updated_at": "2026-10-11T12:00:00Z",
      "usage_day": "2026-10-11T12:00:00Z"
    }
  ],
  "next_cursor": "string"
}

GET Export customers as CSV ​

/api/v1/apis/{id}/customers/export

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

OK

Example request
curl "https://microauth.com/api/v1/apis/{id}/customers/export" \
  -H "Authorization: Bearer mak_..."

Pricing ​

Subscription plans your customers can pick on the portal.

GET List plans ​

/api/v1/apis/{id}/plans

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

OK

Example request
curl "https://microauth.com/api/v1/apis/{id}/plans" \
  -H "Authorization: Bearer mak_..."
Example response
[
  {
    "active": true,
    "created_at": "2026-10-11T12:00:00Z",
    "credit_micro": 0,
    "description": "string",
    "id": "string",
    "monthly_quota": 0,
    "name": "string",
    "price_monthly_cents": 0,
    "price_per_request_micro": 0,
    "rps": 0,
    "sort": 0,
    "stripe_price_id": "string",
    "stripe_sync_error": "string",
    "stripe_synced_at": "2026-10-11T12:00:00Z",
    "subscribers": 0,
    "visibility": "public"
  }
]

POST Create a plan ​

/api/v1/apis/{id}/plans

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Request body

activeboolean
credit_microinteger0 to 100,000,000,000.
descriptionstringUp to 300 characters.
monthly_quotainteger or null
namerequiredstringUp to 60 characters.
price_monthly_centsrequiredinteger0 to 1,000,000.
price_per_request_microinteger or null0 to 100,000,000.
rpsinteger or null0 to 100,000.
sortinteger0 to 1,000.
visibilitystringOne of public, private. Defaults to "public".

Response 201

activeboolean
created_atstring (date-time)
credit_microintegerCredit added on every paid invoice.
descriptionstring
idstring
monthly_quotainteger or nullnull uses the API default, 0 is unlimited.
namestring
price_monthly_centsinteger
price_per_request_microinteger or nullnull uses the API default.
rpsinteger or nullnull uses the API default, 0 is unlimited.
sortinteger
stripe_price_idstring
stripe_sync_errorstring
stripe_synced_atstring (date-time)
subscribersinteger
visibilitystringOne of public, private.
Example request
curl -X POST "https://microauth.com/api/v1/apis/{id}/plans" \
  -H "Authorization: Bearer mak_..." \
  -H "Content-Type: application/json" \
  -d '{
  "active": true,
  "credit_micro": 0,
  "description": "string",
  "monthly_quota": 0,
  "name": "string",
  "price_monthly_cents": 0,
  "price_per_request_micro": 0,
  "rps": 0,
  "sort": 0,
  "visibility": "public"
}'
Example response
{
  "active": true,
  "created_at": "2026-10-11T12:00:00Z",
  "credit_micro": 0,
  "description": "string",
  "id": "string",
  "monthly_quota": 0,
  "name": "string",
  "price_monthly_cents": 0,
  "price_per_request_micro": 0,
  "rps": 0,
  "sort": 0,
  "stripe_price_id": "string",
  "stripe_sync_error": "string",
  "stripe_synced_at": "2026-10-11T12:00:00Z",
  "subscribers": 0,
  "visibility": "public"
}

PUT Update a plan ​

/api/v1/apis/{id}/plans/{plan}

Replaces the plan's settings. A changed monthly price creates a new Stripe price for new subscribers; current subscribers keep their price until they change plans.

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
planrequiredstring (uuid)Plan ID.

Request body

activeboolean
credit_microinteger0 to 100,000,000,000.
descriptionstringUp to 300 characters.
monthly_quotainteger or null
namerequiredstringUp to 60 characters.
price_monthly_centsrequiredinteger0 to 1,000,000.
price_per_request_microinteger or null0 to 100,000,000.
rpsinteger or null0 to 100,000.
sortinteger0 to 1,000.
visibilitystringOne of public, private. Defaults to "public".

Response 200

activeboolean
created_atstring (date-time)
credit_microintegerCredit added on every paid invoice.
descriptionstring
idstring
monthly_quotainteger or nullnull uses the API default, 0 is unlimited.
namestring
price_monthly_centsinteger
price_per_request_microinteger or nullnull uses the API default.
rpsinteger or nullnull uses the API default, 0 is unlimited.
sortinteger
stripe_price_idstring
stripe_sync_errorstring
stripe_synced_atstring (date-time)
subscribersinteger
visibilitystringOne of public, private.
Example request
curl -X PUT "https://microauth.com/api/v1/apis/{id}/plans/{plan}" \
  -H "Authorization: Bearer mak_..." \
  -H "Content-Type: application/json" \
  -d '{
  "active": true,
  "credit_micro": 0,
  "description": "string",
  "monthly_quota": 0,
  "name": "string",
  "price_monthly_cents": 0,
  "price_per_request_micro": 0,
  "rps": 0,
  "sort": 0,
  "visibility": "public"
}'
Example response
{
  "active": true,
  "created_at": "2026-10-11T12:00:00Z",
  "credit_micro": 0,
  "description": "string",
  "id": "string",
  "monthly_quota": 0,
  "name": "string",
  "price_monthly_cents": 0,
  "price_per_request_micro": 0,
  "rps": 0,
  "sort": 0,
  "stripe_price_id": "string",
  "stripe_sync_error": "string",
  "stripe_synced_at": "2026-10-11T12:00:00Z",
  "subscribers": 0,
  "visibility": "public"
}

DELETE Delete or archive a plan ​

/api/v1/apis/{id}/plans/{plan}

Plans with subscribers are archived instead: they stay on the plan but nobody new can pick it.

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.
planrequiredstring (uuid)Plan ID.

Response 200

okboolean
Example request
curl -X DELETE "https://microauth.com/api/v1/apis/{id}/plans/{plan}" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "ok": true
}

Payments ​

Connect Stripe so your customers can pay you.

POST Start connecting Stripe ​

/api/v1/apis/{id}/stripe/connect

Returns the Stripe address to send the browser to. Stripe sends the owner back to the dashboard when they finish.

Auth Dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

changedbooleanTrue when the change already happened.
urlstringSend the browser here to finish in Stripe.
Example response
{
  "changed": true,
  "url": "string"
}

POST Refresh the Stripe account status ​

/api/v1/apis/{id}/stripe/refresh

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

account_idstring
account_namestring
charges_enabledboolean
configuredbooleanMicroAuth has Stripe Connect set up.
connectedboolean
connected_atstring (date-time)
livemodeboolean
Example request
curl -X POST "https://microauth.com/api/v1/apis/{id}/stripe/refresh" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "account_id": "string",
  "account_name": "string",
  "charges_enabled": true,
  "configured": true,
  "connected": true,
  "connected_at": "2026-10-11T12:00:00Z",
  "livemode": true
}

DELETE Disconnect Stripe ​

/api/v1/apis/{id}/stripe

Card payments stop right away. Existing subscriptions keep running in Stripe until you cancel them there.

Auth Dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Response 200

okboolean
Example response
{
  "ok": true
}

MicroAuth plan ​

The plan each API is on with MicroAuth, and billing for it.

GET MicroAuth plans ​

/api/v1/platform-plans

Auth NoneServer https://microauth.com

Response 200

OK

Example request
curl "https://microauth.com/api/v1/platform-plans"
Example response
[
  {
    "code": "string",
    "custom_domain": true,
    "max_customers": 0,
    "monthly_requests": 0,
    "name": "string",
    "price_monthly_cents": 0,
    "purchasable": true,
    "remove_branding": true,
    "teams": true
  }
]

POST Change the API's MicroAuth plan ​

/api/v1/apis/{id}/plan

Returns a Stripe Checkout address for a first paid plan. Changes between paid plans and moves to Free apply right away.

Auth Dashboard sessionServer https://microauth.com

Parameters

idrequiredstring (uuid)API ID.

Request body

plan_coderequiredstringUp to 32 characters.

Response 200

changedbooleanTrue when the change already happened.
urlstringSend the browser here to finish in Stripe.
Example response
{
  "changed": true,
  "url": "string"
}

POST Open MicroAuth billing ​

/api/v1/workspaces/{wid}/billing-portal

Auth Dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.

Response 200

changedbooleanTrue when the change already happened.
urlstringSend the browser here to finish in Stripe.
Example response
{
  "changed": true,
  "url": "string"
}

Workspaces ​

Workspaces, members, invites, workspace API keys and the activity log.

POST Create a workspace ​

/api/v1/workspaces

Auth Dashboard sessionServer https://microauth.com

Request body

namerequiredstringUp to 100 characters.

Response 201

api_countinteger
created_atstring (date-time)
idstring
namestring
rolestring
Example response
{
  "api_count": 0,
  "created_at": "2026-10-11T12:00:00Z",
  "id": "string",
  "name": "string",
  "role": "string"
}

GET Get a workspace ​

/api/v1/workspaces/{wid}

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.

Response 200

api_countinteger
created_atstring (date-time)
idstring
namestring
rolestring
teams_allowedbooleanInviting teammates needs an API on a plan that includes teams.
Example request
curl "https://microauth.com/api/v1/workspaces/{wid}" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "api_count": 0,
  "created_at": "2026-10-11T12:00:00Z",
  "id": "string",
  "name": "string",
  "role": "string",
  "teams_allowed": true
}

PATCH Rename a workspace ​

/api/v1/workspaces/{wid}

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.

Request body

namerequiredstringUp to 100 characters.

Response 200

okboolean
Example request
curl -X PATCH "https://microauth.com/api/v1/workspaces/{wid}" \
  -H "Authorization: Bearer mak_..." \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string"
}'
Example response
{
  "ok": true
}

DELETE Delete an empty workspace ​

/api/v1/workspaces/{wid}

Auth Dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.

Response 200

okboolean
Example response
{
  "ok": true
}

GET List members and pending invites ​

/api/v1/workspaces/{wid}/members

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.

Response 200

invitesarray of objects or null
invites[].created_atstring (date-time)
invites[].emailstring
invites[].expires_atstring (date-time)
invites[].idstring
invites[].rolestring
membersarray of objects or null
members[].emailstring
members[].joined_atstring (date-time)
members[].namestring
members[].rolestring
members[].two_factorboolean
members[].user_idstring
Example request
curl "https://microauth.com/api/v1/workspaces/{wid}/members" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "invites": [
    {
      "created_at": "2026-10-11T12:00:00Z",
      "email": "string",
      "expires_at": "2026-10-11T12:00:00Z",
      "id": "string",
      "role": "string"
    }
  ],
  "members": [
    {
      "email": "string",
      "joined_at": "2026-10-11T12:00:00Z",
      "name": "string",
      "role": "string",
      "two_factor": true,
      "user_id": "string"
    }
  ]
}

POST Invite a teammate ​

/api/v1/workspaces/{wid}/invites

Auth Dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.

Request body

emailrequiredstringUp to 254 characters.
rolerequiredstringOne of admin, editor, viewer.

Response 201

created_atstring (date-time)
emailstring
expires_atstring (date-time)
idstring
rolestring
Example response
{
  "created_at": "2026-10-11T12:00:00Z",
  "email": "string",
  "expires_at": "2026-10-11T12:00:00Z",
  "id": "string",
  "role": "string"
}

DELETE Cancel an invite ​

/api/v1/workspaces/{wid}/invites/{item}

Auth Dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.
itemrequiredstring (uuid)The member's user ID, the invite ID or the key ID, matching the path.

Response 200

okboolean
Example response
{
  "ok": true
}

PATCH Change a member's role ​

/api/v1/workspaces/{wid}/members/{item}

Auth Dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.
itemrequiredstring (uuid)User ID of the member.

Request body

rolerequiredstringOne of owner, admin, editor, viewer.

Response 200

okboolean
Example response
{
  "ok": true
}

DELETE Remove a member or leave ​

/api/v1/workspaces/{wid}/members/{item}

Auth Dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.
itemrequiredstring (uuid)The member's user ID, the invite ID or the key ID, matching the path.

Response 200

okboolean
Example response
{
  "ok": true
}

GET List workspace API keys ​

/api/v1/workspaces/{wid}/keys

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.

Response 200

OK

Example request
curl "https://microauth.com/api/v1/workspaces/{wid}/keys" \
  -H "Authorization: Bearer mak_..."
Example response
[
  {
    "created_at": "2026-10-11T12:00:00Z",
    "id": "string",
    "last_used_at": "2026-10-11T12:00:00Z",
    "name": "string",
    "prefix": "string",
    "role": "string"
  }
]

POST Create a workspace API key ​

/api/v1/workspaces/{wid}/keys

Auth Dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.

Request body

namerequiredstringUp to 80 characters.
rolerequiredstringOne of admin, editor, viewer. Defaults to "editor".

Response 201

created_atstring (date-time)
idstring
keystringShown once. Store it somewhere safe.
last_used_atstring (date-time)
namestring
prefixstring
rolestring
Example response
{
  "created_at": "2026-10-11T12:00:00Z",
  "id": "string",
  "key": "string",
  "last_used_at": "2026-10-11T12:00:00Z",
  "name": "string",
  "prefix": "string",
  "role": "string"
}

DELETE Revoke a workspace API key ​

/api/v1/workspaces/{wid}/keys/{item}

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.
itemrequiredstring (uuid)The member's user ID, the invite ID or the key ID, matching the path.

Response 200

okboolean
Example request
curl -X DELETE "https://microauth.com/api/v1/workspaces/{wid}/keys/{item}" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "ok": true
}

GET Activity log ​

/api/v1/workspaces/{wid}/audit

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.
query api_idstringOnly events for this API.
query customer_idstringOnly events for this customer.
query actionstringAction prefix, for example customer. or key.revoked.
query actorstringActor type: user, key, portal_user, system, stripe or admin.
query qstringMatches the summary or actor name. Up to 100 characters.
query beforestringCursor from next_before.
query sincestringOnly events after this RFC 3339 time.
query limitinteger1 to 200. Defaults to 50.

Response 200

eventsarray of objects or null
events[].actionstring
events[].actor_idstring
events[].actor_namestring
events[].actor_typestring
events[].api_idstring
events[].api_namestring
events[].created_atstring (date-time)
events[].customer_idstring
events[].customer_namestring
events[].detailsobject
events[].idstring
events[].ipstring
events[].summarystring
events[].target_idstring
events[].target_typestring
next_beforestring
Example request
curl "https://microauth.com/api/v1/workspaces/{wid}/audit" \
  -H "Authorization: Bearer mak_..."
Example response
{
  "events": [
    {
      "action": "string",
      "actor_id": "string",
      "actor_name": "string",
      "actor_type": "string",
      "api_id": "string",
      "api_name": "string",
      "created_at": "2026-10-11T12:00:00Z",
      "customer_id": "string",
      "customer_name": "string",
      "details": {},
      "id": "string",
      "ip": "string",
      "summary": "string",
      "target_id": "string",
      "target_type": "string"
    }
  ],
  "next_before": "string"
}

GET Export the activity log ​

/api/v1/workspaces/{wid}/audit/export

Streams every matching event as CSV or JSON Lines, newest first, up to 100,000 rows.

Auth Workspace API key or dashboard sessionServer https://microauth.com

Parameters

widrequiredstring (uuid)Workspace ID.
query api_idstringOnly events for this API.
query customer_idstringOnly events for this customer.
query actionstringAction prefix, for example customer. or key.revoked.
query actorstringActor type: user, key, portal_user, system, stripe or admin.
query qstringMatches the summary or actor name. Up to 100 characters.
query beforestringCursor from next_before.
query sincestringOnly events after this RFC 3339 time.
query limitinteger1 to 200. Defaults to 50.
query formatstringOne of csv, json. Defaults to "csv".

Response 200

OK

Example request
curl "https://microauth.com/api/v1/workspaces/{wid}/audit/export" \
  -H "Authorization: Bearer mak_..."

SDK ​

Called by the SDK, or by your own integration, with the SDK secret key. These live on https://api.microauth.com.

GET Get the access snapshot ​

/sdk/v1/snapshot

Customers, key hashes and effective limits for the API that owns the secret. Poll it about every 30 seconds with If-None-Match.

Auth SDK secret keyServer https://api.microauth.com

Parameters

header If-None-Matchstring

Response 200

header ETagstringSend it back as If-None-Match to get a 304 when nothing changed.
header X-MicroAuth-Generated-Atstringgenerated_at of the snapshot, sent on 304 responses too.
billable_status_codesarray of integers or nullResponses with these status codes are charged. Report every status, since all of them count toward quotas.
customersarray of objects or null
customers[].balance_seqintegerGrows with every balance change. Compare it to order balance observations of one customer.
customers[].credit_balance_microinteger
customers[].effectiveobject
customers[].effective.billing_modelstringOne of payg, subscription, none.
customers[].effective.monthly_quotainteger
customers[].effective.price_per_request_microinteger
customers[].effective.rpsinteger
customers[].effective.sourcestringOne of custom, plan, payg.
customers[].idstring
customers[].month_requestsinteger
customers[].policy_valid_untilstring (date-time)
customers[].statusstringOne of active, pending, suspended.
customers[].usage_policy_idstring (uuid)Send it back with usage so late reports are billed at this price.
generated_atstring (date-time)
keysarray of objects or null
keys[].customer_idstring
keys[].idstring
keys[].key_hashstringLowercase sha256 hex of the full API key.
platform_hard_capboolean
platform_monthly_allowanceobjectThe same numbers in the shape older SDKs read.
platform_monthly_allowance.hard_capboolean
platform_monthly_allowance.limitinteger
platform_monthly_allowance.period_endstring (date-time)
platform_monthly_allowance.period_startstring (date-time)
platform_monthly_allowance.remaininginteger
platform_monthly_allowance.usedinteger
platform_monthly_limitinteger
platform_monthly_remaininginteger
platform_monthly_usedinteger
platform_period_endstring (date-time)
tenant_idstring
tenant_namestring
Example request
curl "https://api.microauth.com/sdk/v1/snapshot" \
  -H "Authorization: Bearer mas_..."
Example response
{
  "billable_status_codes": [
    0
  ],
  "customers": [
    {
      "balance_seq": 0,
      "credit_balance_micro": 0,
      "effective": {
        "billing_model": "payg",
        "monthly_quota": 0,
        "price_per_request_micro": 0,
        "rps": 0,
        "source": "custom"
      },
      "id": "string",
      "month_requests": 0,
      "policy_valid_until": "2026-10-11T12:00:00Z",
      "status": "active",
      "usage_policy_id": "0199d4f2-6c1e-7a3b-9f10-2b6c8d4e5a71"
    }
  ],
  "generated_at": "2026-10-11T12:00:00Z",
  "keys": [
    {
      "customer_id": "string",
      "id": "string",
      "key_hash": "string"
    }
  ],
  "platform_hard_cap": true,
  "platform_monthly_allowance": {
    "hard_cap": true,
    "limit": 0,
    "period_end": "2026-10-11T12:00:00Z",
    "period_start": "2026-10-11T12:00:00Z",
    "remaining": 0,
    "used": 0
  },
  "platform_monthly_limit": 0,
  "platform_monthly_remaining": 0,
  "platform_monthly_used": 0,
  "platform_period_end": "2026-10-11T12:00:00Z",
  "tenant_id": "string",
  "tenant_name": "string"
}

GET Verify one key ​

/sdk/v1/keys/verify

Looks up a single key hash. Useful right after a developer creates a key, before the next snapshot.

Auth SDK secret keyServer https://api.microauth.com

Parameters

query key_hashstringLowercase sha256 hex of the API key your API received.

Response 200

billable_status_codesarray of integers or null
customerobject
customer.balance_seqintegerGrows with every balance change. Compare it to order balance observations of one customer.
customer.credit_balance_microinteger
customer.effectiveobject
customer.effective.billing_modelstringOne of payg, subscription, none.
customer.effective.monthly_quotainteger
customer.effective.price_per_request_microinteger
customer.effective.rpsinteger
customer.effective.sourcestringOne of custom, plan, payg.
customer.idstring
customer.month_requestsinteger
customer.policy_valid_untilstring (date-time)
customer.statusstringOne of active, pending, suspended.
customer.usage_policy_idstring (uuid)Send it back with usage so late reports are billed at this price.
key_idstring
validboolean
Example request
curl "https://api.microauth.com/sdk/v1/keys/verify" \
  -H "Authorization: Bearer mas_..."
Example response
{
  "billable_status_codes": [
    0
  ],
  "customer": {
    "balance_seq": 0,
    "credit_balance_micro": 0,
    "effective": {
      "billing_model": "payg",
      "monthly_quota": 0,
      "price_per_request_micro": 0,
      "rps": 0,
      "source": "custom"
    },
    "id": "string",
    "month_requests": 0,
    "policy_valid_until": "2026-10-11T12:00:00Z",
    "status": "active",
    "usage_policy_id": "0199d4f2-6c1e-7a3b-9f10-2b6c8d4e5a71"
  },
  "key_id": "string",
  "valid": true
}

POST Report usage ​

/sdk/v1/usage

Reports served requests. Every item is idempotent by idempotency_key. Items marked retry can be sent again unchanged.

Auth SDK secret keyServer https://api.microauth.com

Request body

itemsrequiredarray of objects or null1 to 1,000 items.
items[].api_key_idstringThe key id from the snapshot.
items[].countintegerNumber of requests, 1 to 10,000,000.
items[].idempotency_keyrequiredstring8 to 128 letters, digits, dots, underscores, colons or dashes. Keep it the same across retries.
items[].key_idstringOlder name for api_key_id.
items[].period_startrequiredstring (date-time)When the request happened. Usage is grouped by UTC hour.
items[].requestsintegerOlder name for count.
items[].status_coderequiredintegerThe HTTP status your API answered with.
items[].usage_policy_idstringusage_policy_id from the snapshot that admitted the request.

Response 200

acceptedintegerItems accepted by this call.
customersarray of objects or nullBalances after this report for every customer with an accepted or duplicate item.
customers[].balance_seqinteger
customers[].credit_balance_microinteger
customers[].idstring
resultsarray of objects or null
results[].charged_microintegerWhat the item charged the customer, in micro-USD. For a duplicate it is the original charge. Set on accepted and duplicate items.
results[].customer_idstringThe customer the item was recorded for. Set on accepted and duplicate items.
results[].detailstring
results[].http_statusinteger
results[].idempotency_keystring
results[].recorded_atstring (date-time)When MicroAuth first recorded the item. Set on accepted and duplicate items.
results[].statusstringOne of accepted, duplicate, rejected, retry.
Example request
curl -X POST "https://api.microauth.com/sdk/v1/usage" \
  -H "Authorization: Bearer mas_..." \
  -H "Content-Type: application/json" \
  -d '{
  "items": [
    {
      "api_key_id": "string",
      "count": 0,
      "idempotency_key": "string",
      "key_id": "string",
      "period_start": "2026-10-11T12:00:00Z",
      "requests": 0,
      "status_code": 0,
      "usage_policy_id": "string"
    }
  ]
}'
Example response
{
  "accepted": 0,
  "customers": [
    {
      "balance_seq": 0,
      "credit_balance_micro": 0,
      "id": "string"
    }
  ],
  "results": [
    {
      "charged_micro": 0,
      "customer_id": "string",
      "detail": "string",
      "http_status": 0,
      "idempotency_key": "string",
      "recorded_at": "2026-10-11T12:00:00Z",
      "status": "accepted"
    }
  ]
}

Account ​

Your own profile, password and two factor authentication. These need a dashboard session.

GET Current user and workspaces ​

/api/v1/me

Auth Dashboard sessionServer https://microauth.com

Response 200

userobject
user.created_atstring (date-time)
user.emailstring
user.idstring
user.is_adminboolean
user.namestring
user.two_factorboolean
workspacesarray of objects or null
workspaces[].api_countinteger
workspaces[].created_atstring (date-time)
workspaces[].idstring
workspaces[].namestring
workspaces[].rolestring
Example response
{
  "user": {
    "created_at": "2026-10-11T12:00:00Z",
    "email": "string",
    "id": "string",
    "is_admin": true,
    "name": "string",
    "two_factor": true
  },
  "workspaces": [
    {
      "api_count": 0,
      "created_at": "2026-10-11T12:00:00Z",
      "id": "string",
      "name": "string",
      "role": "string"
    }
  ]
}

PATCH Update your profile ​

/api/v1/me

Auth Dashboard sessionServer https://microauth.com

Request body

namerequiredstringUp to 100 characters.

Response 200

created_atstring (date-time)
emailstring
idstring
is_adminboolean
namestring
two_factorboolean
Example response
{
  "created_at": "2026-10-11T12:00:00Z",
  "email": "string",
  "id": "string",
  "is_admin": true,
  "name": "string",
  "two_factor": true
}

POST Change your password ​

/api/v1/me/password

Auth Dashboard sessionServer https://microauth.com

Request body

current_passwordrequiredstringUp to 200 characters.
passwordrequiredstringUp to 72 characters.

Response 200

okboolean
Example response
{
  "ok": true
}

POST Start two factor setup ​

/api/v1/me/2fa/setup

Auth Dashboard sessionServer https://microauth.com

Response 200

secretstringBase32 secret for manual entry.
uristringotpauth:// link to show as a QR code.
Example response
{
  "secret": "string",
  "uri": "string"
}

POST Turn on two factor authentication ​

/api/v1/me/2fa/enable

Auth Dashboard sessionServer https://microauth.com

Request body

coderequiredstringUp to 20 characters.

Response 200

recovery_codesarray of strings or nullShown once. Each code signs in one time.
Example response
{
  "recovery_codes": [
    "string"
  ]
}

POST Turn off two factor authentication ​

/api/v1/me/2fa/disable

Auth Dashboard sessionServer https://microauth.com

Request body

coderequiredstringUp to 20 characters.
passwordrequiredstringUp to 200 characters.

Response 200

okboolean
Example response
{
  "ok": true
}

POST Replace recovery codes ​

/api/v1/me/2fa/recovery-codes

Auth Dashboard sessionServer https://microauth.com

Request body

coderequiredstringUp to 20 characters.
passwordrequiredstringUp to 200 characters.

Response 200

recovery_codesarray of strings or nullShown once. Each code signs in one time.
Example response
{
  "recovery_codes": [
    "string"
  ]
}

Auth ​

Sign up and sign in. The dashboard calls these from the browser.

POST Send a sign up code ​

/api/v1/auth/signup

Emails a 6 digit code. Check it with /auth/signup/verify. The response is the same whether or not the email already has an account.

Auth NoneServer https://microauth.com

Request body

emailrequiredstringEmail address. Up to 254 characters.

Response 202

sentboolean
Example request
curl -X POST "https://microauth.com/api/v1/auth/signup" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "string"
}'
Example response
{
  "sent": true
}

POST Check a sign up code ​

/api/v1/auth/signup/verify

Uses up the code and returns a ticket for /auth/signup/complete. An email that already has an account never gets a code, so it fails like a wrong code.

Auth NoneServer https://microauth.com

Request body

coderequiredstringThe 6 digit code from the email. Up to 6 characters.
emailrequiredstringUp to 254 characters.

Response 200

expires_atstring (date-time)
ticketstringSend this with the next step. It works once, for 30 minutes.
Example request
curl -X POST "https://microauth.com/api/v1/auth/signup/verify" \
  -H "Content-Type: application/json" \
  -d '{
  "code": "string",
  "email": "string"
}'
Example response
{
  "expires_at": "2026-10-11T12:00:00Z",
  "ticket": "string"
}

POST Create the account ​

/api/v1/auth/signup/complete

Auth NoneServer https://microauth.com

Request body

namerequiredstringUp to 100 characters.
passwordrequiredstringUp to 72 characters.
ticketrequiredstringFrom /auth/signup/verify. Up to 1,000 characters.
workspacestringWorkspace name, usually your company. Defaults to your name. Up to 100 characters.

Response 200

header Set-Cookiestring
userobject
user.created_atstring (date-time)
user.emailstring
user.idstring
user.is_adminboolean
user.namestring
user.two_factorboolean
workspace_idstring
Example request
curl -X POST "https://microauth.com/api/v1/auth/signup/complete" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "password": "string",
  "ticket": "string",
  "workspace": "string"
}'
Example response
{
  "user": {
    "created_at": "2026-10-11T12:00:00Z",
    "email": "string",
    "id": "string",
    "is_admin": true,
    "name": "string",
    "two_factor": true
  },
  "workspace_id": "string"
}

POST Sign in ​

/api/v1/auth/login

Auth NoneServer https://microauth.com

Request body

emailrequiredstringUp to 254 characters.
passwordrequiredstringUp to 200 characters.

Response 200

header Set-Cookiestring
challengestringSend this with the authenticator code to /auth/login/2fa.
two_factor_requiredboolean
userobject
user.created_atstring (date-time)
user.emailstring
user.idstring
user.is_adminboolean
user.namestring
user.two_factorboolean
Example request
curl -X POST "https://microauth.com/api/v1/auth/login" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "string",
  "password": "string"
}'
Example response
{
  "challenge": "string",
  "two_factor_required": true,
  "user": {
    "created_at": "2026-10-11T12:00:00Z",
    "email": "string",
    "id": "string",
    "is_admin": true,
    "name": "string",
    "two_factor": true
  }
}

POST Finish signing in with two factor authentication ​

/api/v1/auth/login/2fa

Auth NoneServer https://microauth.com

Request body

challengerequiredstring
coderequiredstringAuthenticator code or a recovery code. Up to 20 characters.

Response 200

header Set-Cookiestring
challengestringSend this with the authenticator code to /auth/login/2fa.
two_factor_requiredboolean
userobject
user.created_atstring (date-time)
user.emailstring
user.idstring
user.is_adminboolean
user.namestring
user.two_factorboolean
Example request
curl -X POST "https://microauth.com/api/v1/auth/login/2fa" \
  -H "Content-Type: application/json" \
  -d '{
  "challenge": "string",
  "code": "string"
}'
Example response
{
  "challenge": "string",
  "two_factor_required": true,
  "user": {
    "created_at": "2026-10-11T12:00:00Z",
    "email": "string",
    "id": "string",
    "is_admin": true,
    "name": "string",
    "two_factor": true
  }
}

POST Sign out ​

/api/v1/auth/logout

Auth NoneServer https://microauth.com

Parameters

cookie ma_sessionstring

Response 200

header Set-Cookiestring
okboolean
Example request
curl -X POST "https://microauth.com/api/v1/auth/logout"
Example response
{
  "ok": true
}

POST Send a password reset code ​

/api/v1/auth/password/forgot

Auth NoneServer https://microauth.com

Request body

emailrequiredstringEmail address. Up to 254 characters.

Response 202

sentboolean
Example request
curl -X POST "https://microauth.com/api/v1/auth/password/forgot" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "string"
}'
Example response
{
  "sent": true
}

POST Check a password reset code ​

/api/v1/auth/password/verify

Uses up the code and returns a ticket for /auth/password/reset.

Auth NoneServer https://microauth.com

Request body

coderequiredstringThe 6 digit code from the email. Up to 6 characters.
emailrequiredstringUp to 254 characters.

Response 200

expires_atstring (date-time)
ticketstringSend this with the next step. It works once, for 30 minutes.
Example request
curl -X POST "https://microauth.com/api/v1/auth/password/verify" \
  -H "Content-Type: application/json" \
  -d '{
  "code": "string",
  "email": "string"
}'
Example response
{
  "expires_at": "2026-10-11T12:00:00Z",
  "ticket": "string"
}

POST Reset the password ​

/api/v1/auth/password/reset

Auth NoneServer https://microauth.com

Request body

passwordrequiredstringUp to 72 characters.
ticketrequiredstringFrom /auth/password/verify. Up to 1,000 characters.

Response 200

header Set-Cookiestring
signed_inboolean
userobject
user.created_atstring (date-time)
user.emailstring
user.idstring
user.is_adminboolean
user.namestring
user.two_factorboolean
Example request
curl -X POST "https://microauth.com/api/v1/auth/password/reset" \
  -H "Content-Type: application/json" \
  -d '{
  "password": "string",
  "ticket": "string"
}'
Example response
{
  "signed_in": true,
  "user": {
    "created_at": "2026-10-11T12:00:00Z",
    "email": "string",
    "id": "string",
    "is_admin": true,
    "name": "string",
    "two_factor": true
  }
}

GET Look up a workspace invite ​

/api/v1/auth/invites/{token}

Auth NoneServer https://microauth.com

Parameters

tokenrequiredstringToken from the invite link. Up to 100 characters.

Response 200

account_existsboolean
emailstring
expires_atstring (date-time)
rolestring
workspacestring
Example request
curl "https://microauth.com/api/v1/auth/invites/{token}"
Example response
{
  "account_exists": true,
  "email": "string",
  "expires_at": "2026-10-11T12:00:00Z",
  "role": "string",
  "workspace": "string"
}

POST Accept a workspace invite ​

/api/v1/auth/invites/{token}/accept

Auth NoneServer https://microauth.com

Parameters

cookie ma_sessionstring
tokenrequiredstringToken from the invite link. Up to 100 characters.

Request body

namestringUp to 100 characters.
passwordstringUp to 72 characters.

Response 200

header Set-Cookiestring
userobject
user.created_atstring (date-time)
user.emailstring
user.idstring
user.is_adminboolean
user.namestring
user.two_factorboolean
workspace_idstring
Example request
curl -X POST "https://microauth.com/api/v1/auth/invites/{token}/accept" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "password": "string"
}'
Example response
{
  "user": {
    "created_at": "2026-10-11T12:00:00Z",
    "email": "string",
    "id": "string",
    "is_admin": true,
    "name": "string",
    "two_factor": true
  },
  "workspace_id": "string"
}

MicroAuth is a product of Zyref, LLC.