API reference
Domains
/ v1/ orgs/ :orgId/ domainsLists custom domains, and target: the hostname to point their CNAME records at.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- domains:read
Path parameters
orgIdOrganization id (
org_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/domains' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
domains: {
message?: string
status?: "error" | "active" | "pending" | "verifying"
createdAt?: number
updatedAt?: number
orgId: string
projectId: string
hostname: string
tenantId?: string
certificateArn?: string
records?: string
zone?: string
dnsProvider?: string
checkedAt?: number
redirectTo?: string
move?: boolean
acmCertificateArn?: string
}[]
target: string
}/ v1/ orgs/ :orgId/ domainsAdds a custom domain to a Serverless App Service and returns the DNS record to create.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- domains:write
Path parameters
orgIdOrganization id (
org_…).
Request body
hostnamestringrequiredMatches
^(?=.{4,253}$)([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$. Lowercased.projectIdstringrequiredmovebooleanDefault
false.
Errors
400Platform hostnames can't be added as custom domains.404Serverless App Service not found409This domain is already in use.502Couldn't set up this domain. Try again.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/domains' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"hostname": "Example",
"projectId": "<projectId>"
}'Response 201
{
domain: {
message?: string
status?: "error" | "active" | "pending" | "verifying"
createdAt?: number
updatedAt?: number
orgId: string
projectId: string
hostname: string
tenantId?: string
certificateArn?: string
records?: string
zone?: string
dnsProvider?: string
checkedAt?: number
redirectTo?: string
move?: boolean
acmCertificateArn?: string
}
records: {
type: "CNAME" | "TXT"
name: string
value: string
purpose?: "validation"
}[]
dns?: {
ok: boolean
expected: string
found: string[]
}
}/ v1/ orgs/ :orgId/ domains/ :hostname/ verifyChecks the domain's certificate and updates its status.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- domains:read
Path parameters
orgIdOrganization id (
org_…).hostnameThe custom domain.
Errors
404Domain not found
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/domains/{hostname}/verify' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
domain: {
message?: string
status?: "error" | "active" | "pending" | "verifying"
createdAt?: number
updatedAt?: number
orgId: string
projectId: string
hostname: string
tenantId?: string
certificateArn?: string
records?: string
zone?: string
dnsProvider?: string
checkedAt?: number
redirectTo?: string
move?: boolean
acmCertificateArn?: string
}
}
| {
domain: {
message?: string
status?: "error" | "active" | "pending" | "verifying"
createdAt?: number
updatedAt?: number
orgId: string
projectId: string
hostname: string
tenantId?: string
certificateArn?: string
records?: string
zone?: string
dnsProvider?: string
checkedAt?: number
redirectTo?: string
move?: boolean
acmCertificateArn?: string
}
dns?: undefined
} | {
domain: {
message?: string
status?: "error" | "active" | "pending" | "verifying"
createdAt?: number
updatedAt?: number
orgId: string
projectId: string
hostname: string
tenantId?: string
certificateArn?: string
records?: string
zone?: string
dnsProvider?: string
checkedAt?: number
redirectTo?: string
move?: boolean
acmCertificateArn?: string
}
dns: {
ok: boolean
expected: string
found: string[]
}
}/ v1/ orgs/ :orgId/ domains/ :hostname/ cloudflareCreates the domain's records with the org's connected Cloudflare token, then checks right away. Create-only: a record already pointing elsewhere is replaced only for an owner or admin (a move's second click, say); for anyone else nothing is written and the answer names it (409), so the connection never repoints a live record for someone who may only add one.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- domains:write
Path parameters
orgIdOrganization id (
org_…).hostnameThe custom domain.
Errors
400This domain's zone couldn't be found in DNS.400Connect Cloudflare first.404Domain not found409… An owner or admin can replace … here, or change … in Cloudflare.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/domains/{hostname}/cloudflare' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
domain: {
message?: string
status?: "error" | "active" | "pending" | "verifying"
createdAt?: number
updatedAt?: number
orgId: string
projectId: string
hostname: string
tenantId?: string
certificateArn?: string
records?: string
zone?: string
dnsProvider?: string
checkedAt?: number
redirectTo?: string
move?: boolean
acmCertificateArn?: string
}
dns?: undefined
} | {
domain: {
message?: string
status?: "error" | "active" | "pending" | "verifying"
createdAt?: number
updatedAt?: number
orgId: string
projectId: string
hostname: string
tenantId?: string
certificateArn?: string
records?: string
zone?: string
dnsProvider?: string
checkedAt?: number
redirectTo?: string
move?: boolean
acmCertificateArn?: string
}
dns: {
ok: boolean
expected: string
found: string[]
}
}/ v1/ orgs/ :orgId/ domains/ :hostnameMoves a domain to another Serverless App Service of the org, or makes it redirect to another domain of its Serverless App Service (redirectTo: null serves the Serverless App Service again). The edge route changes right away.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- domains:write
Path parameters
orgIdOrganization id (
org_…).hostnameThe custom domain.
Request body
projectIdstringAt least 1 character.
redirectTostringor nullMatches
^(?=.{4,253}$)([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$. Lowercased.
Errors
400A domain can't redirect to itself.400Redirect to another domain of the same Serverless App Service.400… redirects too. Choose a domain that serves the Serverless App Service.404Domain not found404Serverless App Service not found409… redirects to this domain. Change that first.
curl -X PATCH 'https://api.cactive.com.au/v1/orgs/{orgId}/domains/{hostname}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"projectId": "<projectId>",
"redirectTo": "example"
}'Response 200
{
domain: {
message?: string
status?: "error" | "active" | "pending" | "verifying"
createdAt?: number
updatedAt?: number
orgId: string
projectId: string
hostname: string
tenantId?: string
certificateArn?: string
records?: string
zone?: string
dnsProvider?: string
checkedAt?: number
redirectTo?: string
move?: boolean
acmCertificateArn?: string
}
}/ v1/ orgs/ :orgId/ domains/ :hostnameRemoves a custom domain: its route and its certificate.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- domains:write
Path parameters
orgIdOrganization id (
org_…).hostnameThe custom domain.
Errors
404Domain not found409… redirects to this domain. Change that first.
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/domains/{hostname}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ integrations/ cloudflareWhether Cloudflare is connected (by sign-in or API token), the zones it can see, whether a sign-in grant expired, and whether sign-in is available. Credentials are never returned.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- domains:read
Path parameters
orgIdOrganization id (
org_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/integrations/cloudflare' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
connected: boolean
kind: null | "token" | "oauth"
zones: string[]
connectedAt?: number
expired: boolean
oauth: boolean
}/ v1/ orgs/ :orgId/ integrations/ cloudflare/ oauthCompletes the OAuth flow. The state is consumed first (one use), then checked against this user and org. With error instead of code (the user declined), it only consumes the state and returns where to go back to; retry says to start again without offline access.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- domains:write
Path parameters
orgIdOrganization id (
org_…).
Request body
statestringrequired10–300 characters.
codestring1–2,000 characters.
errorstringUp to 200 characters.
Errors
422Cloudflare didn't share any zones. Choose the zones you'll use when you allow access.501Cloudflare sign-in isn't available.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/integrations/cloudflare/oauth' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"state": "example"
}'Response 200
{
connected: false
returnTo: string
retry: boolean
}
| {
connected: true
zones: string[]
returnTo: string
refresh: boolean
}/ v1/ orgs/ :orgId/ integrations/ cloudflareConnects a Cloudflare API token (Zone → DNS → Edit) for adding domain records. The token is checked against Cloudflare, encrypted and stored; it must see at least one zone.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- domains:write
Path parameters
orgIdOrganization id (
org_…).
Request body
tokenstringrequired20–200 characters. Trimmed.
Errors
400The token can't see any zones. Give it Zone → DNS → Edit on the zones you'll use.
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/integrations/cloudflare' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"token": "example"
}'Response 200
{
connected: true
kind: string
zones: string[]
}/ v1/ orgs/ :orgId/ integrations/ cloudflareDisconnects Cloudflare: revokes a sign-in grant at Cloudflare (best effort) and deletes the stored credentials.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- domains:write
Path parameters
orgIdOrganization id (
org_…).
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/integrations/cloudflare' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body