dropto.run docs
Drop2Run.Api | v1

A site, its address, and everything that is true of it rather than of one publish: the subdomain, custom domains and their certificates, a password, an expiry date, and the traffic figures — which identify nobody.


Lists one page of the signed-in user's sites, newest first or in the order asked for, optionally narrowed by a search term or to one folder.

GET
https://dropto.run
/api/sites
d2r_session (cookie)
or
Bearer
or
X-Claim-Token (header)

Lists one page of the signed-in user's sites, newest first or in the order asked for, optionally narrowed by a search term or to one folder. › query Parameters

page
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$
pageSize
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$
q
​string
folderId
​string
sort
​string

Lists one page of the signed-in user's sites, newest first or in the order asked for, optionally narrowed by a search term or to one folder. › Responses

OK

One page of `GET /sites`.
page
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Zero-based index of this page.

pageSize
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many rows a full page holds.

​SiteSummary[] · required

The rows on this page, in the order that was asked for.

total
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many sites match, across every page — which is what the pager is against. Equal to TotalOwned when no search was asked for.

totalOwned
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many sites the caller owns, ignoring any search.

Both numbers, because the listing says both: the page header counts what the account holds and the line above a searched list counts what matched. One number cannot carry that sentence, and a client holding the other from an earlier response has a number that a deletion can make wrong.


Creates an empty site, either with the caller's own subdomain or a generated one.

POST
https://dropto.run
/api/sites
d2r_session (cookie)
or
Bearer
or
X-Claim-Token (header)

Creates an empty site, either with the caller's own subdomain or a generated one. › Request Body

oneOf
Exactly one variant must match.

Decision Table

VariantMatching Criteria
type = null
type = object · requires: subdomain
Properties for Variant 1:
null

Creates an empty site, either with the caller's own subdomain or a generated one. › Responses

Created

Response of `POST /sites`.
claimToken
​null | string · required

Plaintext claim token, present only for an anonymous site and returned only here. The server keeps nothing but its hash, so a client that loses it cannot recover ownership.

expiresAt
​null | string · date-time · required

When an unclaimed anonymous site is removed. Null once the site has an owner.

siteId
​string · required

ULID of the new site.

subdomain
​string · required

Allocated subdomain, without the parent domain.

url
​string · required

Public HTTPS URL the site will answer on once a deploy goes live.


Attaches anonymous sites to the signed-in user.

POST
https://dropto.run
/api/sites/claim
d2r_session (cookie)
or
Bearer

Attaches anonymous sites to the signed-in user. › Request Body

Request body of `POST /sites/claim`.
​SiteClaim[] · minItems: 1 · maxItems: 50 · required

Every site the caller holds a token for.

Attaches anonymous sites to the signed-in user. › Responses

OK

Response of `POST /sites/claim`.
​ClaimedSite[] · required

Sites now owned by the caller.

​RejectedClaim[] · required

Sites that were not claimed, each with a reason. A batch can be partly successful, so this is not an error case — the caller shows what it got and drops the rest from local storage.


Tells the caller whether a subdomain could be used, without reserving it.

GET
https://dropto.run
/api/sites/subdomain-availability
d2r_session (cookie)
or
Bearer
or
X-Claim-Token (header)

Tells the caller whether a subdomain could be used, without reserving it. › query Parameters

subdomain
​string

Tells the caller whether a subdomain could be used, without reserving it. › Responses

OK

Response of `GET /sites/subdomain-availability`.
available
​boolean · required

Whether this name could be used right now.

normalized
​null | string · required

The name as it would actually be stored, lowercase and trimmed. Null when the input failed format outright, in which case there was nothing to normalize.

reason
​null | string · required

Why not, using the same codes POST /sites would answer with. Null when Available is true.


Reads one site and its recent deploys.

GET
https://dropto.run
/api/sites/{siteId}
d2r_session (cookie)
or
Bearer
or
X-Claim-Token (header)

Reads one site and its recent deploys. › path Parameters

siteId
​string · required

Reads one site and its recent deploys. › Responses

OK

Response of `GET /sites/{siteId}`.
analyticsDays
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many days of traffic this site's plan allows seeing, or zero when it includes none. Sent for the same reason as the flag above: the page can state what the plan covers instead of requesting the figures and rendering a refusal.

analyticsExportAvailable
​boolean · required

Whether this site's plan is sold with the traffic export. Read from the site's own plan rather than from the signed-in account's, because the two differ — an anonymous site is on the anonymous tier whoever is looking at it.

anonymous
​boolean · required

Whether the site has no account behind it.

Stated rather than inferred, and it replaces an inference the dashboard was making from ExpiresAt being set. That proxy held only while an expiry meant one thing: now that an owner can schedule a takedown on a site of their own, a paid site with a date on it would have read as anonymous and been told it gets deleted after a few days.

browserEditAvailable
​boolean · required

Whether this site's plan lets its owner edit a file in the browser. Sent so the file list can leave the Edit action out rather than offering one the server refuses.

commentAudience
​string · required

Who the owner chose may comment — Off, Invited or Anyone. The stored choice; it takes effect only where FeedbackAvailable is true and, for Invited, while the site is invite-only, which the Sharing tab says in words.

createdAt
​string · date-time · required

When the site was created.

customDomainAllowance
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many hostnames of the customer's own this site's plan allows across the account, or zero when it includes none.

Sent here rather than looked up from the public plans list, which is where the dashboard read it and where it is not always findable: GET /plans filters to public tiers, so a site on a plan cut for one account matched nothing and the section rendered as a heading with nothing underneath — exactly the account most likely to have been given an allowance. The same argument as PasswordProtectionAvailable, which is why it sits beside it.

​DeploySummary[] · required

The most recent deploys, newest first.

docsMode
​boolean · required

Whether the site is served through the documents viewer.

expiresAt
​null | string · date-time · required

When an unclaimed anonymous site is removed, or null once claimed.

