at.happyproto.server.addDomain

happyproto.at

Schema Diff

+12 -0

From

CID
bafyreicwdv3bpl5...
Indexed At
2026-10-28 22:19 UTC
View this version

To

CID
bafyreigirsm7ugc...
Indexed At
2026-10-29 15:52 UTC
View this version

Compatibility Analysis

Backward Compatible

No changes detected.

1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "altRecord": {
5 5
      "properties": {
6 6
        "type": {
7 7
          "description": "A.",
8 8
          "type": "string"
9 9
        },
10 10
        "value": {
11 11
          "description": "The instance host's public IPv4.",
12 12
          "type": "string"
13 13
        }
14 14
      },
15 15
      "required": [
16 16
        "type",
17 17
        "value"
18 18
      ],
19 19
      "type": "object"
20 20
    },
21 21
    "checks": {
22 22
      "properties": {
23 23
        "checkedAt": {
24 24
          "description": "When the check ran.",
25 25
          "type": "string"
26 26
        },
27 27
        "ownership": {
28 28
          "description": "Whether the TXT record carries this claim's token.",
29 29
          "knownValues": [
30 30
            "ok",
31 31
            "missing",
32 32
            "error"
33 33
          ],
34 34
          "type": "string"
35 35
        },
36 36
        "pointing": {
37 37
          "description": "Whether the hostname resolves to the instance's host. Absent when the check didn't get that far, such as when the TXT record was missing.",
38 38
          "knownValues": [
39 39
            "ok",
40 40
            "elsewhere",
41 41
            "error"
42 42
          ],
43 43
          "type": "string"
44 44
        }
45 45
      },
46 46
      "required": [
47 47
        "ownership",
48 48
        "checkedAt"
49 49
      ],
50 50
      "type": "object"
51 51
    },
52 52
    "domain": {
53 53
      "description": "A custom domain on one of the caller's instances.",
54 54
      "properties": {
55 55
        "checks": {
56 56
          "description": "The latest DNS check. Absent until the first check has run.",
57 57
          "ref": "#checks",
58 58
          "type": "ref"
59 59
        },
60 60
        "createdAt": {
61 61
          "description": "When the domain was added.",
62 62
          "type": "string"
63 63
        },
64 64
        "expiresAt": {
65 65
          "description": "When a pending claim expires if it is never verified. Absent once verified.",
66 66
          "type": "string"
67 67
        },
68 68
        "hostname": {
69 69
          "description": "The hostname, lowercase, internationalized names in punycode.",
70 70
          "type": "string"
71 71
        },
72 72
        "id": {
73 73
          "description": "The domain's UUID.",
74 74
          "type": "string"
75 75
        },
76 76
        "lapsesAt": {
77 77
          "description": "When HappyProto stops serving the domain if its TXT record stays missing. Absent while the record is present.",
78 78
          "type": "string"
79 79
        },
80 80
        "primary": {
81 81
          "description": "Whether this is the instance's primary domain, the one its PUBLIC_URL follows.",
82 82
          "type": "boolean"
83 83
        },
84 84
        "records": {
85 85
          "description": "The DNS records the customer publishes: the TXT that proves ownership, then the CNAME that points the hostname at the instance.",
86 86
          "items": {
87 87
            "ref": "#record",
88 88
            "type": "ref"
89 89
          },
90 90
          "type": "array"
91 91
        },
92 92
        "serving": {
93 93
          "description": "Whether the domain actually works: off until it is verified, issuing while its certificate is ordered, live once it serves over HTTPS.",
94 94
          "knownValues": [
95 95
            "routing",
96 96
            "issuing",
97 97
            "live",
98 98
            "failed",
99 99
            "off"
100 100
          ],
101 101
          "type": "string"
102 102
        },
103 103
        "state": {
104 104
          "description": "pending: waiting for the DNS records. verified: proven and served. lapsed: the TXT record went missing, and HappyProto stopped serving it; it recovers if the record comes back before expiresAt.",
105 105
          "knownValues": [
106 106
            "pending",
107 107
            "verified",
108 108
            "lapsed"
109 109
          ],
110 110
          "type": "string"
111 111
        },
112 112
        "verifiedAt": {
113 113
          "description": "When the domain was first verified.",
114 114
          "type": "string"
115 115
        }
116 116
      },
117 117
      "required": [
118 118
        "id",
119 119
        "hostname",
120 120
        "state",
121 121
        "primary",
122 122
        "records",
123 123
        "serving",
124 124
        "createdAt"
125 125
      ],
126 126
      "type": "object"
127 127
    },