expiryAction
​string · required

What the expiry does when it falls due, Pause or Delete. Meaningless while ExpiresAt is null, and sent anyway so the form has something to show when the owner sets a date.

feedbackAvailable
​boolean · required

Whether this site's plan includes comments. Sent for PasswordProtectionAvailable's reason: the control shows disabled with a reason rather than failing on submit.

folderId
​null | string · required

The folder it is filed in, or null when it sits at the root of the listing.

The same field SiteSummary carries. Sent here as well so the site's own page can put that folder in its trail and return to it — after a removal, too — instead of to the root of the listing, which is where somebody who opened the site from inside a folder did not come from.

​FormerSubdomain[] · required

The names the site used to answer on, newest first, each redirecting to it.

formsAvailable
​boolean · required

Whether the account's tier includes forms at all.

Reported beside the switch for the reason PasswordProtectionAvailable is: the dashboard has to tell "off" apart from "not yours to turn on", and a control that looks available and then refuses is worse than one that says why.

formsEnabled
​boolean · required

Whether the owner has switched form submissions on for this site.

invitedOnly
​boolean · required

Whether only the people on the site's list may see it. Never true together with PasswordProtected.

invitedViewersAvailable
​boolean · required

Whether this site's plan offers invite-only sites. Sent for PasswordProtectionAvailable's reason: the Sharing tab shows the third choice disabled with a reason rather than offering it and failing.

lastActiveAt
​string · date-time · required

When it last received a deploy.

liveDeployId
​null | string · required

The deploy being served, or null.

maxSiteViewers
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many people this site's plan lets the list hold, the owner included — and, per site, how many invitations it may mail in a day.

modeIsManual
​boolean · required

Whether the serving mode was chosen by the owner rather than detected from the files of the deploy that went live. What lets the dashboard say which of the two it is showing.

name
​null | string · required

What to call it, or null when it has none and the subdomain should be shown instead.

A label only. The site is reached by Subdomain whatever this says, which is why the dashboard shows the address underneath rather than replacing it: two sites are allowed the same name, and the name is not what anybody types into a browser.

openFeedback
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Threads open on the site, the number on the Feedback tab.

passwordProtected
​boolean · required

Whether visitors must enter a password. Only whether one is set is reported — the password itself is stored as a hash, so there is nothing to return.

passwordProtectionAvailable
​boolean · required

Whether this site's plan permits a password at all. Sent so the dashboard can show the control in a disabled state with a reason, rather than offering it and failing on submit.

planId
​string · required

Plan whose limits apply.

primaryUrl
​string · required

The URL to lead with: a hostname of the customer's own once one is serving, and Url otherwise.

Sent as its own field rather than by overwriting Url, because the two are not interchangeable and the subdomain does not stop mattering: it needs no DNS of anybody's and keeps working when a custom domain's records are changed or lapse, which makes it the address to fall back to when the other one is what is being diagnosed.

publicDocumentCounts
​boolean · required

Whether readers of this documents site see each document's views and downloads. Every plan may turn it on.

scheduledExpiryAvailable
​boolean · required

Whether this site's plan lets its owner schedule when it comes down. Sent so the dashboard can show the control disabled with a reason rather than offering it and failing on submit.

siteId
​string · required

ULID of the site.

spaMode
​boolean · required

Whether an unmatched path falls back to index.html.

status
​string · required

Whether the site is serving, and if not, who switched it off — the SiteStatus name.

What the pause control reads, and what tells the three off-states apart for the customer. They need different words and different offers: their own pause has a button that undoes it, a suspension has support to contact, and being held for quota has an upgrade. One boolean could not say which.

statusChangedAt
​null | string · date-time · required

When the state last changed, or null if it never has.

subdomain
​string · required

Its subdomain.

subdomainChangesLeft
​null | integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many more times the owner may change Subdomain, or null when the plan does not limit it. What the change-of-address control and its confirmation show.

trafficBreakdownAvailable
​boolean · required

Whether this site's plan includes top lists, the globe and filters on the traffic page. Sent so the page draws a locked card naming the tier instead of requesting a list and rendering a 403.

trafficDetailAvailable
​boolean · required

Whether this site's plan splits people from bots and AI and shows devices, browsers and campaigns.

url
​string · required

Its public URL on the platform's own content domain.


Takes a site offline and reserves its subdomain permanently.

DELETE
https://dropto.run
/api/sites/{siteId}
d2r_session (cookie)
or
Bearer
or
X-Claim-Token (header)

Takes a site offline and reserves its subdomain permanently. › path Parameters

siteId
​string · required

Takes a site offline and reserves its subdomain permanently. › Responses

OK

Response of `DELETE /sites/{siteId}`.
siteId
​string · required

ULID of the deleted site.

subdomain
​string · required

Its subdomain, which stays reserved.


Changes a site's serving settings and pushes them to the edge.

PATCH
https://dropto.run
/api/sites/{siteId}
d2r_session (cookie)
or
Bearer
or
X-Claim-Token (header)

Changes a site's serving settings and pushes them to the edge. › path Parameters

siteId
​string · required

Changes a site's serving settings and pushes them to the edge. › Request Body

oneOf
Exactly one variant must match.

Decision Table

VariantMatching Criteria
type = null
type = object
Properties for Variant 1:
null

Changes a site's serving settings and pushes them to the edge. › Responses

OK

Response of `PATCH /sites/{siteId}`.
commentAudience
​string · required

Who the owner chose may comment — Off, Invited or Anyone. The stored choice, which takes effect only where the plan and the viewing mode allow it.

docsMode
​boolean · required

The setting as it now stands.

expiresAt
​null | string · date-time · required

When the site is now scheduled to come down, or null when it has no schedule. Echoed because the request sends a string and this is the instant it parsed to.

expiryAction
​string · required

What that schedule will do. Reported even when ExpiresAt is null, where it is the choice a future date would inherit.

folderId
​null | string · required

The folder the site is now filed in, or null when it sits at the root. Echoed so a client that sent "root" reads back the null it produced rather than the token it sent.

formsEnabled
​boolean · required

Whether this site accepts form submissions. The site's own switch, which the tier has to permit before the edge honours it — so a site on a tier without forms reports false here and cannot be set to true.

invitedOnly
​boolean · required

Whether only the people on the site's list may now see it. Never true together with PasswordProtected.

live
​boolean · required

Whether the hostname mapping was rewritten. False for a site that has never published, where the setting is stored and takes effect with its first deploy.

modeIsManual
​boolean · required

Whether the serving mode shown here was chosen by the owner rather than detected from the files.

Reported so the dashboard can say which it is. A control that renders a detected value identically to a chosen one tells the owner they picked something they never picked, and hides the one fact that explains why the mode changed after a deploy — or why it stopped changing.

name
​null | string · required

The name as it now stands, or null when the site has none and the dashboard should show its subdomain. Echoed back because cleaning can change what was sent.

passwordProtected
​boolean · required

Whether the site now requires a password. The password itself is never returned — only the hash is stored, so there is nothing to return even if it were wanted.

publicDocumentCounts
​boolean · required

Whether readers see each document's views and downloads.

siteId
​string · required

ULID of the site.

spaMode
​boolean · required

The setting as it now stands.


Reads a site's custom domains and what each still needs.

GET
https://dropto.run
/api/sites/{siteId}/domains
d2r_session (cookie)
or
Bearer
or
X-Claim-Token (header)

Reads a site's custom domains and what each still needs. › path Parameters

siteId
​string · required

Reads a site's custom domains and what each still needs. › Responses

OK

Response of `GET /sites/{siteId}/domains`.
​SiteDomainResponse[] · required

The site's custom domains, oldest first, excluding ones that were given up. Empty for a site with none, which is every site until somebody adds one.


Claims a hostname the customer owns and returns the DNS records to add.

POST
https://dropto.run
/api/sites/{siteId}/domains
d2r_session (cookie)
or
Bearer
or
X-Claim-Token (header)

Claims a hostname the customer owns and returns the DNS records to add. › path Parameters

siteId
​string · required

Claims a hostname the customer owns and returns the DNS records to add. › Request Body

oneOf
Exactly one variant must match.

Decision Table

VariantMatching Criteria
type = null
type = object · requires: hostname, alreadyServing
Properties for Variant 1:
null

Claims a hostname the customer owns and returns the DNS records to add. › Responses

OK

One custom domain of a site, and what the customer still has to do about it.
bareDomain
​null | string · required

The bare domain this www hostname sits directly on, or null when it is not a www hostname or sits on something else.

What the dashboard needs to offer "send example.com here too": a bare domain cannot point at this platform, so the customer redirects it to the www name at their DNS provider. Read from the zone the nameserver lookup found when the domain was added, which is what makes www.example.com.vn answer example.com.vn; a row added before that was recorded falls back to the two-label case.

certificateReady
​boolean · required

Whether the certificate has been issued, which is what says the DCV records are done rather than missing.

Sent because the provider stops returning those records the moment the certificate exists, including when it validated over HTTP without the customer adding anything. Without this the dashboard reads an empty list as "not issued yet" and the rows vanish from under somebody who is still copying them.

cnameTarget
​string · required

What the customer points their hostname at, once both validations pass. Served rather than hardcoded in the frontend for the reason every other piece of configuration is: a customer told the wrong target gets a hostname that validates and then never serves.

createdAt
​string · date-time · required

When the customer asked for the hostname.

dcvTxtName
​null | string · required

Name of the certificate validation TXT records, or null once none is needed.

dcvTxtValues
​string[] · required

Values of the certificate validation TXT records, or empty once none is needed.

Several under one name: the certificate is issued as a pack and each member is validated separately, so the customer has more than one record to add and adding one of them satisfies nothing.

dnsProvider
​string · required

Who serves DNS for the hostname, as the lowercase name of DnsProvider, and therefore which order the dashboard has to ask for the records in.

hostname
​string · required

The hostname, normalized.

id
​string · required

ULID of the domain row, used to remove or re-check it.

ownershipTxtName
​null | string · required

Name of the ownership TXT record, or null once it is no longer needed.

ownershipTxtValue
​null | string · required

Value of the ownership TXT record, or null for the same reason.

prevalidationUnavailable
​boolean · required

Whether the customer asked for the no-gap path and could not have it, because the certificate provider will not pre-validate a hostname whose zone it is already authoritative for — which is what DnsProvider reports when the customer's own DNS sits with the same provider.

Sent so the dashboard can say so. The override is right — the path they asked for cannot complete and the one they got does — but a customer who ticked the box to protect a live site and is told nothing will point their DNS here believing there is no gap, and learn otherwise from their own visitors.

status
​string · required

Where it is between being asked for and serving, as the lowercase name of SiteDomainStatus.

validation
​string · required

How the certificate is being proven, as the lowercase name of CertificateValidation, and therefore how many records to show.

"http" is one CNAME and nothing else. "txt" is the no-gap path a customer asked for because their hostname is already serving, and carries the record pairs above. Sent rather than inferred from those pairs being empty, which is what an "http" row and a finished "txt" row would otherwise look like alike.

verificationErrors
​string[] · required

Why the certificate provider has not activated the hostname, in its words, or empty when it has nothing to say.

verifiedAt
​null | string · date-time · required

When both validations first passed, or null while still pending.


Stops serving a site on a hostname and releases it.

DELETE
https://dropto.run
/api/sites/{siteId}/domains/{domainId}
d2r_session (cookie)
or
Bearer
or
X-Claim-Token (header)

Stops serving a site on a hostname and releases it. › path Parameters

siteId
​string · required
domainId
​string · required

Stops serving a site on a hostname and releases it. › Responses

OK