128 128
    "main": {
129 129
      "description": "Add a custom domain to one of the caller's instances. It starts pending, with the DNS records to publish. Customers only.",
130 130
      "errors": [
131 131
        {
132 132
          "description": "This endpoint requires an authenticated caller.",
133 133
          "name": "AuthRequired"
134 134
        },
135 135
        {
136 136
          "description": "The caller is not a HappyProto customer, or the provisioner refused them.",
137 137
          "name": "Forbidden"
138 138
        },
139 139
        {
140 140
          "description": "instanceId or idempotencyKey is not a UUID, or hostname is missing or too long.",
141 141
          "name": "InvalidRequest"
142 142
        },
143 143
        {
144 144
          "description": "No such instance or domain, or it is not the caller's. The cases are indistinguishable.",
145 145
          "name": "NotFound"
146 146
        },
147 147
        {
148 148
          "description": "Custom domains are not switched on yet.",
149 149
          "name": "NotAvailable"
150 150
        },
151 151
        {
152 152
          "description": "Passed through from the provisioner.",
153 153
          "name": "InvalidSlug"
154 154
        },
155 155
        {
156 156
          "description": "Passed through from the provisioner.",
157 157
          "name": "SlugTaken"
158 158
        },
159 159
        {
160 160
          "description": "Passed through from the provisioner.",
161 161
          "name": "NotEntitled"
162 162
        },
163 163
        {
164 164
          "description": "Passed through from the provisioner.",
165 165
          "name": "InstanceLimit"
166 166
        },
167 167
        {
168 168
          "description": "Passed through from the provisioner.",
169 169
          "name": "NoCapacity"
170 170
        },
171 171
        {
172 172
          "description": "Passed through from the provisioner: the instance is already changing, or a request with this idempotencyKey is still running.",
173 173
          "name": "OperationInProgress"
174 174
        },
175 175
        {
176 176
          "description": "The hostname is not a valid public hostname: no scheme, port, path, wildcard or IP address.",
177 177
          "name": "InvalidHostname"
178 178
        },
179 179
        {
180 180
          "description": "The hostname is HappyProto's own, or under one of its domains.",
181 181
          "name": "PlatformHostname"
182 182
        },
183 183
        {
184 184
          "description": "The instance already has this hostname.",
185 185
          "name": "DomainExists"
186 186
        },
187 187
        {
188 188
          "description": "The instance already has as many custom domains as it may.",
189 189
          "name": "DomainLimit"
190 190
        },
191 191
        {
192 192
          "description": "Passed through from the provisioner.",
193 193
          "name": "TooSoon"
194 194
        },
195 195
        {
196 196
          "description": "Passed through from the provisioner.",
197 197
          "name": "DomainIsPrimary"
198 198
        },
199 199
        {
200 +
          "description": "Passed through from the provisioner.",
201 +
          "name": "NotVerified"
202 +
        },
203 +
        {
204 +
          "description": "Passed through from the provisioner.",
205 +
          "name": "CertificateNotReady"
206 +
        },
207 +
        {
208 +
          "description": "Passed through from the provisioner.",
209 +
          "name": "VersionTooOld"
210 +
        },
211 +
        {
200 212
          "description": "The provisioner is unreachable, not configured, or answered with an error it does not explain to callers, or the job could not be started.",
201 213
          "name": "Upstream"
202 214
        }
203 215
      ],
204 216
      "input": {
205 217
        "encoding": "application/json",
206 218
        "schema": {
207 219
          "properties": {
208 220
            "hostname": {
209 221
              "description": "The hostname, such as app.example.com. No scheme, port or path.",
210 222
              "type": "string"
211 223
            },
212 224
            "idempotencyKey": {
213 225
              "description": "A UUID the client generates once per intended change and resends on every retry of it, so a retry gets the original reply instead of acting twice.",
214 226
              "type": "string"
215 227
            },
216 228
            "instanceId": {
217 229
              "description": "The instance's UUID.",
218 230
              "type": "string"
219 231
            }
220 232
          },
221 233
          "required": [
222 234
            "instanceId",
223 235
            "hostname",
224 236
            "idempotencyKey"
225 237
          ],
226 238
          "type": "object"
227 239
        }
228 240
      },
229 241
      "output": {
230 242
        "encoding": "application/json",
231 243
        "schema": {
232 244
          "properties": {
233 245
            "domain": {
234 246
              "ref": "#domain",
235 247
              "type": "ref"
236 248
            }
237 249
          },
238 250
          "required": [
239 251
            "domain"
240 252
          ],
241 253
          "type": "object"
242 254
        }
243 255
      },
244 256
      "type": "procedure"
245 257
    },
246 258
    "record": {
247 259
      "properties": {
248 260
        "alt": {
249 261
          "description": "For an apex name, which cannot hold a CNAME: the A record to publish instead. Absent when the instance's host has no public IPv4.",
250 262
          "ref": "#altRecord",
251 263
          "type": "ref"
252 264
        },
253 265
        "name": {
254 266
          "description": "The record's name.",
255 267
          "type": "string"
256 268
        },
257 269
        "type": {
258 270
          "description": "TXT or CNAME.",
259 271
          "type": "string"
260 272
        },
261 273
        "value": {
262 274
          "description": "The record's value.",
263 275
          "type": "string"
264 276
        }
265 277
      },
266 278
      "required": [
267 279
        "type",
268 280
        "name",
269 281
        "value"
270 282
      ],
271 283
      "type": "object"
272 284
    }
273 285
  },
274 286
  "id": "at.happyproto.server.addDomain",
275 287
  "lexicon": 1
276 288
}

Compare Other Versions

Lexicon Garden

@