Response of `DELETE /sites/{siteId}/domains/{domainId}`.
hostname
​string · required

The hostname that stopped serving.

id
​string · required

ULID of the domain that was removed.


Asks the provider about a pending domain now instead of waiting for the backoff.

POST
https://dropto.run
/api/sites/{siteId}/domains/{domainId}/recheck
d2r_session (cookie)
or
Bearer
or
X-Claim-Token (header)

Asks the provider about a pending domain now instead of waiting for the backoff. › path Parameters

siteId
​string · required
domainId
​string · required

Asks the provider about a pending domain now instead of waiting for the backoff. › Responses

OK

One custom domain of a site, and what the customer still has to do about it.
bareDomain
​null | string · required

The bare domain this www hostname sits directly on, or null when it is not a www hostname or sits on something else.

What the dashboard needs to offer "send example.com here too": a bare domain cannot point at this platform, so the customer redirects it to the www name at their DNS provider. Read from the zone the nameserver lookup found when the domain was added, which is what makes www.example.com.vn answer example.com.vn; a row added before that was recorded falls back to the two-label case.

certificateReady
​boolean · required

Whether the certificate has been issued, which is what says the DCV records are done rather than missing.

Sent because the provider stops returning those records the moment the certificate exists, including when it validated over HTTP without the customer adding anything. Without this the dashboard reads an empty list as "not issued yet" and the rows vanish from under somebody who is still copying them.

cnameTarget
​string · required

What the customer points their hostname at, once both validations pass. Served rather than hardcoded in the frontend for the reason every other piece of configuration is: a customer told the wrong target gets a hostname that validates and then never serves.

createdAt
​string · date-time · required

When the customer asked for the hostname.

dcvTxtName
​null | string · required

Name of the certificate validation TXT records, or null once none is needed.

dcvTxtValues
​string[] · required

Values of the certificate validation TXT records, or empty once none is needed.

Several under one name: the certificate is issued as a pack and each member is validated separately, so the customer has more than one record to add and adding one of them satisfies nothing.

dnsProvider
​string · required

Who serves DNS for the hostname, as the lowercase name of DnsProvider, and therefore which order the dashboard has to ask for the records in.

hostname
​string · required

The hostname, normalized.

id
​string · required

ULID of the domain row, used to remove or re-check it.

ownershipTxtName
​null | string · required

Name of the ownership TXT record, or null once it is no longer needed.

ownershipTxtValue
​null | string · required

Value of the ownership TXT record, or null for the same reason.

prevalidationUnavailable
​boolean · required

Whether the customer asked for the no-gap path and could not have it, because the certificate provider will not pre-validate a hostname whose zone it is already authoritative for — which is what DnsProvider reports when the customer's own DNS sits with the same provider.

Sent so the dashboard can say so. The override is right — the path they asked for cannot complete and the one they got does — but a customer who ticked the box to protect a live site and is told nothing will point their DNS here believing there is no gap, and learn otherwise from their own visitors.

status
​string · required

Where it is between being asked for and serving, as the lowercase name of SiteDomainStatus.

validation
​string · required

How the certificate is being proven, as the lowercase name of CertificateValidation, and therefore how many records to show.

"http" is one CNAME and nothing else. "txt" is the no-gap path a customer asked for because their hostname is already serving, and carries the record pairs above. Sent rather than inferred from those pairs being empty, which is what an "http" row and a finished "txt" row would otherwise look like alike.

verificationErrors
​string[] · required

Why the certificate provider has not activated the hostname, in its words, or empty when it has nothing to say.

verifiedAt
​null | string · date-time · required

When both validations first passed, or null while still pending.


Lists the variables a site's functions read: names and the last four characters of each value, never a value.

GET
https://dropto.run
/api/sites/{siteId}/env
d2r_session (cookie)
or
Bearer

Lists the variables a site's functions read: names and the last four characters of each value, never a value. › path Parameters

siteId
​string · required

Lists the variables a site's functions read: names and the last four characters of each value, never a value. › Responses

OK

Response of `GET /sites/{siteId}/env`.
allowed
​boolean · required

Whether the site may run functions now. False, the variables are kept but none reaches the edge, and none can be set.

maxTotalValueBytes
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Largest total of a site's values, in UTF-8 bytes.

maxValueBytes
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Largest value of one variable, in UTF-8 bytes.

maxVars
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Most variables a site may hold.

valueBytes
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

The values' total size, in UTF-8 bytes.

​EnvVarView[] · required

The variables, by name.


Sets a variable the site's functions read; the value is sealed on arrival and never shown back.

PUT
https://dropto.run
/api/sites/{siteId}/env/{name}
d2r_session (cookie)
or
Bearer

Sets a variable the site's functions read; the value is sealed on arrival and never shown back. › path Parameters

siteId
​string · required
name
​string · required

Sets a variable the site's functions read; the value is sealed on arrival and never shown back. › Request Body

Request of `PUT /sites/{siteId}/env/{name}`.
value
​null | string · required

The value, in plain text — sealed on arrival and never shown back.

Sets a variable the site's functions read; the value is sealed on arrival and never shown back. › Responses

OK

One variable as the dashboard sees it.
createdAt
​string · date-time · required

When it was first set.

last4
​string · required

The value's last four characters, or empty for a short value.

name
​string · required

The name.

updatedAt
​string · date-time · required

When its value last changed.


Removes a variable from the site's functions, sealed value and all.

DELETE
https://dropto.run
/api/sites/{siteId}/env/{name}
d2r_session (cookie)
or
Bearer

Removes a variable from the site's functions, sealed value and all. › path Parameters

siteId
​string · required
name
​string · required

Removes a variable from the site's functions, sealed value and all. › Responses

No Content

No data returned

Reads one page of the comments left on a site's pages, newest first, with the tab's counts.

GET
https://dropto.run
/api/sites/{siteId}/feedback
d2r_session (cookie)
or
Bearer

Reads one page of the comments left on a site's pages, newest first, with the tab's counts. › path Parameters

siteId
​string · required

Reads one page of the comments left on a site's pages, newest first, with the tab's counts. › query Parameters

status
​string
path
​string
page
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$

Reads one page of the comments left on a site's pages, newest first, with the tab's counts. › Responses

OK

Response of `GET /sites/{siteId}/feedback`.
available
​boolean · required

Whether the site's plan includes comments.

comments
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Comments the site holds, deleted ones not counted — what the plan's ceiling counts.

limit
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

The plan's ceiling on comments per site.

open
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Threads open on the site.

page
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

The page returned, from 0.

pageSize
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Rows per page.

paths
​string[] · required

Every page that has a thread, for the page filter.

resolved
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Threads resolved on the site.

​SiteFeedbackRow[] · required

The comments, newest first.

total
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Comments matching the filter.


Lists who is blocked from commenting on a site, most recent first, fifty at a time.

GET
https://dropto.run
/api/sites/{siteId}/feedback/blocked
d2r_session (cookie)
or
Bearer

Lists who is blocked from commenting on a site, most recent first, fifty at a time. › path Parameters

siteId
​string · required

Lists who is blocked from commenting on a site, most recent first, fifty at a time. › query Parameters

page
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$

Lists who is blocked from commenting on a site, most recent first, fifty at a time. › Responses

OK

One page of the people blocked from commenting on a site.
page
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

The page returned, from 0.

pageSize
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Rows per page.

​SiteCommentBlockRow[] · required

Most recent first.

total
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Everybody blocked on the site.


Blocks whoever wrote a comment from commenting on the site, optionally deleting what they wrote there.

POST
https://dropto.run
/api/sites/{siteId}/feedback/blocked
d2r_session (cookie)
or
Bearer

Blocks whoever wrote a comment from commenting on the site, optionally deleting what they wrote there. › path Parameters

siteId
​string · required

Blocks whoever wrote a comment from commenting on the site, optionally deleting what they wrote there. › Request Body

Request body of `POST /sites/{siteId}/feedback/blocked`.
commentId
​string · maxLength: 26 · required

A comment the person wrote on the site.

removeComments
​boolean · required

Whether to delete every comment they wrote on the site as well.

Blocks whoever wrote a comment from commenting on the site, optionally deleting what they wrote there. › Responses

OK

Who was blocked.
commentsRemoved
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many of their comments were deleted now.

userId
​string · required

The person, as the Blocked list names them.


Lets a blocked person comment on the site again.

DELETE
https://dropto.run
/api/sites/{siteId}/feedback/blocked/{userId}
d2r_session (cookie)
or
Bearer

Lets a blocked person comment on the site again. › path Parameters

siteId
​string · required
userId
​string · required

Lets a blocked person comment on the site again. › Responses

No Content

No data returned

Reads a site's comment threads whole, with where each sits on its page and a cursor for what changed next.

GET
https://dropto.run
/api/sites/{siteId}/feedback/threads
d2r_session (cookie)
or
Bearer

Reads a site's comment threads whole, with where each sits on its page and a cursor for what changed next. › path Parameters

siteId
​string · required

Reads a site's comment threads whole, with where each sits on its page and a cursor for what changed next. › query Parameters

status
​string
path
​string
since
​integer | string · int64 · pattern: ^-?(?:0|[1-9]\d*)$
page
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$

Reads a site's comment threads whole, with where each sits on its page and a cursor for what changed next. › Responses

OK

Response of `GET /sites/{siteId}/feedback/threads`.
cursor
​integer | string · int64 · pattern: ^-?(?:0|[1-9]\d*)$ · required

The largest change value on the site at the moment of the read; send it as since to get only the threads that changed after.

more
​boolean · required

Whether another page follows.

page
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

The page returned, from 0.

​SiteFeedbackThread[] · required

The threads, in the order they were opened.


Answers a comment thread as the site's owner, and resolves it too when asked.

POST
https://dropto.run
/api/sites/{siteId}/feedback/threads/{threadId}/comments
d2r_session (cookie)
or
Bearer

Answers a comment thread as the site's owner, and resolves it too when asked. › path Parameters

siteId
​string · required
threadId
​string · required

Answers a comment thread as the site's owner, and resolves it too when asked. › Request Body

Request body of `POST /sites/{siteId}/feedback/threads/{threadId}/comments`.
body
​null | string · required

The reply, plain text.

resolve
​boolean

Whether to resolve the thread with the reply; false by default.

Default: false

Answers a comment thread as the site's owner, and resolves it too when asked. › Responses

OK

One thread, whole, as a tool reads it.
​SiteFeedbackComment[] · required

Its comments, oldest first; deleted ones left out.

createdAt
​string · date-time · required

When it was opened.

id
​string · required

Thread id, for replying and resolving.

outdated
​boolean · required

Whether it was opened on an earlier version than the one the site serves now — the words it points at may have changed since.

path
​string · required

The page it is on: a path on the site, or a document's path in a documents site.

​SiteFeedbackPlace · required

Where on the page.

resolvedAt
​null | string · date-time · required

When it was resolved, or null while open.

resolvedBy
​null | string · required

Who resolved it, by name, or null while open.

url
​string · required

The link that opens the page at the thread.


Reopens a resolved comment thread as the site's owner.

POST
https://dropto.run
/api/sites/{siteId}/feedback/threads/{threadId}/reopen
d2r_session (cookie)
or
Bearer

Reopens a resolved comment thread as the site's owner. › path Parameters

siteId
​string · required
threadId
​string · required

Reopens a resolved comment thread as the site's owner. › Responses

OK

One thread, whole, as a tool reads it.
​SiteFeedbackComment[] · required

Its comments, oldest first; deleted ones left out.

createdAt
​string · date-time · required

When it was opened.

id
​string · required

Thread id, for replying and resolving.

outdated
​boolean · required

Whether it was opened on an earlier version than the one the site serves now — the words it points at may have changed since.

path
​string · required

The page it is on: a path on the site, or a document's path in a documents site.

​SiteFeedbackPlace · required

Where on the page.

resolvedAt
​null | string · date-time · required

When it was resolved, or null while open.

resolvedBy
​null | string · required

Who resolved it, by name, or null while open.

url
​string · required

The link that opens the page at the thread.


Resolves a comment thread as the site's owner.

POST
https://dropto.run
/api/sites/{siteId}/feedback/threads/{threadId}/resolve
d2r_session (cookie)
or
Bearer

Resolves a comment thread as the site's owner. › path Parameters

siteId
​string · required
threadId
​string · required

Resolves a comment thread as the site's owner. › Responses

OK

One thread, whole, as a tool reads it.
​SiteFeedbackComment[] · required

Its comments, oldest first; deleted ones left out.

createdAt
​string · date-time · required

When it was opened.

id
​string · required

Thread id, for replying and resolving.

outdated
​boolean · required

Whether it was opened on an earlier version than the one the site serves now — the words it points at may have changed since.

path
​string · required

The page it is on: a path on the site, or a document's path in a documents site.

​SiteFeedbackPlace · required

Where on the page.

resolvedAt
​null | string · date-time · required

When it was resolved, or null while open.

resolvedBy
​null | string · required

Who resolved it, by name, or null while open.

url
​string · required

The link that opens the page at the thread.


Lists the forms a site has collected, and the account's month.

GET
https://dropto.run
/api/sites/{siteId}/forms
d2r_session (cookie)
or
Bearer

Lists the forms a site has collected, and the account's month. › path Parameters

siteId
​string · required

Lists the forms a site has collected, and the account's month. › Responses

OK

Response of `GET /api/sites/{siteId}/forms`.
enabled
​boolean · required

Whether this site's switch is on, so the tab can say why nothing is arriving.

​SiteFormSummary[] · required

One row per form name, most recently used first.

monthlyAllowance
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

What the account's tier allows a month. Zero means forms are not part of it.

usedThisMonth
​integer | string · int64 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Submissions the account has taken this calendar month, across every site it owns. The figure the allowance is measured against, which is why it is not the site's own count.


Reads one page of a form's submissions, newest first.

GET
https://dropto.run
/api/sites/{siteId}/forms/{formName}/submissions
d2r_session (cookie)
or
Bearer

Reads one page of a form's submissions, newest first. › path Parameters

siteId
​string · required
formName
​string · required

Reads one page of a form's submissions, newest first. › query Parameters

page
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$
pageSize
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$

Reads one page of a form's submissions, newest first. › Responses

OK

Response of `GET /api/sites/{siteId}/forms/{formName}/submissions`.
page
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Zero-based index of the page returned.

pageSize
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many rows a page holds, after the cap was applied.

​FormSubmissionRow[] · required

The page, newest first.

total
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many this form has in total, so the reader knows there is more.


Takes a site off the air without deleting it, keeping its files and subdomain.

POST
https://dropto.run
/api/sites/{siteId}/pause
d2r_session (cookie)
or
Bearer

Takes a site off the air without deleting it, keeping its files and subdomain. › path Parameters

siteId
​string · required

Takes a site off the air without deleting it, keeping its files and subdomain. › Responses

OK

Response of `POST /sites/{siteId}/pause` and `/resume`.
ownerPaused
​boolean · required

Whether the owner has it switched off, whatever the status says.

siteId
​string · required

ULID of the site.

status
​string · required

Its lifecycle state, one of SiteStatus as text.

statusChangedAt
​null | string · date-time · required

When the state last changed, or null if it never has.

subdomain
​string · required

The subdomain it is addressed by, whether or not it is serving.


Puts a paused site back on the air, if the plan still has room for it.

POST
https://dropto.run
/api/sites/{siteId}/resume
d2r_session (cookie)
or
Bearer

Puts a paused site back on the air, if the plan still has room for it. › path Parameters

siteId
​string · required

Puts a paused site back on the air, if the plan still has room for it. › Responses

OK

Response of `POST /sites/{siteId}/pause` and `/resume`.
ownerPaused
​boolean · required

Whether the owner has it switched off, whatever the status says.

siteId
​string · required

ULID of the site.

status
​string · required

Its lifecycle state, one of SiteStatus as text.

statusChangedAt
​null | string · date-time · required

When the state last changed, or null if it never has.

subdomain
​string · required

The subdomain it is addressed by, whether or not it is serving.


Moves a site to a new subdomain; the old one keeps redirecting to it.

POST
https://dropto.run
/api/sites/{siteId}/subdomain
d2r_session (cookie)
or
Bearer

Moves a site to a new subdomain; the old one keeps redirecting to it. › path Parameters

siteId
​string · required

Moves a site to a new subdomain; the old one keeps redirecting to it. › Request Body

oneOf
Exactly one variant must match.

Decision Table

VariantMatching Criteria
type = null
type = object · requires: subdomain
Properties for Variant 1:
null

Moves a site to a new subdomain; the old one keeps redirecting to it. › Responses

OK

Response of `POST /sites/{siteId}/subdomain`: the site's addresses after the change.
​FormerSubdomain[] · required

The names it used to answer on, newest first, each redirecting here.

siteId
​string · required

ULID of the site.

subdomain
​string · required

The subdomain it answers on now.

subdomainChangesLeft
​null | integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many more changes its plan allows, or null when it allows any number.

url
​string · required

Its URL on the content domain.


Reads one site's traffic tiles, chart and status split for a range, audience and filters.

GET
https://dropto.run
/api/sites/{siteId}/traffic/overview
d2r_session (cookie)
or
Bearer

Reads one site's traffic tiles, chart and status split for a range, audience and filters. › path Parameters

siteId
​string · required

Reads one site's traffic tiles, chart and status split for a range, audience and filters. › query Parameters

range
​string
audience
​string
filter
​string[]

Reads one site's traffic tiles, chart and status split for a range, audience and filters. › Responses

OK

The traffic page's overview for one range, audience and set of filters.
asOf
​null | string · date-time · required

When the Analytics Engine figures were read, or null when none were.

available
​boolean · required

False when Analytics Engine could not be read and nothing was kept.

breakdownDays
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Days the lists, globe and status split cover — the range, capped at what Analytics Engine keeps.

bucket
​string · required

Width of a chart point: hour, day or week.

days
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Its length in days.

​TrafficDocuments · required

The documents table, by UTC day.

from
​string · date-time · required

First instant of the range, UTC.

measuredSince
​null | string · date-time · required

First day anything was rolled up for this site, or null.

​required
range
​string · required

The range as the page spells it: 24h, 12m, or {N}d.

sampled
​boolean · required

Whether any figure is an estimate from sampled rows.

​null | array · required

The chart, or null when Analytics Engine could not be read.

seriesFrom
​string · date-time · required

Where the chart and tiles start: From, except on a filtered range longer than BreakdownDays, where only the breakdown window can be filtered.

​required
speedAvailable
​boolean · required

False when the speed figures were asked for and could not be read, so a null Speed means "couldn't load" rather than "nothing measured".

splitSince
​null | string · date-time · required

First whole day bots were counted apart from people and arrivals were recorded, or null when not yet. Before it, people include bots and visits are unknown; the page marks the day. Equal to MeasuredSince for a site that was split from its first day, which has no "before".

​required
to
​string · date-time · required

End of the range, exclusive: the top of the next hour.

​required

GET
https://dropto.run
/api/sites/{siteId}/traffic/top
d2r_session (cookie)
or
Bearer

Reads one of a site's traffic lists: top pages, referrers, countries or broken links. › path Parameters

siteId
​string · required

Reads one of a site's traffic lists: top pages, referrers, countries or broken links. › query Parameters

dimension
​string
range
​string
audience
​string
filter
​string[]
limit
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$

Reads one of a site's traffic lists: top pages, referrers, countries or broken links. › Responses

OK

One list of the traffic page.
asOf
​null | string · date-time · required

When it was read from Analytics Engine, or null.

available
​boolean · required

False when the list could not be read and nothing was kept.

breakdownDays
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Days the list covers.

dimension
​string · required

Which list: page, referrer, country or notfound.

from
​string · date-time · required

First instant the list covers — the breakdown window, not always the range.

​null | array · required

Values, busiest first, or null when the list could not be read.

range
​string · required

The range asked for.

sampled
​boolean · required

Whether any count is an estimate from sampled rows.

to
​string · date-time · required

End of the window, exclusive.


Lists the origins a site proxies /api/* to, with header names and the last four characters of each value.

GET
https://dropto.run
/api/sites/{siteId}/upstreams
d2r_session (cookie)
or
Bearer

Lists the origins a site proxies /api/* to, with header names and the last four characters of each value. › path Parameters

siteId
​string · required

Lists the origins a site proxies /api/* to, with header names and the last four characters of each value. › Responses

OK

Response of `GET /sites/{siteId}/upstreams`.
​ProxyAllowance · required

The account's proxied requests this month against its plan.

limit
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Most upstreams a site may declare.

proxyBlocked
​boolean · required

Whether the platform switched this site's proxy off (D17): every proxy route answers 404 until it is lifted, whatever the upstreams say.

​ProxyRouteView[] · required

The proxy routes the live version's _redirects declares; empty when it has none.

​UpstreamView[] · required

The site's upstreams, oldest first.


Declares an origin the site may proxy /api/* to, with headers whose values are sealed on arrival and never shown back.

POST
https://dropto.run
/api/sites/{siteId}/upstreams
d2r_session (cookie)
or
Bearer

Declares an origin the site may proxy /api/* to, with headers whose values are sealed on arrival and never shown back. › path Parameters

siteId
​string · required

Declares an origin the site may proxy /api/* to, with headers whose values are sealed on arrival and never shown back. › Request Body

Request of `POST /sites/{siteId}/upstreams`.
​null | array · required

Headers to attach to every call, values in plain text — sealed on arrival.

methods
​null | array · required

Methods visitors may send; GET only when left out.

origin
​null | string · required

https://host the site's _redirects sends calls to.

Declares an origin the site may proxy /api/* to, with headers whose values are sealed on arrival and never shown back. › Responses

OK

One upstream as the dashboard sees it.
blocked
​boolean · required

Whether the platform blocked this origin for every site (D17): calls to it answer 502 until the block is lifted.

createdAt
​string · date-time · required

When it was declared.

​UpstreamHeaderView[] · required

Header names and the last four characters of each value.

id
​string · required

Upstream id.

methods
​string[] · required

Methods visitors may send, GET implying HEAD.

origin
​string · required

https://host.

updatedAt
​string · date-time · required

When it last changed.


Lists the site's latest proxied requests, newest first: method, path without its query, status and timing.

GET
https://dropto.run
/api/sites/{siteId}/upstreams/log
d2r_session (cookie)
or
Bearer

Lists the site's latest proxied requests, newest first: method, path without its query, status and timing. › path Parameters

siteId
​string · required

Lists the site's latest proxied requests, newest first: method, path without its query, status and timing. › Responses

OK

Response of `GET /sites/{siteId}/upstreams/log`.
asOf
​null | string · date-time · required

When the entries were read, or null when they were not.

available
​boolean · required

False when the log could not be read: no dataset configured, or Analytics Engine down.

​ProxyLogRow[] · required

Latest proxied requests, newest first.


Stops the site proxying to an origin and drops its sealed headers.

DELETE
https://dropto.run
/api/sites/{siteId}/upstreams/{upstreamId}
d2r_session (cookie)
or
Bearer

Stops the site proxying to an origin and drops its sealed headers. › path Parameters

siteId
​string · required
upstreamId
​string · required

Stops the site proxying to an origin and drops its sealed headers. › Responses

No Content

No data returned

Changes the methods an upstream is open to, sets header values, or removes headers.

PATCH
https://dropto.run
/api/sites/{siteId}/upstreams/{upstreamId}
d2r_session (cookie)
or
Bearer

Changes the methods an upstream is open to, sets header values, or removes headers. › path Parameters

siteId
​string · required
upstreamId
​string · required

Changes the methods an upstream is open to, sets header values, or removes headers. › Request Body

Request of `PATCH /sites/{siteId}/upstreams/{upstreamId}`.
methods
​null | array · required

The methods to allow from now on; unchanged when left out.

removeHeaders
​null | array · required

Names of headers to drop.

​null | array · required

Headers to add or replace, values in plain text — sealed on arrival.

Changes the methods an upstream is open to, sets header values, or removes headers. › Responses

OK

One upstream as the dashboard sees it.
blocked
​boolean · required

Whether the platform blocked this origin for every site (D17): calls to it answer 502 until the block is lifted.

createdAt
​string · date-time · required

When it was declared.

​UpstreamHeaderView[] · required

Header names and the last four characters of each value.

id
​string · required

Upstream id.

methods
​string[] · required

Methods visitors may send, GET implying HEAD.

origin
​string · required

https://host.

updatedAt
​string · date-time · required

When it last changed.


Reads one page of the people a site is shared with, and whether each has opened it.

GET
https://dropto.run
/api/sites/{siteId}/viewers
d2r_session (cookie)
or
Bearer

Reads one page of the people a site is shared with, and whether each has opened it. › path Parameters

siteId
​string · required

Reads one page of the people a site is shared with, and whether each has opened it. › query Parameters

q
​string
status
​string
page
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$
pageSize
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$

Reads one page of the people a site is shared with, and whether each has opened it. › Responses

OK

Response of `GET /sites/{siteId}/viewers`.
available
​boolean · required

Whether the plan offers invite-only sites at all. A list can outlive the plan that allowed it, and is still shown so it can be shortened; adding to it is refused.

​SiteViewerCounts · required

How many people are in each status, ignoring the search and filter.

invitedOnly
​boolean · required

Whether the site is currently open only to the people listed.

limit
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

The most people this site's plan allows on the list, the owner included.

page
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

The zero-based page returned.

pageSize
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

Rows per page.

total
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many rows match the search and filter, across every page.

​SiteViewerRow[] · required

The rows on this page: the owner's first, then the most recently added.


Puts addresses on the list of people who may see a site — all of them, or none — and mails each.

POST
https://dropto.run
/api/sites/{siteId}/viewers
d2r_session (cookie)
or
Bearer

Puts addresses on the list of people who may see a site — all of them, or none — and mails each. › path Parameters

siteId
​string · required

Puts addresses on the list of people who may see a site — all of them, or none — and mails each. › Request Body

Request body of `POST /sites/{siteId}/viewers`.
emails
​string[] · required

The addresses to add, as typed. Each is trimmed and lower-cased before it is stored; repeats collapse.

notify
​null | boolean

Whether to mail each address added, defaulting to yes. Undo sends false: putting back somebody just removed should not mail them twice.

role
​null | string

What every address added may do: View (the default) or Comment, in any case. Comment is refused on a plan without comments. Addresses already listed keep the role they have.

Puts addresses on the list of people who may see a site — all of them, or none — and mails each. › Responses

OK

Response of `POST /sites/{siteId}/viewers`.
added
​string[] · required

The addresses newly put on the list, as stored.

alreadyListed
​string[] · required

The addresses sent that were on the list already, left as they were.

total
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many people the list now holds, the owner included.


Takes one address off a site's list and ends that person's access within a minute.

DELETE
https://dropto.run
/api/sites/{siteId}/viewers
d2r_session (cookie)
or
Bearer

Takes one address off a site's list and ends that person's access within a minute. › path Parameters

siteId
​string · required

Takes one address off a site's list and ends that person's access within a minute. › query Parameters

email
​string

Takes one address off a site's list and ends that person's access within a minute. › Responses

OK

Response of `DELETE /sites/{siteId}/viewers`.
email
​string · required

The address removed, as it was stored.

total
​integer | string · int32 · pattern: ^-?(?:0|[1-9]\d*)$ · required

How many people the list still holds, the owner included.


Changes what one person on a site's list may do — view it, or also comment on it.

PATCH
https://dropto.run
/api/sites/{siteId}/viewers
d2r_session (cookie)
or
Bearer

Changes what one person on a site's list may do — view it, or also comment on it. › path Parameters

siteId
​string · required

Changes what one person on a site's list may do — view it, or also comment on it. › query Parameters

email
​string

Changes what one person on a site's list may do — view it, or also comment on it. › Request Body

Request body of `PATCH /sites/{siteId}/viewers`.
role
​null | string · required

The role to give: View or Comment, in any case.

Changes what one person on a site's list may do — view it, or also comment on it. › Responses

OK

Response of `PATCH /sites/{siteId}/viewers`.
email
​string · required

The address, as it is stored.

role
​string · required

The role it now has.


Mails one person on a site's list again — at most once a day per address.

POST
https://dropto.run
/api/sites/{siteId}/viewers/resend
d2r_session (cookie)
or
Bearer

Mails one person on a site's list again — at most once a day per address. › path Parameters

siteId
​string · required

Mails one person on a site's list again — at most once a day per address. › Request Body

Request body of `POST /sites/{siteId}/viewers/resend`.
email
​string · required

The address on the list to mail again, in any case.

Mails one person on a site's list again — at most once a day per address. › Responses

OK

Response of `POST /sites/{siteId}/viewers/resend`.
email
​string · required

The address mailed, as stored.

emailedAt
​string · date-time · required

When the mail was queued; another may be sent a day after this.