Skip to content
14,388 linesCodeBlameRaw

Pick any line to see why it is the way it is: the commit, the pull request and issue it came from, and what the agent was thinking.

Costs: a statement that keeps usage sold, running g1t, subscriptions and what was given away (comped, free use, trial, pool) apart, and says who was paid; free use carries its own cost; the run button says it is running1{
Merge Stripe Tax, the card fee on card payments, and one free workspace per person2 "device_code": {
3 "request": {
4 "client_name": "Claude Code"
5 },
6 "response": {
7 "device_code": "Gm3k…",
8 "user_code": "WDJB-MJHT",
9 "verification_uri": "https://g1t.sh/device",
10 "verification_uri_complete": "https://g1t.sh/device?code=WDJB-MJHT",
11 "expires_in": 900,
12 "interval": 5
13 }
14 },
15 "device_token": {
16 "request": {
17 "device_code": "Gm3k…"
18 },
19 "response": {
20 "status": "approved",
21 "token": "g1t_…",
22 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar23 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person24 "verified": true
25 }
26 },
27 "whoami": {
28 "response": {
29 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
30 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar31 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person32 "kind": "user",
33 "verified": true,
34 "workspaces": [
35 {
36 "slug": "acme",
37 "role": "member",
38 "base_permission": "write"
39 },
40 {
41 "slug": "flagon-io",
42 "role": "owner",
43 "base_permission": "write"
44 }
45 ],
46 "token": {
47 "token_id": "tok_01kkntd3p2v8x6ym5r0c1q7a9e",
48 "scopes": [
49 "repo:read",
50 "issues:read",
51 "issues:write",
52 "pull_requests:read",
53 "pull_requests:write"
54 ]
55 }
56 },
57 "notes": "`token` is what the access token you called with may do: its `scopes` (left out for full access) and `legacy` when it was made before tokens had scopes. A token reaches every workspace and repository whoever it acts as can; its scopes say what it may do there. See [Scopes](/guides/authentication/#scopes). `kind` is `user`, `workspace` for a [workspace access token](/guides/workspaces/#workspace-access-tokens), or `agent` for the token a g1t agent works with. For a workspace token, `username` is the workspace's slug and `workspaces` holds only that workspace. Each workspace carries its `base_permission`: what a member gets on each of its repositories (owners have Admin). Roles given on single repositories are in `grants`, each with `repo_id`, `workspace` and `role`; it is left out when there are none. See [Access and roles](/guides/access-and-roles/)."
58 },
59 "create_workspace": {
60 "request": {
61 "slug": "acme-labs",
62 "name": "Acme Labs"
63 },
64 "response": {
65 "id": "wsp_01m43teqa9em6bje0bhvdj4jkb",
66 "slug": "acme-labs",
67 "name": "Acme Labs",
68 "description": null,
69 "created_at": "2026-10-04T16:02:51.337Z",
70 "member_count": 1,
Merge main (membership, two-factor, GitHub repo roles) into tokens71 "base_permission": "read",
72 "team_creation": "members",
73 "members_can_create_public_repositories": true,
74 "members_can_create_private_repositories": true,
75 "members_can_change_repo_visibility": true,
76 "members_can_delete_repositories": false,
77 "members_can_invite_outside_collaborators": true,
78 "two_factor_requirement_enabled": false
Merge Stripe Tax, the card fee on card payments, and one free workspace per person79 },
Merge main (membership, two-factor, GitHub repo roles) into tokens80 "notes": "`base_permission` is what every member gets on each of its repositories: `read` for a new workspace until an owner changes it with `PATCH /workspaces/{workspace}` or `PUT /workspaces/{workspace}/base_permission`. See [Access and roles](/guides/access-and-roles/). `team_creation` is who may create its teams: `members` (any member) until an owner sets `owners` with `PATCH /workspaces/{workspace}`. A new workspace is free, and each person owns at most one free workspace: while you own one, this answers `402` with `payment_required` and says which, until it is on the plan or deleted. See [One free workspace per person](/guides/usage-and-billing/#one-free-workspace-per-person)."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person81 },
82 "get_workspace": {
83 "params": {
84 "workspace": "acme-labs"
85 },
86 "response": {
87 "id": "wsp_01m43teqa9em6bje0bhvdj4jkb",
88 "slug": "acme-labs",
89 "name": "Acme Labs",
90 "description": "Rockets, and the software that flies them.",
91 "created_at": "2026-10-04T16:02:51.337Z",
92 "member_count": 3,
93 "base_permission": "write",
Merge main (membership, two-factor, GitHub repo roles) into tokens94 "team_creation": "members",
95 "members_can_create_public_repositories": true,
96 "members_can_create_private_repositories": true,
97 "members_can_change_repo_visibility": true,
98 "members_can_delete_repositories": false,
99 "members_can_invite_outside_collaborators": true,
100 "two_factor_requirement_enabled": false
Merge Stripe Tax, the card fee on card payments, and one free workspace per person101 },
Merge main (membership, two-factor, GitHub repo roles) into tokens102 "notes": "`team_creation` is who may create its teams: `members` (any member, the default) or `owners`. The `members_can_…` fields are its [member privileges](/guides/workspaces/#member-privileges), and `two_factor_requirement_enabled` whether it [requires two-factor authentication](/guides/authentication/#require-two-factor-authentication). Change it, and the rest, with [`PATCH /workspaces/{workspace}`](/reference/api/workspaces/update-workspace/). `404` for anyone who is not a member. See [Workspaces](/guides/workspaces/)."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person103 },
104 "update_workspace": {
105 "params": {
106 "workspace": "acme-labs"
107 },
108 "request": {
109 "name": "Acme Labs",
110 "description": "Rockets, and the software that flies them.",
Merge main (membership, two-factor, GitHub repo roles) into tokens111 "team_creation": "owners",
112 "members_can_delete_repositories": true
Merge Stripe Tax, the card fee on card payments, and one free workspace per person113 },
114 "response": {
115 "id": "wsp_01m43teqa9em6bje0bhvdj4jkb",
116 "slug": "acme-labs",
117 "name": "Acme Labs",
118 "description": "Rockets, and the software that flies them.",
119 "created_at": "2026-10-04T16:02:51.337Z",
120 "member_count": 3,
121 "base_permission": "write",
Merge main (membership, two-factor, GitHub repo roles) into tokens122 "team_creation": "owners",
123 "members_can_create_public_repositories": true,
124 "members_can_create_private_repositories": true,
125 "members_can_change_repo_visibility": true,
126 "members_can_delete_repositories": true,
127 "members_can_invite_outside_collaborators": true,
128 "two_factor_requirement_enabled": false
129 },
130 "notes": "Only the fields given change. `name` is the display name; the slug, the first part of the workspace's addresses, stays as it is. `base_permission` needs the `access:admin` scope as well as `workspace:admin`; [`set_base_permission`](/reference/api/access/set-base-permission/) sets it alone. `team_creation` is `members` (any member may create a team, the default) or `owners`; teams already made stay. The `members_can_…` fields are the workspace's member privileges: who may create public and private repositories, and whether members with the Admin role on a repository may change its visibility, delete or transfer it, and invite outside collaborators. `two_factor_requirement_enabled` holds everyone without two-factor authentication out of the workspace until they turn it on, and needs it on your own account first. Refused with `403` for anyone but an owner signed in as a person. Recorded in the [audit log](/guides/audit-log/). See [Workspaces](/guides/workspaces/)."
131 },
132 "list_members": {
133 "params": {
134 "workspace": "acme-labs"
135 },
136 "response": [
137 {
138 "username": "ada",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar139 "display_username": "Ada",
Merge main (membership, two-factor, GitHub repo roles) into tokens140 "role": "owner",
141 "org_roles": [],
142 "two_factor": true,
143 "name": "Ada Lovelace",
144 "avatar": null
145 },
146 {
147 "username": "grace",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar148 "display_username": "grace",
Merge main (membership, two-factor, GitHub repo roles) into tokens149 "role": "member",
150 "org_roles": [
151 "security_manager"
152 ],
153 "two_factor": false,
154 "name": "Grace Hopper",
155 "avatar": null
156 }
157 ],
158 "notes": "Owners first, then by username. `two_factor` is shown to owners only, and is `null` for anyone else. `403` for anyone who is not a member. See [Workspaces](/guides/workspaces/#members-and-owners)."
159 },
160 "update_member": {
161 "params": {
162 "workspace": "acme-labs",
163 "username": "grace"
164 },
165 "request": {
166 "role": "member",
167 "org_roles": [
168 "security_manager"
169 ]
Merge Stripe Tax, the card fee on card payments, and one free workspace per person170 },
Merge main (membership, two-factor, GitHub repo roles) into tokens171 "response": {
172 "username": "grace",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar173 "display_username": "grace",
Merge main (membership, two-factor, GitHub repo roles) into tokens174 "role": "member",
175 "org_roles": [
176 "security_manager"
177 ],
178 "two_factor": null,
179 "name": "Grace Hopper",
180 "avatar": null
181 },
182 "notes": "Only the fields given change; `org_roles` replaces the list. `409` when it would leave the workspace without an owner. Refused with `403` for anyone but an owner signed in as a person. Recorded in the [audit log](/guides/audit-log/) as `member.role_changed`, `member.org_role_added` or `member.org_role_removed`. See [Workspaces](/guides/workspaces/#members-and-owners)."
183 },
184 "remove_member": {
185 "params": {
186 "workspace": "acme-labs",
187 "username": "grace"
188 },
189 "response": true,
190 "notes": "Their roles on the workspace's repositories and their place in its teams go with them. Your own username is leaving, as [`leave_workspace`](/reference/api/members/leave-workspace/). `409` for the last owner. Recorded as `member.removed`."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person191 },
Merge main (membership, two-factor, GitHub repo roles) into tokens192 "transfer_ownership": {
193 "params": {
194 "workspace": "acme-labs"
195 },
196 "request": {
197 "username": "grace"
198 },
199 "response": true,
200 "notes": "`username` becomes an owner and you a member, in one step. Recorded as `workspace.ownership_transferred`."
201 },
202 "leave_workspace": {
203 "params": {
204 "workspace": "acme-labs"
205 },
206 "response": true,
207 "notes": "`409` for the last owner: make another member an owner first, or delete the workspace. Recorded as `member.left`."
208 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person209 "delete_workspace": {
210 "request": {
211 "confirm": "acme-labs"
212 },
213 "response": true,
214 "notes": "Refused with `402` while billing cannot settle it, with a message that says what to do, and with `403` for anyone but an owner signed in as a person, or for a protected workspace. Its repositories, projects and apps go with it; g1t's support can restore it for 30 days. See [Delete a workspace](/guides/workspaces/#delete-a-workspace)."
215 },
216 "list_emails": {
217 "response": {
218 "emails": [
219 {
220 "email": "ada@example.com",
221 "verified": true,
222 "primary": true,
223 "backup": false,
224 "created_at": "2026-09-01T10:00:00.000Z",
225 "verified_at": "2026-09-01T10:02:11.000Z"
226 },
227 {
228 "email": "ada@acme.com",
229 "verified": true,
230 "primary": false,
231 "backup": true,
232 "created_at": "2026-10-02T09:30:00.000Z",
233 "verified_at": "2026-10-02T09:31:40.000Z"
234 },
235 {
236 "email": "ada.l@example.org",
237 "verified": false,
238 "primary": false,
239 "backup": false,
240 "created_at": "2026-10-05T14:12:03.000Z",
241 "verified_at": null
242 }
243 ],
244 "private_email": true,
245 "block_private_pushes": false,
246 "noreply": "6c1d0efg+ada@users.noreply.g1t.sh",
247 "commit_email": "6c1d0efg+ada@users.noreply.g1t.sh",
248 "limit": 10
249 },
250 "notes": "Your primary address comes first, then confirmed addresses, then unconfirmed ones. Any confirmed address signs you in, can reset your password and attributes commits to you. See [Email addresses](/guides/authentication/#email-addresses)."
251 },
252 "add_email": {
253 "request": {
254 "email": "ada.l@example.org",
255 "password": "…"
256 },
257 "response": {
258 "emails": [
259 {
260 "email": "ada@example.com",
261 "verified": true,
262 "primary": true,
263 "backup": false,
264 "created_at": "2026-09-01T10:00:00.000Z",
265 "verified_at": "2026-09-01T10:02:11.000Z"
266 },
267 {
268 "email": "ada@acme.com",
269 "verified": true,
270 "primary": false,
271 "backup": true,
272 "created_at": "2026-10-02T09:30:00.000Z",
273 "verified_at": "2026-10-02T09:31:40.000Z"
274 },
275 {
276 "email": "ada.l@example.org",
277 "verified": false,
278 "primary": false,
279 "backup": false,
280 "created_at": "2026-10-05T14:12:03.000Z",
281 "verified_at": null
282 }
283 ],
284 "private_email": true,
285 "block_private_pushes": false,
286 "noreply": "6c1d0efg+ada@users.noreply.g1t.sh",
287 "commit_email": "6c1d0efg+ada@users.noreply.g1t.sh",
288 "limit": 10
289 },
Merge email confirmation gate: a code and a link, nothing until confirmed (identity 0036)290 "notes": "Answers `403` with code `reauth_required` when `password` is missing or wrong, and `409` when another account has confirmed the address. g1t emails the address a six-digit code and a link; it stays unconfirmed until the code is sent to [`confirm_email`](/reference/api/accounts/confirm-email/) or the link is followed."
291 },
292 "confirm_email": {
293 "request": {
294 "code": "482913"
295 },
296 "response": {
297 "username": "ada",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar298 "display_username": "Ada",
Merge email confirmation gate: a code and a link, nothing until confirmed (identity 0036)299 "email": "ada@example.com",
300 "verified": true,
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)301 "joined": null,
302 "invited_to": "acme",
Merge email confirmation gate: a code and a link, nothing until confirmed (identity 0036)303 "invite_lapsed": null
304 },
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)305 "notes": "The code confirms the address it was sent to, and ends the link sent with it. A wrong, used or expired code answers `422` with one message for all three; after ten wrong codes in an hour the account answers `409` for a while, and the link in the email still works. `verified` says whether the account is confirmed: whether its primary address is. `invited_to` is set when the invite the account signed up with brings it into a workspace: confirming the address sends the account an invitation to that workspace, which it accepts with `POST /user/invitations/{id}/accept` or declines; nobody joins a workspace without saying yes. `joined` is kept for older clients and is null. When the invite was revoked or expired, or the workspace deleted, while the account waited, the address is confirmed all the same and `invite_lapsed` says so. See [Confirming your email address](/guides/authentication/#confirming-your-email-address)."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person306 },
307 "remove_email": {
308 "request": {
309 "password": "…"
310 },
311 "response": {
312 "emails": [
313 {
314 "email": "ada@example.com",
315 "verified": true,
316 "primary": true,
317 "backup": false,
318 "created_at": "2026-09-01T10:00:00.000Z",
319 "verified_at": "2026-09-01T10:02:11.000Z"
320 },
321 {
322 "email": "ada@acme.com",
323 "verified": true,
324 "primary": false,
325 "backup": true,
326 "created_at": "2026-10-02T09:30:00.000Z",
327 "verified_at": "2026-10-02T09:31:40.000Z"
328 },
329 {
330 "email": "ada.l@example.org",
331 "verified": false,
332 "primary": false,
333 "backup": false,
334 "created_at": "2026-10-05T14:12:03.000Z",
335 "verified_at": null
336 }
337 ],
338 "private_email": true,
339 "block_private_pushes": false,
340 "noreply": "6c1d0efg+ada@users.noreply.g1t.sh",
341 "commit_email": "6c1d0efg+ada@users.noreply.g1t.sh",
342 "limit": 10
343 },
344 "notes": "Give the address in the path, URL-encoded: `DELETE /user/emails/ada.l%40example.org`. Answers `409` for your primary address or your last confirmed one."
345 },
346 "update_email_settings": {
347 "request": {
348 "primary": "ada@acme.com",
349 "password": "…"
350 },
351 "response": {
352 "emails": [
353 {
354 "email": "ada@example.com",
355 "verified": true,
356 "primary": true,
357 "backup": false,
358 "created_at": "2026-09-01T10:00:00.000Z",
359 "verified_at": "2026-09-01T10:02:11.000Z"
360 },
361 {
362 "email": "ada@acme.com",
363 "verified": true,
364 "primary": false,
365 "backup": true,
366 "created_at": "2026-10-02T09:30:00.000Z",
367 "verified_at": "2026-10-02T09:31:40.000Z"
368 },
369 {
370 "email": "ada.l@example.org",
371 "verified": false,
372 "primary": false,
373 "backup": false,
374 "created_at": "2026-10-05T14:12:03.000Z",
375 "verified_at": null
376 }
377 ],
378 "private_email": true,
379 "block_private_pushes": false,
380 "noreply": "6c1d0efg+ada@users.noreply.g1t.sh",
381 "commit_email": "6c1d0efg+ada@users.noreply.g1t.sh",
382 "limit": 10
383 },
384 "notes": "Only the fields given change. `primary` and `backup` need `password`; `private_email` and `block_private_pushes` do not."
385 },
Anyone on g1t can invite a friend again: Invite a friend, in the account menu with how many are left beside it, opens Settings → Invites to g1t with a dialog for their email address and a note. The friend gets an email from them whose link opens sign-up with the address filled in and, because it came from that email, confirmed; their account starts with a workspace of its own, and the page lists every invite sent with where it stands (Pending, confirming their email, Joined as @them), with Copy link, Send again and Revoke on each. It is word of mouth, never a gate: sign-ups stay open to everyone, nothing asks for an invite, and running out says friends can still sign up without one.386 "list_invites": {
387 "response": {
388 "allowance": {
389 "limit": 20,
390 "used": 2,
391 "remaining": 18
392 },
393 "invites": [
394 {
395 "id": "inv_01kp2x7m8n9q0r1s2t3v4w5x6y",
396 "code": "g1t-k7m2-q9xd-4hpw-…",
397 "hint": "g1t-k7m2",
398 "email": "ada@example.com",
399 "kind": "account",
400 "workspace": null,
401 "status": "pending",
402 "charged_to": "user",
403 "invited_by": "syntaqx",
404 "redeemed_by": null,
405 "created_at": "2026-10-05T17:00:00.000Z",
406 "expires_at": "2026-11-04T17:00:00.000Z",
407 "redeemed_at": null,
408 "revoked_at": null,
409 "invitee": null,
410 "role": null
411 },
412 {
413 "id": "inv_01kp1v3c4d5e6f7g8h9j0k1m2n",
414 "code": null,
415 "hint": "g1t-p3rt",
416 "email": "grace@example.com",
417 "kind": "account",
418 "workspace": null,
419 "status": "redeemed",
420 "charged_to": "user",
421 "invited_by": "syntaqx",
422 "redeemed_by": "grace",
423 "created_at": "2026-10-02T09:12:40.000Z",
424 "expires_at": "2026-11-01T09:12:40.000Z",
425 "redeemed_at": "2026-10-02T11:30:05.000Z",
426 "revoked_at": null,
427 "invitee": "grace",
428 "role": null
429 }
430 ]
431 },
432 "notes": "Anyone can sign up for g1t without an invite. A revoked or expired invite that was never used is not counted, so it comes back; a used one stays spent. `status` is `pending`, `awaiting_confirmation`, `awaiting_answer` (the account it made has yet to accept or decline the workspace in `workspace`), `redeemed` (they joined, as `redeemed_by`), `declined`, `expired` or `revoked`. See [Invite a friend](/guides/authentication/#invite-a-friend)."
433 },
434 "create_invite": {
435 "request": {
436 "email": "ada@example.com",
437 "message": "This is where we keep the compiler now. Come and look."
438 },
439 "response": {
440 "id": "inv_01kp2x7m8n9q0r1s2t3v4w5x6y",
441 "code": "g1t-k7m2-q9xd-4hpw-…",
442 "hint": "g1t-k7m2",
443 "email": "ada@example.com",
444 "kind": "account",
445 "workspace": null,
446 "status": "pending",
447 "charged_to": "user",
448 "invited_by": "syntaqx",
449 "redeemed_by": null,
450 "created_at": "2026-10-05T17:00:00.000Z",
451 "expires_at": "2026-11-04T17:00:00.000Z",
452 "redeemed_at": null,
453 "revoked_at": null,
454 "invitee": null,
455 "role": null
456 },
457 "notes": "The code is returned in full; the email g1t sends carries a link to `https://g1t.sh/invite/<code>` that opens sign-up with the address filled in and confirmed. Add `workspace` (and `role`) to also invite them to a workspace you own on a paid plan: once their account is confirmed they accept or decline it, and no workspace of their own is made. A free workspace is refused with `402` (`payment_required`). Refused with `409` when the address already has a g1t account or you already have a pending invite for it, neither of which uses an invite; with `402` (`limit`) when you have none left; and with `403` for an agent's or a workspace's token, or before your own address is confirmed."
458 },
459 "revoke_invite": {
460 "response": {
461 "id": "inv_01kp2x7m8n9q0r1s2t3v4w5x6y",
462 "code": null,
463 "hint": "g1t-k7m2",
464 "email": "ada@example.com",
465 "kind": "account",
466 "workspace": null,
467 "status": "revoked",
468 "charged_to": "user",
469 "invited_by": "syntaqx",
470 "redeemed_by": null,
471 "created_at": "2026-10-05T17:00:00.000Z",
472 "expires_at": "2026-11-04T17:00:00.000Z",
473 "redeemed_at": null,
474 "revoked_at": "2026-10-06T08:00:00.000Z",
475 "invitee": null,
476 "role": null
477 },
478 "notes": "The invite comes back to you. One already used to make an account cannot be revoked and stays spent."
479 },
480 "resend_invite": {
481 "response": {
482 "id": "inv_01kp2x7m8n9q0r1s2t3v4w5x6y",
483 "code": "g1t-k7m2-q9xd-4hpw-…",
484 "hint": "g1t-k7m2",
485 "email": "ada@example.com",
486 "kind": "account",
487 "workspace": null,
488 "status": "pending",
489 "charged_to": "user",
490 "invited_by": "syntaqx",
491 "redeemed_by": null,
492 "created_at": "2026-10-05T17:00:00.000Z",
493 "expires_at": "2026-11-04T17:00:00.000Z",
494 "redeemed_at": null,
495 "revoked_at": null,
496 "invitee": null,
497 "role": null
498 },
499 "notes": "Sends the same email again, with the same link; when it stops working does not change. Refused with `409` unless it is pending."
500 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person501 "list_workspace_invites": {
502 "response": [
503 {
504 "id": "inv_01kp2x7m8n9q0r1s2t3v4w5x6y",
505 "code": "g1t-k7m2-q9xd-4hpw-…",
506 "hint": "g1t-k7m2",
507 "email": "ada@example.com",
508 "kind": "account",
509 "workspace": "acme-labs",
510 "status": "pending",
Anyone on g1t can invite a friend again: Invite a friend, in the account menu with how many are left beside it, opens Settings → Invites to g1t with a dialog for their email address and a note. The friend gets an email from them whose link opens sign-up with the address filled in and, because it came from that email, confirmed; their account starts with a workspace of its own, and the page lists every invite sent with where it stands (Pending, confirming their email, Joined as @them), with Copy link, Send again and Revoke on each. It is word of mouth, never a gate: sign-ups stay open to everyone, nothing asks for an invite, and running out says friends can still sign up without one.511 "charged_to": "none",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person512 "invited_by": "syntaqx",
513 "redeemed_by": null,
514 "created_at": "2026-10-05T17:00:00.000Z",
515 "expires_at": "2026-11-04T17:00:00.000Z",
516 "redeemed_at": null,
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)517 "revoked_at": null,
518 "invitee": null,
519 "role": "member"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person520 },
521 {
522 "id": "inv_01kp1z9y8x7w6v5t4s3r2q1p0n",
523 "code": "g1t-k7m2-q9xd-4hpw-…",
524 "hint": "g1t-w2vb",
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)525 "email": null,
Merge Stripe Tax, the card fee on card payments, and one free workspace per person526 "kind": "workspace",
527 "workspace": "acme-labs",
528 "status": "pending",
Anyone on g1t can invite a friend again: Invite a friend, in the account menu with how many are left beside it, opens Settings → Invites to g1t with a dialog for their email address and a note. The friend gets an email from them whose link opens sign-up with the address filled in and, because it came from that email, confirmed; their account starts with a workspace of its own, and the page lists every invite sent with where it stands (Pending, confirming their email, Joined as @them), with Copy link, Send again and Revoke on each. It is word of mouth, never a gate: sign-ups stay open to everyone, nothing asks for an invite, and running out says friends can still sign up without one.529 "charged_to": "none",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person530 "invited_by": "syntaqx",
531 "redeemed_by": null,
532 "created_at": "2026-10-05T17:00:00.000Z",
533 "expires_at": "2026-11-04T17:00:00.000Z",
534 "redeemed_at": null,
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)535 "revoked_at": null,
536 "invitee": "linus",
537 "role": "owner"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person538 }
539 ]
540 },
541 "invite_member": {
542 "request": {
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)543 "username": "ada",
544 "role": "member"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person545 },
546 "response": {
547 "id": "inv_01kp2x7m8n9q0r1s2t3v4w5x6y",
548 "code": "g1t-k7m2-q9xd-4hpw-…",
549 "hint": "g1t-k7m2",
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)550 "email": null,
551 "kind": "workspace",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person552 "workspace": "acme-labs",
553 "status": "pending",
Anyone on g1t can invite a friend again: Invite a friend, in the account menu with how many are left beside it, opens Settings → Invites to g1t with a dialog for their email address and a note. The friend gets an email from them whose link opens sign-up with the address filled in and, because it came from that email, confirmed; their account starts with a workspace of its own, and the page lists every invite sent with where it stands (Pending, confirming their email, Joined as @them), with Copy link, Send again and Revoke on each. It is word of mouth, never a gate: sign-ups stay open to everyone, nothing asks for an invite, and running out says friends can still sign up without one.554 "charged_to": "none",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person555 "invited_by": "syntaqx",
556 "redeemed_by": null,
557 "created_at": "2026-10-05T17:00:00.000Z",
558 "expires_at": "2026-11-04T17:00:00.000Z",
559 "redeemed_at": null,
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)560 "revoked_at": null,
561 "invitee": "ada",
562 "role": "member"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person563 },
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)564 "notes": "Give `username` or `email`. Nobody is added without saying yes: the person gets an invitation to accept or decline, and joins with `role` when they accept. By username, `invitee` names the account and it costs nothing; `404` when there is no account with that username. By email, `kind` is `workspace` when the address already has a g1t account (`charged_to` is then `none`), and `account` when the link makes one; both answers look alike to the caller on purpose, and `invitee` stays null until an account is known. `409` when the person is already a member or already has a pending invitation to the workspace. A free workspace cannot invite anyone: `402` with `payment_required`, until it starts the g1t plan. See [Workspace invitations](/reference/api/invites/list-invitations/) for the other side."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person565 },
566 "revoke_workspace_invite": {
567 "response": {
568 "id": "inv_01kp2x7m8n9q0r1s2t3v4w5x6y",
569 "code": null,
570 "hint": "g1t-k7m2",
571 "email": "ada@example.com",
572 "kind": "account",
573 "workspace": "acme-labs",
574 "status": "revoked",
Anyone on g1t can invite a friend again: Invite a friend, in the account menu with how many are left beside it, opens Settings → Invites to g1t with a dialog for their email address and a note. The friend gets an email from them whose link opens sign-up with the address filled in and, because it came from that email, confirmed; their account starts with a workspace of its own, and the page lists every invite sent with where it stands (Pending, confirming their email, Joined as @them), with Copy link, Send again and Revoke on each. It is word of mouth, never a gate: sign-ups stay open to everyone, nothing asks for an invite, and running out says friends can still sign up without one.575 "charged_to": "none",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person576 "invited_by": "syntaqx",
577 "redeemed_by": null,
578 "created_at": "2026-10-05T17:00:00.000Z",
579 "expires_at": "2026-11-04T17:00:00.000Z",
580 "redeemed_at": null,
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)581 "revoked_at": "2026-10-06T08:00:00.000Z",
582 "invitee": null,
583 "role": "member"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person584 }
585 },
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)586 "list_invitations": {
587 "response": [
588 {
589 "id": "inv_01kp2x7m8n9q0r1s2t3v4w5x6y",
590 "workspace": {
591 "slug": "acme-labs",
592 "name": "Acme Labs",
593 "avatar": null
594 },
595 "role": "member",
596 "invited_by": {
597 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar598 "display_username": "syntaqx",
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)599 "name": "Chase",
600 "avatar": null
601 },
602 "created_at": "2026-10-05T17:00:00.000Z",
603 "expires_at": "2026-11-04T17:00:00.000Z"
604 }
605 ],
606 "notes": "Accept one with `POST /user/invitations/{id}/accept`, or decline it with `POST /user/invitations/{id}/decline`. An agent's or a workspace's token gets an empty list."
607 },
608 "accept_invitation": {
609 "params": {
610 "id": "inv_01kp2x7m8n9q0r1s2t3v4w5x6y"
611 },
612 "response": {
613 "workspace": "acme-labs"
614 },
615 "notes": "You join at once with the invitation's `role`. `404` when you have no open invitation with that id (it may have been answered, revoked or expired). `403` until you confirm your email address, and when your account does not meet what the workspace asks of its members, such as two-factor authentication, with a message that says what to turn on. `402` with `payment_required` while the workspace is on the free plan; the invitation stays open until it starts the g1t plan. Recorded as `member.added`."
616 },
617 "decline_invitation": {
618 "params": {
619 "id": "inv_01kp2x7m8n9q0r1s2t3v4w5x6y"
620 },
621 "response": true,
622 "notes": "Whoever sent it is told in their inbox. The workspace's owners can invite you again. `404` when you have no open invitation with that id."
623 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person624 "list_repos": {
625 "query": {
626 "q": "hello"
627 },
628 "response": [
629 {
630 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
631 "namespace": "flagon-io",
632 "name": "hello",
633 "description": "A tiny service that says hello.",
634 "is_private": false,
635 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
636 "default_branch": "main",
637 "fork_of": null,
638 "protected": true,
639 "created_at": "2026-09-28T14:11:52.640Z",
640 "website": "https://hello.g1t.page",
641 "archived_at": null
642 }
643 ],
644 "notes": "Returns at most 50 repositories, newest first. Forks made for pull requests are left out."
645 },
646 "create_repo": {
647 "request": {
648 "workspace": "flagon-io",
649 "name": "hello-cli",
650 "description": "Command-line client for hello.",
651 "private": false
652 },
653 "response": {
654 "id": "rep_01m43tk1jhehztx23drs87f5fc",
655 "namespace": "flagon-io",
656 "name": "hello-cli",
657 "description": "Command-line client for hello.",
658 "is_private": false,
659 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
660 "default_branch": "main",
661 "fork_of": null,
662 "protected": false,
663 "created_at": "2026-10-04T16:05:12.913Z",
664 "website": "https://hello.g1t.page",
665 "archived_at": null
666 },
667 "notes": "`owner_id` is the id of the person who created the repository. With `import_url`, `default_branch` is the default branch of the repository copied."
668 },
669 "get_repo": {
670 "response": {
671 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
672 "namespace": "flagon-io",
673 "name": "hello",
674 "description": "A tiny service that says hello.",
675 "is_private": false,
676 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
677 "default_branch": "main",
678 "fork_of": null,
679 "protected": true,
680 "created_at": "2026-09-28T14:11:52.640Z",
681 "website": "https://hello.g1t.page",
682 "archived_at": null
683 }
684 },
685 "update_repo": {
686 "request": {
687 "description": "Says hello, politely.",
688 "website": "hello.g1t.page",
689 "default_branch": "trunk",
690 "protected": true
691 },
692 "response": {
693 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
694 "namespace": "flagon-io",
695 "name": "hello",
696 "description": "Says hello, politely.",
697 "is_private": false,
698 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
699 "default_branch": "trunk",
700 "fork_of": null,
701 "protected": true,
702 "created_at": "2026-09-28T14:11:52.640Z",
703 "topics": [
704 "http",
705 "example"
706 ],
707 "website": "https://hello.g1t.page",
708 "archived_at": null
709 },
710 "notes": "Only the fields given change. `website` gets `https://` when no scheme is given; an empty string clears it. `default_branch` must name a branch that exists (`422` otherwise); it is changed after the other fields. `description`, `website`, `topics` and `protected` need the Maintain role or higher, and `private` and `default_branch` the Admin role (`403` otherwise, saying which role). Changing `private` here needs no confirmation; `POST /repos/{owner}/{name}/visibility` asks for one. Making it private is refused with `402` when a free workspace's private storage has no room for it. See [Managing a repository](/guides/managing-repositories/) and [Access and roles](/guides/access-and-roles/)."
711 },
712 "transfer_repo": {
713 "request": {
714 "to": "flagon-io"
715 },
716 "response": {
717 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
718 "namespace": "flagon-io",
719 "name": "hello",
720 "description": "A tiny service that says hello.",
721 "is_private": false,
722 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
723 "default_branch": "main",
724 "fork_of": null,
725 "protected": true,
726 "created_at": "2026-09-28T14:11:52.640Z",
727 "website": "https://hello.g1t.page",
728 "archived_at": null
729 },
730 "notes": "The repository at its new address. Refused with `409` when the destination already has a repository of that name, `403` unless you own both workspaces, and `402` when a free destination has no room for a private repository. The old address redirects. See [Transferring a repository](/guides/transferring-repositories/)."
731 },
732 "rename_repo": {
733 "request": {
734 "name": "greeter"
735 },
736 "response": {
737 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
738 "namespace": "flagon-io",
739 "name": "greeter",
740 "description": "A tiny service that says hello.",
741 "is_private": false,
742 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
743 "default_branch": "main",
744 "fork_of": null,
745 "protected": true,
746 "created_at": "2026-09-28T14:11:52.640Z",
747 "topics": [
748 "http",
749 "example"
750 ],
751 "website": "https://hello.g1t.page",
752 "archived_at": null
753 },
754 "notes": "The repository under its new name. Needs the Admin role (`403` otherwise). Refused with `409` when the workspace already has a repository of that name, a recently deleted one included, and with `422` when the name is not valid. The old address redirects. See [Rename a repository](/guides/managing-repositories/#rename-a-repository)."
755 },
756 "rename_branch": {
757 "params": {
758 "owner": "flagon-io",
759 "name": "hello",
760 "branch": "feature/login"
761 },
762 "request": {
763 "new_name": "feature/sign-in"
764 },
765 "response": {
766 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
767 "namespace": "flagon-io",
768 "name": "hello",
769 "description": "A tiny service that says hello.",
770 "is_private": false,
771 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
772 "default_branch": "main",
773 "fork_of": null,
774 "protected": true,
775 "created_at": "2026-09-28T14:11:52.640Z",
776 "topics": [
777 "http",
778 "example"
779 ],
780 "website": "https://hello.g1t.page",
781 "archived_at": null
782 },
783 "notes": "The repository after the rename; renaming the default branch changes `default_branch`. Send a branch name with slashes URL-encoded, as one path segment. Refused with `404` when there is no such branch, `409` when a branch named `new_name` exists, `422` when `new_name` is not a valid branch name, and `403` without the Write role, or without the Admin role for the default branch. See [Rename a branch](/guides/managing-repositories/#rename-a-branch)."
784 },
The Branches page does things to branches now. It has tabs (Overview, Yours, Active, Stale, All, kept in the address as ?tab=) and search; Overview shows the default branch, then the first five of your branches, the active ones and the stale ones, each linking to the rest. Each branch is a row with its name in a code chip with a copy button, who made its latest commit and when, that commit's checks, behind and ahead counts with bars drawn against the largest shown, and its pull request (the open one, else the newest merged or closed) with its state; on a phone the columns fold under the name. Yours is branches whose latest commit is the viewer's; stale is no commit in 90 days.785 "create_branch": {
786 "request": {
787 "name": "feature/login",
788 "from": "main"
789 },
790 "response": {
791 "name": "feature/login",
792 "hash": "9f2c4e1b7a3d5c6e8f0a1b2c3d4e5f6a7b8c9d0e"
793 },
794 "notes": "The new branch and the commit it points to. `from` is a branch, a tag or a commit, the default branch when left out; to restore a deleted branch, send the `hash` that deleting it answered with. Refused with `404` when `from` names nothing, `409` when the name is taken or is a folder of another branch's name (or holds one), `422` when it is not a valid branch name, and `403` without the Write role or when the repository's rules refuse it. See [Branches](/guides/git/#branches)."
795 },
796 "delete_branch": {
797 "params": {
798 "owner": "flagon-io",
799 "name": "hello",
800 "branch": "feature/login"
801 },
802 "response": {
803 "name": "feature/login",
804 "hash": "9f2c4e1b7a3d5c6e8f0a1b2c3d4e5f6a7b8c9d0e"
805 },
806 "notes": "The branch as it was. Its commits stay in the repository: `POST /repos/{owner}/{name}/branches` with this `hash` as `from` restores it. Add `?head=<sha>` to leave it alone (`409`) if it has moved from the commit you saw. Refused with `403` for the default branch, without the Write role, or when the repository's rules refuse it, and `404` when there is no such branch. Send a branch name with slashes URL-encoded, as one path segment. See [Branches](/guides/git/#branches)."
807 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person808 "set_repo_visibility": {
809 "request": {
810 "private": true,
811 "confirm": "flagon-io/hello"
812 },
813 "response": {
814 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
815 "namespace": "flagon-io",
816 "name": "hello",
817 "description": "A tiny service that says hello.",
818 "is_private": true,
819 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
820 "default_branch": "main",
821 "fork_of": null,
822 "protected": true,
823 "created_at": "2026-09-28T14:11:52.640Z",
824 "topics": [
825 "http",
826 "example"
827 ],
828 "website": "https://hello.g1t.page",
829 "archived_at": null
830 },
831 "notes": "Needs the Admin role (`403` otherwise). Refused with `422` when `confirm` is not the repository's full name, and with `402` when a free workspace's private storage has no room for it. See [Change who can see a repository](/guides/managing-repositories/#change-who-can-see-a-repository)."
832 },
833 "archive_repo": {
834 "response": {
835 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
836 "namespace": "flagon-io",
837 "name": "hello",
838 "description": "A tiny service that says hello.",
839 "is_private": false,
840 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
841 "default_branch": "main",
842 "fork_of": null,
843 "protected": true,
844 "created_at": "2026-09-28T14:11:52.640Z",
845 "topics": [
846 "http",
847 "example"
848 ],
849 "website": "https://hello.g1t.page",
850 "archived_at": "2026-10-05T09:30:00.000Z"
851 },
852 "notes": "The repository, with `archived_at` set. Needs the Admin role (`403` otherwise). See [Archive a repository](/guides/managing-repositories/#archive-a-repository)."
853 },
854 "unarchive_repo": {
855 "response": {
856 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
857 "namespace": "flagon-io",
858 "name": "hello",
859 "description": "A tiny service that says hello.",
860 "is_private": false,
861 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
862 "default_branch": "main",
863 "fork_of": null,
864 "protected": true,
865 "created_at": "2026-09-28T14:11:52.640Z",
866 "topics": [
867 "http",
868 "example"
869 ],
870 "website": "https://hello.g1t.page",
871 "archived_at": null
872 },
873 "notes": "The repository, with `archived_at` null. Needs the Admin role (`403` otherwise)."
874 },
875 "delete_repo": {
876 "request": {
877 "confirm": "flagon-io/hello"
878 },
879 "response": {
880 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
881 "namespace": "flagon-io",
882 "name": "hello",
883 "description": "A tiny service that says hello.",
884 "is_private": false,
885 "deleted_at": "2026-10-05T09:30:00.000Z",
886 "deleted_by": "syntaqx",
887 "purge_after": "2026-11-04T09:30:00.000Z"
888 },
889 "notes": "The deleted repository and when it will be purged, 30 days on. Owners of the workspace only (`403`), whatever their role on the repository. Refused with `422` when `confirm` is not its full name. Its name stays taken until it is purged. See [Delete a repository](/guides/managing-repositories/#delete-a-repository)."
890 },
891 "list_deleted_repos": {
892 "params": {
893 "workspace": "flagon-io"
894 },
895 "response": [
896 {
897 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
898 "namespace": "flagon-io",
899 "name": "hello",
900 "description": "A tiny service that says hello.",
901 "is_private": false,
902 "deleted_at": "2026-10-05T09:30:00.000Z",
903 "deleted_by": "syntaqx",
904 "purge_after": "2026-11-04T09:30:00.000Z"
905 }
906 ],
907 "notes": "Newest first. Empty for anyone who is not an owner of the workspace."
908 },
909 "restore_repo": {
910 "response": {
911 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
912 "namespace": "flagon-io",
913 "name": "hello",
914 "description": "A tiny service that says hello.",
915 "is_private": false,
916 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
917 "default_branch": "main",
918 "fork_of": null,
919 "protected": true,
920 "created_at": "2026-09-28T14:11:52.640Z",
921 "topics": [
922 "http",
923 "example"
924 ],
925 "website": "https://hello.g1t.page",
926 "archived_at": null
927 },
928 "notes": "The repository, back at its address. Name it by the path it had. Owners only (`403`); `404` when no deleted repository had that path, or it has been purged. See [Restore a repository](/guides/managing-repositories/#restore-a-repository)."
929 },
930 "purge_repo": {
931 "request": {
932 "confirm": "flagon-io/hello"
933 },
934 "response": true,
935 "notes": "Permanent: it cannot be restored afterwards, and its name is free again. Only a deleted repository can be purged (`404` otherwise). Owners only (`403`); `422` when `confirm` is not its full name."
936 },
937 "get_repo_settings": {
938 "response": {
939 "auto_merge": false,
940 "required_checks": [
941 "CI"
942 ],
943 "require_up_to_date": false,
944 "required_approvals": 0,
945 "count_agent_approvals": true,
946 "allow_ignoring_checks": true,
947 "merge_queue": false,
948 "require_code_owner_review": false,
949 "updated_by": null,
950 "updated_at": null
951 }
952 },
953 "update_repo_settings": {
954 "request": {
955 "required_checks": [
956 "CI",
957 "g1t / deploy"
958 ],
959 "required_approvals": 1,
960 "count_agent_approvals": false,
961 "merge_queue": true,
962 "require_code_owner_review": true
963 },
964 "response": {
965 "auto_merge": false,
966 "required_checks": [
967 "CI",
968 "g1t / deploy"
969 ],
970 "require_up_to_date": false,
971 "required_approvals": 1,
972 "count_agent_approvals": false,
973 "allow_ignoring_checks": true,
974 "merge_queue": true,
975 "require_code_owner_review": true,
976 "updated_by": "syntaqx",
977 "updated_at": "2026-10-04T16:20:37.508Z"
978 },
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.979 "notes": "`required_checks` replaces the whole list: at most 20 names, each a workflow's name or another status's context, as [`list_check_names`](/reference/api/repositories/list-check-names/) gives them. A pull request merges only once each passes on its head; one nothing has reported holds it too. With the merge queue on, each must also pass on the queued state, so the workflows behind them need `merge_group` in their `on:`. `required_approvals` is at most 6. See [what a repository can ask for](/guides/working-with-g1t/#what-a-repository-can-ask-for). With `require_code_owner_review`, a pull request into the default branch merges only once the code owners of every file it changes have approved it, as many as each section of its CODEOWNERS file asks: see [Code owners](/guides/codeowners/)."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person980 },
981 "list_check_names": {
982 "response": [
983 {
984 "name": "CI",
985 "events": [
986 "pull_request",
987 "merge_group",
988 "push"
989 ],
990 "last_seen": "2026-10-06T09:14:02.118Z"
991 },
992 {
993 "name": "g1t / deploy",
994 "events": [],
995 "last_seen": "2026-10-06T08:51:40.006Z"
996 }
997 ],
998 "notes": "The names reported on the repository's commits in the last 30 days, most recent first. A workflow reports a check named after it (`CI`), for each event it ran for; another tool, such as a deployment, reports its own name (`g1t / deploy`). Empty until something has reported on a commit: add a workflow in `.g1t/workflows` first."
999 },
1000 "get_codeowners_errors": {
1001 "params": {
1002 "owner": "flagon-io",
1003 "name": "hello"
1004 },
1005 "query": {
1006 "ref": "main"
1007 },
1008 "response": {
1009 "path": ".github/CODEOWNERS",
1010 "ref": "main",
1011 "size": 412,
1012 "rules": 9,
1013 "sections": [
1014 "Docs"
1015 ],
1016 "errors": [
1017 {
1018 "line": 4,
1019 "kind": "unknown_team",
1020 "token": "@flagon-io/platform",
1021 "message": "@flagon-io/platform is not a team of flagon-io."
1022 },
1023 {
1024 "line": 7,
1025 "kind": "negation",
1026 "token": "!docs/internal/",
1027 "message": "!docs/internal/ starts with !, and negation is not supported; this line is skipped. Give the path a later rule with no owners instead."
1028 }
1029 ]
1030 },
1031 "notes": "The file is the first of `.g1t/CODEOWNERS`, `.github/CODEOWNERS`, `CODEOWNERS`, `docs/CODEOWNERS` and `.gitlab/CODEOWNERS` found on `ref` (the default branch when left out); `path` is null when there is none, with no errors. Each error has its `line` (0 for the file as a whole), the `token` at fault, a `message`, and a `kind`:\n\n| `kind` | |\n| --- | --- |\n| `too_large` | The file is over 3 MB and was ignored. |\n| `negation` | A pattern starting with `!`; the line was skipped. |\n| `character_range` | A pattern with `[` or `]`; the line was skipped. |\n| `bad_pattern` | A pattern that names no path; the line was skipped. |\n| `bad_owner` | An owner that is not `@user`, `@workspace/team` or an email address. |\n| `bad_section` | A section header that could not be read. |\n| `unknown_user` | No account has that username. |\n| `unknown_team` | The workspace has no team of that slug. |\n| `unknown_email` | No account has confirmed that address. |\n| `no_write_access` | The person cannot write to the repository. |\n| `team_no_access` | The team has no write access to the repository. |\n\nSee [Code owners](/guides/codeowners/)."
1032 },
1033 "list_events": {
1034 "query": {
1035 "before": "evt_01m43t2a6c9e3g7j1m5q9t3x7b"
1036 },
1037 "response": [
1038 {
1039 "id": "evt_01m43smh3ve52vkcna207vqctf",
1040 "type": "pull.opened",
1041 "source": "work",
1042 "time": "2026-10-01T18:20:02.117Z",
1043 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1044 "actor": "usr_01kkntcg1eeb98j62xjm7eh09p",
1045 "data": {
1046 "pull_id": "pr_01m43smh3vexsr5pmp60qwv0vs",
1047 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1048 "number": 14,
1049 "issue": 12,
1050 "agent": "claude-code"
1051 }
1052 },
1053 {
1054 "id": "evt_01m43shrzpf2vt5rxbb02z0xjt",
1055 "type": "issue.opened",
1056 "source": "work",
1057 "time": "2026-10-01T18:04:11.482Z",
1058 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1059 "actor": "usr_01kkntcg1eeb98j62xjm7eh09p",
1060 "data": {
1061 "issue_id": "iss_01m43shrzpfe49x74ga7sj1c6v",
1062 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1063 "number": 12,
1064 "title": "Greeting should name the caller"
1065 }
1066 }
1067 ],
Merge branch 'worktree-agent-ad531323a21f4c975'1068 "notes": "Returns 50 events a page, newest first. To page back, send the `id` of the last event you have as `before`. `actor` is a user id, and `data` depends on `type`.\n\nTo follow a repository without a webhook, send `after` instead: the events written after that event come oldest first, and the last one's `id` is your next `after`. Add `wait` (seconds, at most 25) and a call that finds nothing holds on until a matching event is written or the time is up, then returns what it has, which may be an empty list; call again with the same `after`. Events come in the order g1t wrote them, so none is skipped when two arrive close together.\n\n```sh\ncurl -H \"Authorization: Bearer $G1T_TOKEN\" \\\n \"https://api.g1t.sh/repos/acme/rocket/events?after=evt_01m43smh3ve52vkcna207vqctf&types=work.claimed,integration.failed&numbers=12&wait=25\"\n```\n\n`types` and `numbers` are comma-separated lists in a query string, arrays in a body or an MCP call. `numbers` matches events about those issues and pull requests (`data.number`) and comments, reviews and links on them (`data.issue`). `since` is an RFC 3339 time. `after` and `before` cannot be given together."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1069 },
1070 "list_issues": {
1071 "query": {
1072 "state": "open",
1073 "label": "feature"
1074 },
1075 "response": [
1076 {
1077 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
1078 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1079 "number": 12,
1080 "title": "Greeting should name the caller",
1081 "body": "Take a name from the first argument; fall back to world.",
1082 "labels": [
1083 "feature"
1084 ],
1085 "state": "open",
1086 "reason": null,
1087 "resolved_by": null,
1088 "author": {
1089 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1090 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1091 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1092 "kind": "user",
1093 "verified": false,
1094 "workspaces": []
1095 },
1096 "requested_by": null,
1097 "created_at": "2026-10-01T18:04:11.482Z",
1098 "updated_at": "2026-10-01T18:04:11.482Z",
1099 "closed_at": null,
1100 "pull_count": 1,
1101 "comment_count": 0,
1102 "assignees": [],
1103 "blocked_by": [],
1104 "queued": false,
1105 "agent": "claude-code",
1106 "milestone": null
1107 }
1108 ],
1109 "notes": "Returns at most 100 issues, newest first. `comment_count` counts comments, not events such as \"opened #14 for this\"."
1110 },
1111 "create_issue": {
1112 "request": {
1113 "title": "Greeting should name the caller",
1114 "body": "Take a name from the first argument; fall back to world.",
1115 "labels": [
1116 "feature"
1117 ]
1118 },
1119 "response": {
1120 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
1121 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1122 "number": 12,
1123 "title": "Greeting should name the caller",
1124 "body": "Take a name from the first argument; fall back to world.",
1125 "labels": [
1126 "feature"
1127 ],
1128 "state": "open",
1129 "reason": null,
1130 "resolved_by": null,
1131 "author": {
1132 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1133 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1134 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1135 "kind": "user",
1136 "verified": false,
1137 "workspaces": []
1138 },
1139 "requested_by": null,
1140 "created_at": "2026-10-01T18:04:11.482Z",
1141 "updated_at": "2026-10-01T18:04:11.482Z",
1142 "closed_at": null,
1143 "pull_count": 0,
1144 "comment_count": 0,
1145 "assignees": [],
1146 "blocked_by": [],
1147 "queued": false,
1148 "agent": null,
1149 "milestone": null
1150 },
1151 "notes": "Labels are lowercased. A label not used before is created."
1152 },
1153 "get_issue": {
1154 "response": {
1155 "issue": {
1156 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
1157 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1158 "number": 12,
1159 "title": "Greeting should name the caller",
1160 "body": "Take a name from the first argument; fall back to world.",
1161 "labels": [
1162 "feature"
1163 ],
1164 "state": "closed",
1165 "reason": "completed",
1166 "resolved_by": 14,
1167 "author": {
1168 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1169 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1170 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1171 "kind": "user",
1172 "verified": false,
1173 "workspaces": []
1174 },
1175 "requested_by": null,
1176 "created_at": "2026-10-01T18:04:11.482Z",
1177 "updated_at": "2026-10-01T18:52:17.093Z",
1178 "closed_at": "2026-10-01T18:52:17.093Z",
1179 "pull_count": 2,
1180 "comment_count": 0,
1181 "assignees": [],
1182 "blocked_by": [],
1183 "queued": false,
1184 "agent": null,
1185 "milestone": null
1186 },
1187 "pulls": [
1188 {
1189 "id": "pr_01m43sjq8tcz5rbm2a7k4d9e6w",
1190 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1191 "number": 13,
1192 "issue": 12,
1193 "title": "Greeting should name the caller",
1194 "body": null,
1195 "agent": "claude-code",
1196 "runtime": "external",
1197 "status": "closed",
1198 "fork": {
1199 "namespace": "pulls",
1200 "name": "pr_01m43sjq8tcz5rbm2a7k4d9e6w"
1201 },
1202 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
1203 "branch": null,
1204 "head_commit": null,
1205 "merge_base": null,
1206 "merged_by": null,
1207 "merged_at": null,
1208 "superseded_by": 14,
1209 "check_status": null,
1210 "files": [],
1211 "assignees": [],
1212 "reviewers": [],
1213 "labels": [],
1214 "milestone": null,
1215 "base": "main",
1216 "author": {
1217 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1218 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1219 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1220 "kind": "user",
1221 "verified": false,
1222 "workspaces": []
1223 },
1224 "requested_by": null,
1225 "created_at": "2026-10-01T18:20:02.117Z",
1226 "updated_at": "2026-10-01T18:20:02.117Z"
1227 },
1228 {
1229 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
1230 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1231 "number": 14,
1232 "issue": 12,
1233 "title": "Greeting should name the caller",
1234 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
1235 "agent": "claude-code",
1236 "runtime": "external",
1237 "status": "merged",
1238 "fork": {
1239 "namespace": "pulls",
1240 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
1241 },
1242 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
1243 "branch": null,
1244 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1245 "merge_base": "3a7e9c1b5d2f4a6c8e0b2d4f6a8c0e2b4d6f8a1c",
1246 "merged_by": "syntaqx",
1247 "merged_at": "2026-10-01T18:52:17.093Z",
1248 "superseded_by": null,
1249 "check_status": "passed",
1250 "files": [
1251 {
1252 "path": "src/main.rs",
1253 "additions": 6,
1254 "deletions": 2
1255 }
1256 ],
1257 "assignees": [],
1258 "reviewers": [
1259 "ana"
1260 ],
1261 "labels": [],
1262 "milestone": null,
1263 "base": "main",
1264 "author": {
1265 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1266 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1267 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1268 "kind": "user",
1269 "verified": false,
1270 "workspaces": []
1271 },
1272 "requested_by": null,
1273 "created_at": "2026-10-01T18:20:02.117Z",
1274 "updated_at": "2026-10-01T18:52:17.093Z"
1275 }
1276 ],
1277 "comments": [
1278 {
1279 "id": "cmt_01m43sr2b7d5f0j6k3n8p1q4v9",
1280 "kind": "event",
1281 "author": {
1282 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1283 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1284 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1285 "kind": "user",
1286 "verified": false,
1287 "workspaces": []
1288 },
1289 "body": "opened #14 for this",
1290 "path": null,
1291 "line": null,
1292 "verdict": null,
1293 "created_at": "2026-10-01T18:20:02.141Z"
1294 }
1295 ]
1296 },
1297 "notes": "A closed issue says how it was closed: `reason` is `completed` or `not_planned`, and `resolved_by` is the number of the pull request whose merge closed it. Each pull request made for it is listed; one closed because another was merged has `superseded_by` set."
1298 },
1299 "update_issue": {
1300 "request": {
1301 "labels": [
1302 "feature",
1303 "good first issue"
1304 ],
1305 "assignees": [
1306 "syntaqx"
1307 ],
Merge branch 'worktree-agent-a6ec0a89d7fe7a9ae'1308 "milestone": 3,
1309 "blocked_by": [9]
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1310 },
1311 "response": {
1312 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
1313 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1314 "number": 12,
1315 "title": "Greeting should name the caller",
1316 "body": "Take a name from the first argument; fall back to world.",
1317 "labels": [
1318 "feature",
1319 "good first issue"
1320 ],
1321 "state": "open",
1322 "reason": null,
1323 "resolved_by": null,
1324 "author": {
1325 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1326 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1327 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1328 "kind": "user",
1329 "verified": false,
1330 "workspaces": []
1331 },
1332 "requested_by": null,
1333 "created_at": "2026-10-01T18:04:11.482Z",
1334 "updated_at": "2026-10-01T18:09:47.305Z",
1335 "closed_at": null,
1336 "pull_count": 0,
1337 "comment_count": 0,
1338 "assignees": [
1339 "syntaqx"
1340 ],
Merge branch 'worktree-agent-a6ec0a89d7fe7a9ae'1341 "blocked_by": [9],
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1342 "queued": false,
1343 "agent": null,
1344 "milestone": {
1345 "number": 3,
1346 "title": "Launch"
1347 }
1348 }
1349 },
1350 "close_issue": {
1351 "request": {
1352 "reason": "not_planned"
1353 },
1354 "response": {
1355 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
1356 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1357 "number": 12,
1358 "title": "Greeting should name the caller",
1359 "body": "Take a name from the first argument; fall back to world.",
1360 "labels": [
1361 "feature"
1362 ],
1363 "state": "closed",
1364 "reason": "not_planned",
1365 "resolved_by": null,
1366 "author": {
1367 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1368 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1369 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1370 "kind": "user",
1371 "verified": false,
1372 "workspaces": []
1373 },
1374 "requested_by": null,
1375 "created_at": "2026-10-01T18:04:11.482Z",
1376 "updated_at": "2026-10-01T19:30:00.214Z",
1377 "closed_at": "2026-10-01T19:30:00.214Z",
1378 "pull_count": 0,
1379 "comment_count": 0,
1380 "assignees": [],
1381 "blocked_by": [],
1382 "queued": false,
1383 "agent": null,
1384 "milestone": null
1385 }
1386 },
1387 "reopen_issue": {
1388 "response": {
1389 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
1390 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1391 "number": 12,
1392 "title": "Greeting should name the caller",
1393 "body": "Take a name from the first argument; fall back to world.",
1394 "labels": [
1395 "feature"
1396 ],
1397 "state": "open",
1398 "reason": null,
1399 "resolved_by": null,
1400 "author": {
1401 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1402 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1403 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1404 "kind": "user",
1405 "verified": false,
1406 "workspaces": []
1407 },
1408 "requested_by": null,
1409 "created_at": "2026-10-01T18:04:11.482Z",
1410 "updated_at": "2026-10-01T19:41:52.830Z",
1411 "closed_at": null,
1412 "pull_count": 0,
1413 "comment_count": 0,
1414 "assignees": [],
1415 "blocked_by": [],
1416 "queued": false,
1417 "agent": null,
1418 "milestone": null
1419 }
1420 },
1421 "add_comment": {
1422 "request": {
1423 "body": "Should an empty name fall back to \"world\"?"
1424 },
1425 "response": {
1426 "id": "cmt_01m43sv4c8e2g6j0m4q8t2x6a1",
1427 "kind": "comment",
1428 "author": {
1429 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1430 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1431 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1432 "kind": "user",
1433 "verified": true,
1434 "workspaces": [
1435 {
1436 "slug": "flagon-io",
1437 "role": "owner"
1438 }
1439 ]
1440 },
1441 "body": "Should an empty name fall back to \"world\"?",
1442 "path": null,
1443 "line": null,
1444 "verdict": null,
1445 "created_at": "2026-10-01T18:12:30.551Z"
1446 }
1447 },
Merge Actions: cross-repo workflows and actions, release and deployment triggers, step timeouts1448 "edit_comment": {
1449 "params": {
1450 "comment_id": "cmt_01m43sv4c8e2g6j0m4q8t2x6a1"
1451 },
1452 "request": {
1453 "body": "Should an empty name fall back to \"world\", or print the usage?"
1454 },
1455 "response": {
1456 "id": "cmt_01m43sv4c8e2g6j0m4q8t2x6a1",
1457 "kind": "comment",
1458 "author": {
1459 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1460 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1461 "display_username": "syntaqx",
Merge Actions: cross-repo workflows and actions, release and deployment triggers, step timeouts1462 "kind": "user",
1463 "verified": true,
1464 "workspaces": [
1465 {
1466 "slug": "flagon-io",
1467 "role": "owner"
1468 }
1469 ]
1470 },
1471 "body": "Should an empty name fall back to \"world\", or print the usage?",
1472 "path": null,
1473 "line": null,
1474 "verdict": null,
1475 "created_at": "2026-10-01T18:12:30.551Z",
1476 "edited_at": "2026-10-01T18:30:04.210Z"
1477 },
1478 "notes": "Its author, or someone with the Maintain role or higher. A note of something that happened answers `409`."
1479 },
1480 "delete_comment": {
1481 "params": {
1482 "comment_id": "cmt_01m43sv4c8e2g6j0m4q8t2x6a1"
1483 },
1484 "notes": "Answers `204` with no body. Its author, or someone with the Maintain role or higher. A review that approved or requested changes answers `409`: edit it instead."
1485 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1486 "list_labels": {
1487 "response": [
1488 {
1489 "name": "bug",
1490 "color": "d73a4a",
1491 "description": "Something isn't working",
1492 "issues": 4,
1493 "pulls": 1
1494 },
1495 {
1496 "name": "dependencies",
1497 "color": "0366d6",
1498 "description": "Updates a dependency",
1499 "issues": 0,
1500 "pulls": 6
1501 },
1502 {
1503 "name": "good first issue",
1504 "color": "7057ff",
1505 "description": "Good for newcomers",
1506 "issues": 2,
1507 "pulls": 0
1508 }
1509 ],
1510 "notes": "By name. A new repository starts with the default labels; add_default_labels adds those an older one is missing."
1511 },
1512 "list_pull_requests": {
1513 "query": {
1514 "state": "open"
1515 },
1516 "response": [
1517 {
1518 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
1519 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1520 "number": 14,
1521 "issue": 12,
1522 "title": "Greeting should name the caller",
1523 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
1524 "agent": "claude-code",
1525 "runtime": "external",
1526 "status": "open",
1527 "fork": {
1528 "namespace": "pulls",
1529 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
1530 },
1531 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
1532 "branch": null,
1533 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1534 "merge_base": null,
1535 "merged_by": null,
1536 "merged_at": null,
1537 "superseded_by": null,
1538 "check_status": "passed",
1539 "files": [
1540 {
1541 "path": "src/main.rs",
1542 "additions": 6,
1543 "deletions": 2
1544 }
1545 ],
1546 "assignees": [],
1547 "reviewers": [
1548 "ana"
1549 ],
1550 "team_reviewers": [],
1551 "author": {
1552 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1553 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1554 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1555 "kind": "user",
1556 "verified": false,
1557 "workspaces": []
1558 },
1559 "requested_by": null,
1560 "created_at": "2026-10-01T18:20:02.117Z",
1561 "updated_at": "2026-10-01T18:35:44.902Z",
1562 "labels": [],
1563 "milestone": null,
1564 "base": "main"
1565 }
1566 ],
1567 "notes": "Returns at most 100 pull requests, newest first. `check_status` is `queued`, `running`, `passed`, `failed`, `errored`, or `null` when no checks have run against the head."
1568 },
1569 "create_pull_request": {
1570 "request": {
1571 "issue": 12,
1572 "agent": "claude-code"
1573 },
1574 "response": {
1575 "pull": {
1576 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
1577 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1578 "number": 14,
1579 "issue": 12,
1580 "title": "Greeting should name the caller",
1581 "body": null,
1582 "agent": "claude-code",
1583 "runtime": "external",
1584 "status": "draft",
1585 "fork": {
1586 "namespace": "pulls",
1587 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
1588 },
1589 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
1590 "branch": null,
1591 "head_commit": null,
1592 "merge_base": null,
1593 "merged_by": null,
1594 "merged_at": null,
1595 "superseded_by": null,
1596 "check_status": null,
1597 "files": [],
1598 "assignees": [],
1599 "reviewers": [],
1600 "labels": [],
1601 "milestone": null,
1602 "base": "main",
1603 "author": {
1604 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1605 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1606 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1607 "kind": "user",
1608 "verified": false,
1609 "workspaces": []
1610 },
1611 "requested_by": null,
1612 "created_at": "2026-10-01T18:20:02.117Z",
1613 "updated_at": "2026-10-01T18:20:02.117Z"
1614 },
1615 "git": {
1616 "remote": "https://g1t.sh/pulls/pr_01m43smh3vexsr5pmp60qwv0vs.git",
1617 "username": "syntaqx",
1618 "password": "your g1t access token"
1619 }
1620 },
1621 "notes": "`title` defaults to the issue's title, and is required when there is no `issue`. Push to `git.remote` with your username and an access token as the password.\n\nSend `branch` to open the pull request from a branch already pushed to the repository. No fork is made, `fork` is `null`, `git.remote` is the repository itself, and the pull request is `open` at once."
1622 },
1623 "get_pull_request": {
1624 "response": {
1625 "pull": {
1626 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
1627 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1628 "number": 14,
1629 "issue": 12,
1630 "title": "Greeting should name the caller",
1631 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
1632 "agent": "claude-code",
1633 "runtime": "external",
1634 "status": "open",
1635 "fork": {
1636 "namespace": "pulls",
1637 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
1638 },
1639 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
1640 "branch": null,
1641 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1642 "merge_base": null,
1643 "merged_by": null,
1644 "merged_at": null,
1645 "superseded_by": null,
1646 "check_status": "passed",
1647 "files": [
1648 {
1649 "path": "src/main.rs",
1650 "additions": 6,
1651 "deletions": 2
1652 }
1653 ],
1654 "assignees": [],
1655 "reviewers": [
1656 "ana"
1657 ],
1658 "team_reviewers": [
1659 "flagon-io/backend"
1660 ],
1661 "author": {
1662 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1663 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1664 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1665 "kind": "user",
1666 "verified": false,
1667 "workspaces": []
1668 },
1669 "requested_by": null,
1670 "created_at": "2026-10-01T18:20:02.117Z",
1671 "updated_at": "2026-10-01T18:35:44.902Z",
1672 "labels": [],
1673 "milestone": null,
1674 "base": "main"
1675 },
1676 "issue": {
1677 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
1678 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1679 "number": 12,
1680 "title": "Greeting should name the caller",
1681 "body": "Take a name from the first argument; fall back to world.",
1682 "labels": [
1683 "feature"
1684 ],
1685 "state": "open",
1686 "reason": null,
1687 "resolved_by": null,
1688 "author": {
1689 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1690 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1691 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1692 "kind": "user",
1693 "verified": false,
1694 "workspaces": []
1695 },
1696 "requested_by": null,
1697 "created_at": "2026-10-01T18:04:11.482Z",
1698 "updated_at": "2026-10-01T18:20:02.117Z",
1699 "closed_at": null,
1700 "pull_count": 1,
1701 "comment_count": 0,
1702 "assignees": [],
1703 "blocked_by": [],
1704 "queued": false,
1705 "agent": "claude-code",
1706 "milestone": null
1707 },
1708 "comments": [
1709 {
1710 "id": "cmt_01m43st6d0f4h8k2n6r0v4z8c2",
1711 "kind": "event",
1712 "author": {
1713 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1714 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1715 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1716 "kind": "user",
1717 "verified": false,
1718 "workspaces": []
1719 },
1720 "body": "marked this ready for review",
1721 "path": null,
1722 "line": null,
1723 "verdict": null,
1724 "created_at": "2026-10-01T18:33:10.420Z"
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1725 },
1726 {
1727 "id": "cmt_01m43sw2a6c0e4h8k2n6r0v4z8",
1728 "kind": "comment",
1729 "author": {
1730 "id": "agt_01m43q8d2f6h0k4n8r2v6z0c4g",
1731 "username": "margo",
1732 "kind": "agent",
1733 "verified": false,
1734 "workspaces": []
1735 },
1736 "body": "The empty-name case is handled and tested. One nit: trim the name before using it.",
1737 "path": null,
1738 "line": null,
1739 "verdict": "approve",
1740 "created_at": "2026-10-01T18:36:41.207Z",
1741 "agent": {
1742 "id": "agt_01m43q8d2f6h0k4n8r2v6z0c4g",
1743 "handle": "margo",
1744 "display_name": "Margo",
1745 "avatar_seed": "margo"
1746 },
1747 "acting_for": {
1748 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1749 "username": "syntaqx",
1750 "kind": "user",
1751 "verified": false,
1752 "workspaces": []
1753 },
1754 "advisory": true
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1755 }
1756 ],
1757 "checks": null,
1758 "overlaps": [],
1759 "behind": false,
1760 "lifecycle": null,
1761 "landing": false,
1762 "stalled": null,
1763 "statuses": [
1764 {
1765 "context": "CI / pull_request",
1766 "state": "success",
1767 "description": "CI passed",
1768 "target_url": "https://g1t.sh/syntaqx/hello/actions/runs/run_01m43sw8e2g6j0m4q8t2x6a0c4",
1769 "updated_at": "2026-10-01T18:35:44.902Z"
1770 }
1771 ],
1772 "required_checks": [
1773 {
1774 "name": "CI",
1775 "state": "success",
1776 "description": "CI passed",
1777 "target_url": "https://g1t.sh/syntaqx/hello/actions/runs/run_01m43sw8e2g6j0m4q8t2x6a0c4"
1778 }
1779 ],
1780 "code_owners": {
1781 "path": ".github/CODEOWNERS",
1782 "required": true,
1783 "reviews": [
1784 {
1785 "section": null,
1786 "line": 3,
1787 "pattern": "/src/",
1788 "owners": [
1789 "@flagon-io/backend"
1790 ],
1791 "files": [
1792 "src/main.rs"
1793 ],
1794 "optional": false,
1795 "required": 1,
1796 "approved_by": [],
1797 "changes_requested_by": [],
1798 "satisfied": false
1799 }
1800 ],
1801 "missing": "Code owners have not approved: @flagon-io/backend for /src/.",
1802 "errors": 0
1803 }
1804 },
1805 "notes": "| Field | |\n| --- | --- |\n| `pull.files` | The files it changes, with lines added and removed. |\n| `statuses` | Its checks: what each workflow run (or another tool, such as a deployment) reported on its head, as `pending`, `success`, `failure` or `error`, with a link to the run. |\n| `required_checks` | Each check the default branch requires (see [`update_repo_settings`](/reference/api/repositories/update-repo-settings/)), as it stands on the head: `success`, `failure`, `pending`, or `expected` when nothing has reported it yet. It merges only once all are `success`. |\n| `checks` | Set when the merge queue took it out, with why in `error`. Older pull requests may show a run of commands from their issue here, from before checks were workflows. |\n| `overlaps` | Other pull requests in progress that change the same files. |\n| `behind` | Whether the default branch has moved since it was made. |\n| `landing` | Whether it is being brought up to date to land. |\n| `lifecycle` | For a pull request g1t is seeing through: its stage, such as `working`, `checking`, `reviewing` or `needs_you`. |\n| `comments` | Comments, reviews and events, with `path`, `line` and `verdict`. |\n| `messages` | Messages sent to the agent working on it. |\n| `pull.reviewers`, `pull.team_reviewers` | The people asked to review it, `g1t` among them when a g1t agent was, and the teams, as `workspace/team`. Change them with [`request_reviewers`](/reference/api/pull-requests/request-reviewers/). |\n| `code_owners` | Present when the branch it merges into has a CODEOWNERS file: its `path`, whether code owners' approval is `required` there, `reviews` (one per section and rule that owns a changed file: `section`, `line`, `pattern`, `owners`, `files`, `optional`, the approvals `required`, `approved_by`, `changes_requested_by` and `satisfied`), what is still `missing`, as the merge box says it, and how many `errors` the file has; [`get_codeowners_errors`](/reference/api/repositories/get-codeowners-errors/) lists them. |\n| `mergeable` | Whether it merges cleanly into its target: `clean`, `conflicting`, `checking` (being worked out) or `unknown`. Worked out ahead of time whenever it or its target moves. |\n| `conflicts` | When `mergeable` is `conflicting`, the files that conflict. Resolve them by merging the target in, or have g1t do it. |\n| `earlier_checks` | Earlier records like `checks`, newest first. |\n\nChecks are the repository's workflows: they run on `pull_request` events when it is opened, marked ready and pushed to. Read why one failed with [`get_workflow_run`](/reference/api/actions/get-workflow-run/) and [`get_job_logs`](/reference/api/actions/get-job-logs/)."
1806 },
1807 "get_pull_request_changes": {
1808 "response": {
1809 "base": "3a7e9c1b5d2f4a6c8e0b2d4f6a8c0e2b4d6f8a1c",
1810 "head": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1811 "files": [
1812 {
1813 "path": "src/main.rs",
1814 "status": "modified",
1815 "additions": 1,
1816 "deletions": 1,
1817 "binary": false,
1818 "hunks": [
1819 {
1820 "lines": [
1821 {
1822 "kind": "context",
1823 "old": 3,
1824 "new": 3,
1825 "text": "fn main() {"
1826 },
1827 {
1828 "kind": "delete",
1829 "old": 4,
1830 "new": null,
1831 "text": " println!(\"Hello, world!\");"
1832 },
1833 {
1834 "kind": "add",
1835 "old": null,
1836 "new": 4,
1837 "text": " println!(\"Hello, {}!\", std::env::args().nth(1).unwrap_or(\"world\".into()));"
1838 },
1839 {
1840 "kind": "context",
1841 "old": 5,
1842 "new": 5,
1843 "text": "}"
1844 }
1845 ]
1846 }
1847 ]
1848 }
1849 ],
1850 "truncated": false
1851 },
1852 "notes": "A file's `status` is `added`, `modified` or `deleted`. A binary file has no `hunks`. In a line, `old` is `null` when it was added and `new` is `null` when it was deleted."
1853 },
1854 "mark_pull_request_ready": {
1855 "request": {
1856 "summary": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\"."
1857 },
1858 "response": {
1859 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
1860 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1861 "number": 14,
1862 "issue": 12,
1863 "title": "Greeting should name the caller",
1864 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
1865 "agent": "claude-code",
1866 "runtime": "external",
1867 "status": "open",
1868 "fork": {
1869 "namespace": "pulls",
1870 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
1871 },
1872 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
1873 "branch": null,
1874 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1875 "merge_base": null,
1876 "merged_by": null,
1877 "merged_at": null,
1878 "superseded_by": null,
1879 "check_status": null,
1880 "files": [
1881 {
1882 "path": "src/main.rs",
1883 "additions": 6,
1884 "deletions": 2
1885 }
1886 ],
1887 "assignees": [],
1888 "reviewers": [],
1889 "labels": [],
1890 "milestone": null,
1891 "base": "main",
1892 "author": {
1893 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1894 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1895 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1896 "kind": "user",
1897 "verified": false,
1898 "workspaces": []
1899 },
1900 "requested_by": null,
1901 "created_at": "2026-10-01T18:20:02.117Z",
1902 "updated_at": "2026-10-01T18:33:10.398Z"
1903 }
1904 },
1905 "review_pull_request": {
1906 "request": {
1907 "verdict": "request_changes",
1908 "body": "Trim the name before using it."
1909 },
1910 "response": {
1911 "id": "cmt_01m43sx9f3h7k1n5r9v3z7d1g5",
1912 "kind": "comment",
1913 "author": {
1914 "id": "usr_01kz9d3f7h1k5n9r3v7z1c5g9b",
1915 "username": "ana",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1916 "display_username": "Ana",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1917 "kind": "user",
1918 "verified": true,
1919 "workspaces": [
1920 {
1921 "slug": "flagon-io",
1922 "role": "member"
1923 }
1924 ]
1925 },
1926 "body": "Trim the name before using it.",
1927 "path": null,
1928 "line": null,
1929 "verdict": "request_changes",
1930 "created_at": "2026-10-01T18:40:05.019Z"
1931 }
1932 },
1933 "request_reviewers": {
1934 "params": {
1935 "owner": "flagon-io",
1936 "name": "hello",
1937 "number": 14
1938 },
1939 "request": {
1940 "reviewers": [
1941 "bo"
1942 ],
1943 "team_reviewers": [
1944 "backend"
1945 ]
1946 },
1947 "response": {
1948 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
1949 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1950 "number": 14,
1951 "issue": 12,
1952 "title": "Greeting should name the caller",
1953 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
1954 "agent": "claude-code",
1955 "runtime": "external",
1956 "status": "open",
1957 "fork": {
1958 "namespace": "pulls",
1959 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
1960 },
1961 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
1962 "branch": null,
1963 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1964 "merge_base": null,
1965 "merged_by": null,
1966 "merged_at": null,
1967 "superseded_by": null,
1968 "check_status": "passed",
1969 "files": [
1970 {
1971 "path": "src/main.rs",
1972 "additions": 6,
1973 "deletions": 2
1974 }
1975 ],
1976 "assignees": [],
1977 "reviewers": [
1978 "ana",
1979 "bo"
1980 ],
1981 "team_reviewers": [
1982 "flagon-io/backend"
1983 ],
1984 "author": {
1985 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1986 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar1987 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person1988 "kind": "user",
1989 "verified": false,
1990 "workspaces": []
1991 },
1992 "requested_by": null,
1993 "created_at": "2026-10-01T18:20:02.117Z",
1994 "updated_at": "2026-10-01T18:40:12.331Z"
1995 },
1996 "notes": "Adds to who is asked: `reviewers` by username (`g1t` asks a g1t agent), `team_reviewers` as `workspace/team`, or a team's slug in the repository's workspace. A team with review assignment on has the people it picks added to `reviewers`, and stays in `team_reviewers`. Each is told in their inbox. Nobody is asked to review their own pull request. `422` for someone who is not an account, or a team that does not exist or that you cannot see. Whoever opened it, or the Triage role or higher, while it is open. See [Pull requests](/guides/pull-requests/) and [Teams](/guides/teams/)."
1997 },
1998 "remove_requested_reviewers": {
1999 "params": {
2000 "owner": "flagon-io",
2001 "name": "hello",
2002 "number": 14
2003 },
2004 "request": {
2005 "reviewers": [
2006 "bo"
2007 ],
2008 "team_reviewers": [
2009 "flagon-io/backend"
2010 ]
2011 },
2012 "response": {
2013 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
2014 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2015 "number": 14,
2016 "issue": 12,
2017 "title": "Greeting should name the caller",
2018 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
2019 "agent": "claude-code",
2020 "runtime": "external",
2021 "status": "open",
2022 "fork": {
2023 "namespace": "pulls",
2024 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
2025 },
2026 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
2027 "branch": null,
2028 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2029 "merge_base": null,
2030 "merged_by": null,
2031 "merged_at": null,
2032 "superseded_by": null,
2033 "check_status": "passed",
2034 "files": [
2035 {
2036 "path": "src/main.rs",
2037 "additions": 6,
2038 "deletions": 2
2039 }
2040 ],
2041 "assignees": [],
2042 "reviewers": [
2043 "ana"
2044 ],
2045 "team_reviewers": [],
2046 "author": {
2047 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2048 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar2049 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person2050 "kind": "user",
2051 "verified": false,
2052 "workspaces": []
2053 },
2054 "requested_by": null,
2055 "created_at": "2026-10-01T18:20:02.117Z",
2056 "updated_at": "2026-10-01T18:41:30.904Z"
2057 },
2058 "notes": "Takes them off who is asked; anyone not asked is ignored. Reviews they already gave stay, as do the people a team's review assignment picked: remove them by username."
2059 },
2060 "merge_pull_request": {
2061 "request": {
2062 "keep_issue_open": false
2063 },
2064 "response": {
2065 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
2066 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2067 "number": 14,
2068 "issue": 12,
2069 "title": "Greeting should name the caller",
2070 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
2071 "agent": "claude-code",
2072 "runtime": "external",
2073 "status": "merged",
2074 "fork": {
2075 "namespace": "pulls",
2076 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
2077 },
2078 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
2079 "branch": null,
2080 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2081 "merge_base": "3a7e9c1b5d2f4a6c8e0b2d4f6a8c0e2b4d6f8a1c",
2082 "merged_by": "syntaqx",
2083 "merged_at": "2026-10-01T18:52:17.093Z",
2084 "superseded_by": null,
2085 "check_status": "passed",
2086 "files": [
2087 {
2088 "path": "src/main.rs",
2089 "additions": 6,
2090 "deletions": 2
2091 }
2092 ],
2093 "assignees": [],
2094 "reviewers": [
2095 "ana"
2096 ],
2097 "labels": [],
2098 "milestone": null,
2099 "base": "main",
2100 "author": {
2101 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2102 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar2103 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person2104 "kind": "user",
2105 "verified": false,
2106 "workspaces": []
2107 },
2108 "requested_by": null,
2109 "created_at": "2026-10-01T18:20:02.117Z",
2110 "updated_at": "2026-10-01T18:52:17.093Z"
2111 },
2112 "notes": "A draft, or one whose checks have not passed, answers `409`. A pull request still `open` in the response has not landed yet: `landing` is true on it while it is brought up to date, and [get the merge queue](/reference/api/pull-requests/get-merge-queue/) shows it waiting in the [merge queue](/guides/merge-queue/). Merging records the pull request in the issue's `resolved_by` and sets `superseded_by` on the pull requests it closes."
2113 },
2114 "close_pull_request": {
2115 "response": {
2116 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
2117 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2118 "number": 14,
2119 "issue": 12,
2120 "title": "Greeting should name the caller",
2121 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
2122 "agent": "claude-code",
2123 "runtime": "external",
2124 "status": "closed",
2125 "fork": {
2126 "namespace": "pulls",
2127 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
2128 },
2129 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
2130 "branch": null,
2131 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2132 "merge_base": null,
2133 "merged_by": null,
2134 "merged_at": null,
2135 "superseded_by": null,
2136 "check_status": null,
2137 "files": [
2138 {
2139 "path": "src/main.rs",
2140 "additions": 6,
2141 "deletions": 2
2142 }
2143 ],
2144 "assignees": [],
2145 "reviewers": [],
2146 "labels": [],
2147 "milestone": null,
2148 "base": "main",
2149 "author": {
2150 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2151 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar2152 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person2153 "kind": "user",
2154 "verified": false,
2155 "workspaces": []
2156 },
2157 "requested_by": null,
2158 "created_at": "2026-10-01T18:20:02.117Z",
2159 "updated_at": "2026-10-01T19:02:48.760Z"
2160 }
2161 },
Merge Actions: cross-repo workflows and actions, release and deployment triggers, step timeouts2162 "reopen_pull_request": {
2163 "response": {
2164 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
2165 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2166 "number": 14,
2167 "issue": 12,
2168 "title": "Greeting should name the caller",
2169 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
2170 "agent": "claude-code",
2171 "runtime": "external",
2172 "status": "open",
2173 "fork": {
2174 "namespace": "pulls",
2175 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
2176 },
2177 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
2178 "branch": null,
2179 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2180 "merge_base": null,
2181 "merged_by": null,
2182 "merged_at": null,
2183 "superseded_by": null,
2184 "check_status": null,
2185 "files": [
2186 {
2187 "path": "src/main.rs",
2188 "additions": 6,
2189 "deletions": 2
2190 }
2191 ],
2192 "assignees": [],
2193 "reviewers": [],
2194 "labels": [],
2195 "milestone": null,
2196 "base": "main",
2197 "author": {
2198 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2199 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar2200 "display_username": "syntaqx",
Merge Actions: cross-repo workflows and actions, release and deployment triggers, step timeouts2201 "kind": "user",
2202 "verified": false,
2203 "workspaces": []
2204 },
2205 "requested_by": null,
2206 "created_at": "2026-10-01T18:20:02.117Z",
2207 "updated_at": "2026-10-01T19:14:05.322Z"
2208 },
2209 "notes": "A merged pull request, or one that is not closed, answers `409`. A pull request closed as a draft comes back as a draft; any other comes back ready for review. A pull request from a branch of the repository whose branch was deleted answers `409` until the branch is pushed again. The same as `PATCH /repos/{owner}/{repo}/pulls/{number}` with `state` `open`."
2210 },
2211 "convert_pull_request_to_draft": {
2212 "response": {
2213 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
2214 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2215 "number": 14,
2216 "issue": 12,
2217 "title": "Greeting should name the caller",
2218 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
2219 "agent": "claude-code",
2220 "runtime": "external",
2221 "status": "draft",
2222 "fork": {
2223 "namespace": "pulls",
2224 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
2225 },
2226 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
2227 "branch": null,
2228 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2229 "merge_base": null,
2230 "merged_by": null,
2231 "merged_at": null,
2232 "superseded_by": null,
2233 "check_status": null,
2234 "files": [
2235 {
2236 "path": "src/main.rs",
2237 "additions": 6,
2238 "deletions": 2
2239 }
2240 ],
2241 "assignees": [],
2242 "reviewers": [],
2243 "labels": [],
2244 "milestone": null,
2245 "base": "main",
2246 "author": {
2247 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2248 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar2249 "display_username": "syntaqx",
Merge Actions: cross-repo workflows and actions, release and deployment triggers, step timeouts2250 "kind": "user",
2251 "verified": false,
2252 "workspaces": []
2253 },
2254 "requested_by": null,
2255 "created_at": "2026-10-01T18:20:02.117Z",
2256 "updated_at": "2026-10-01T19:20:41.908Z"
2257 },
2258 "notes": "Only a pull request that is open and ready for review can be made a draft; any other answers `409`. It leaves the [merge queue](/guides/merge-queue/)."
2259 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person2260 "get_merge_queue": {
2261 "response": {
2262 "enabled": true,
2263 "active": [
2264 {
2265 "id": "qen_01m43rn0qsft1tpap1awkewzbb",
2266 "number": 14,
2267 "title": "Greeting should name the caller",
2268 "agent": "claude-code",
2269 "state": "testing",
2270 "ahead": [],
2271 "base_commit": "3a7e9c1b5d2f4a6c8e0b2d4f6a8c0e2b4d6f8a1c",
2272 "combined_commit": null,
2273 "error": null,
2274 "results": [],
2275 "enqueued_by": "syntaqx",
2276 "created_at": "2026-10-04T15:31:20.441Z",
2277 "finished_at": null
2278 }
2279 ],
2280 "recent": [
2281 {
2282 "id": "qen_01m43khqjmeb5a1magayrnk63z",
2283 "number": 11,
2284 "title": "Fix trailing newline in greeting",
2285 "agent": "g1t",
2286 "state": "landed",
2287 "ahead": [],
2288 "base_commit": "4b1d7e9c2a5f8e3d6c0b9a7e5d3c1b8a6f4e2d0c",
2289 "combined_commit": "c3e8a1f6d4b2097e5c3a1f8d6b4e2c0a9f7d5b3e",
2290 "error": null,
2291 "results": [
2292 {
2293 "command": "cargo test",
2294 "passed": true,
2295 "exit_code": 0,
2296 "output": "test result: ok. 12 passed; 0 failed\n",
2297 "duration_ms": 48211
2298 }
2299 ],
2300 "enqueued_by": "g1t",
2301 "created_at": "2026-10-04T14:02:09.876Z",
2302 "finished_at": "2026-10-04T14:09:55.102Z"
2303 }
2304 ]
2305 },
2306 "notes": "An entry's `state` is `waiting`, `testing`, `passed`, `failed`, `landed` or `removed`. `active` is in queue order; `recent` holds at most 20, newest first."
2307 },
2308 "read_session": {
2309 "query": {
2310 "after": 0
2311 },
2312 "response": [
2313 {
2314 "seq": 1,
2315 "kind": "prompt",
2316 "text": "Make the greeting name the caller (issue #12).",
2317 "tool": null,
2318 "commit": null,
2319 "at": "2026-10-01T18:21:00.004Z"
2320 },
2321 {
2322 "seq": 2,
2323 "kind": "tool_call",
2324 "text": "cargo test",
2325 "tool": "bash",
2326 "commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2327 "at": "2026-10-01T18:30:12.660Z"
2328 }
2329 ]
2330 },
2331 "record_session": {
2332 "request": {
2333 "entries": [
2334 {
2335 "kind": "message",
2336 "text": "Reading src/main.rs."
2337 },
2338 {
2339 "kind": "tool_call",
2340 "text": "cargo test",
2341 "tool": "bash"
2342 }
2343 ]
2344 },
2345 "response": {
2346 "count": 2
2347 },
2348 "notes": "Up to 200 entries can be appended per request. Each is recorded against the pull request's head commit at the time. See [sessions and why-blame](/guides/why-blame/)."
2349 },
Merge branch 'worktree-agent-a6ec0a89d7fe7a9ae'2350 "start_session": {
2351 "request": {
2352 "harness": "claude_code",
2353 "harness_session_id": "5b0c1f9e-3d2a-4e8b-9f61-0c7d2a9e4b13",
2354 "issue": 12,
2355 "branch": "greet-caller",
2356 "title": "Make the greeting name the caller"
2357 },
2358 "response": {
2359 "id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2360 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2361 "issue": 12,
2362 "pull": null,
2363 "branch": "greet-caller",
2364 "actor": {
2365 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2366 "username": "syntaqx"
2367 },
2368 "harness": "claude_code",
2369 "harness_session_id": "5b0c1f9e-3d2a-4e8b-9f61-0c7d2a9e4b13",
2370 "title": "Make the greeting name the caller",
2371 "state": "active",
2372 "head_commit": null,
2373 "started_at": "2026-10-12T14:02:11.204Z",
2374 "last_seen_at": "2026-10-12T14:02:11.204Z",
2375 "ended_at": null,
2376 "end_reason": null
2377 },
g1t coordinates the work and the person's own sessions do it: Ask g1t reads g1t with the same tools any agent gets, answers in one conversation shared with the @g1t direct message in Chat, and hands work to sessions in the person's own harness, whose subagents g1t records, ties to issues and pull requests, and lets see each other.2378 "notes": "Idempotent on `harness_session_id`: a second start with it returns this session, so call it from a hook without checking first. `state` is `active`, `idle` (no heartbeat for 15 minutes) or `ended` (ended, or no heartbeat for 2 hours: `end_reason` `timed_out`). A subagent gives `parent_id`, `agent_type`, `task` and `prompt`. See [Sessions](/guides/sessions/)."
Merge branch 'worktree-agent-a6ec0a89d7fe7a9ae'2379 },
g1t coordinates the work and the person's own sessions do it: Ask g1t reads g1t with the same tools any agent gets, answers in one conversation shared with the @g1t direct message in Chat, and hands work to sessions in the person's own harness, whose subagents g1t records, ties to issues and pull requests, and lets see each other.2380 "start_agent_session": {
2381 "request": {
2382 "issue": 12,
2383 "mode": "implement",
2384 "instruction": "Keep the old greeting behind a flag."
2385 },
2386 "response": {
2387 "issue": 12,
2388 "session": {
2389 "id": "ses_01m4c9a8b7c6d5e4f3g2h1j0k9",
2390 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2391 "issue": 12,
2392 "pull": null,
2393 "branch": null,
2394 "actor": {
2395 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2396 "username": "syntaqx"
2397 },
2398 "harness": "claude_managed_agents",
2399 "harness_session_id": "sesn_011CZkZAtmR3yMPDzynEDxu7",
2400 "title": "#12 Make the greeting name the caller",
2401 "state": "active",
2402 "head_commit": null,
2403 "started_at": "2026-10-12T15:10:02.117Z",
2404 "last_seen_at": "2026-10-12T15:10:02.117Z",
2405 "ended_at": null,
2406 "end_reason": null,
2407 "parent_id": null,
2408 "agent_type": null,
2409 "task": null,
2410 "prompt": null,
2411 "result": null,
2412 "model": "claude-opus-5-5",
2413 "subagents": 0
2414 },
2415 "session_url": "https://g1t.sh/syntaqx/hello/work/sessions/ses_01m4c9a8b7c6d5e4f3g2h1j0k9",
2416 "provider": "anthropic",
2417 "provider_session_id": "sesn_011CZkZAtmR3yMPDzynEDxu7",
2418 "provider_session_url": "https://platform.claude.com/workspaces/default/sessions/sesn_011CZkZAtmR3yMPDzynEDxu7",
2419 "handoff": false,
2420 "command": null,
2421 "prompt": "Work on issue #12 in syntaqx/hello: Make the greeting name the caller.\n\n…"
2422 },
2423 "notes": "Runs on the workspace's own Anthropic key: g1t runs no model and bills nothing for it. Without an Anthropic connection (or with `handoff: true`) nothing is started and `command` is a Claude Code command line to run with g1t's plugin. See [Sessions](/guides/sessions/#start-a-session-on-your-anthropic-account)."
2424 },
Merge branch 'worktree-agent-a6ec0a89d7fe7a9ae'2425 "update_session": {
2426 "request": {
2427 "pull": 14,
2428 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13"
2429 },
2430 "response": {
2431 "id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2432 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2433 "issue": 12,
2434 "pull": 14,
2435 "branch": "greet-caller",
2436 "actor": {
2437 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2438 "username": "syntaqx"
2439 },
2440 "harness": "claude_code",
2441 "harness_session_id": "5b0c1f9e-3d2a-4e8b-9f61-0c7d2a9e4b13",
2442 "title": "Make the greeting name the caller",
2443 "state": "active",
2444 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2445 "started_at": "2026-10-12T14:02:11.204Z",
2446 "last_seen_at": "2026-10-12T14:31:40.518Z",
2447 "ended_at": null,
2448 "end_reason": null
2449 },
2450 "notes": "Send `{}` as a heartbeat. Each call renews the session's claims and brings back one that timed out. Refused with `404` for a session that is not yours, and `409` for one you ended."
2451 },
2452 "end_session": {
2453 "request": {
2454 "reason": "done"
2455 },
2456 "response": {
2457 "id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2458 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2459 "issue": 12,
2460 "pull": 14,
2461 "branch": "greet-caller",
2462 "actor": {
2463 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2464 "username": "syntaqx"
2465 },
2466 "harness": "claude_code",
2467 "harness_session_id": "5b0c1f9e-3d2a-4e8b-9f61-0c7d2a9e4b13",
2468 "title": "Make the greeting name the caller",
2469 "state": "ended",
2470 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2471 "started_at": "2026-10-12T14:02:11.204Z",
2472 "last_seen_at": "2026-10-12T14:40:03.115Z",
2473 "ended_at": "2026-10-12T14:40:03.115Z",
2474 "end_reason": "done"
2475 }
2476 },
2477 "get_session": {
2478 "query": {
2479 "after": 0
2480 },
2481 "response": {
2482 "session": {
2483 "id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2484 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2485 "issue": 12,
2486 "pull": 14,
2487 "branch": "greet-caller",
2488 "actor": {
2489 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2490 "username": "syntaqx"
2491 },
2492 "harness": "claude_code",
2493 "harness_session_id": "5b0c1f9e-3d2a-4e8b-9f61-0c7d2a9e4b13",
2494 "title": "Make the greeting name the caller",
2495 "state": "active",
2496 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2497 "started_at": "2026-10-12T14:02:11.204Z",
2498 "last_seen_at": "2026-10-12T14:31:40.518Z",
2499 "ended_at": null,
2500 "end_reason": null
2501 },
2502 "entries": [
2503 {
2504 "seq": 1,
2505 "kind": "prompt",
2506 "text": "Make the greeting name the caller (issue #12).",
2507 "tool": null,
2508 "commit": null,
2509 "at": "2026-10-12T14:02:12.008Z"
2510 },
2511 {
2512 "seq": 2,
2513 "kind": "tool_call",
2514 "text": "cargo test",
2515 "tool": "Bash",
2516 "commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2517 "at": "2026-10-12T14:30:12.660Z"
2518 }
g1t coordinates the work and the person's own sessions do it: Ask g1t reads g1t with the same tools any agent gets, answers in one conversation shared with the @g1t direct message in Chat, and hands work to sessions in the person's own harness, whose subagents g1t records, ties to issues and pull requests, and lets see each other.2519 ],
2520 "children": [
2521 {
2522 "id": "ses_01m4b2d8x1y2z3a4b5c6d7e8f9",
2523 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2524 "issue": 12,
2525 "pull": null,
2526 "branch": "greet-caller",
2527 "actor": {
2528 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2529 "username": "syntaqx"
2530 },
2531 "harness": "claude_code",
2532 "harness_session_id": "5b0c1f9e-3d2a-4e8b-9f61-0c7d2a9e4b13/agent/a4d2c8f1e0b3a297",
2533 "title": null,
2534 "state": "ended",
2535 "head_commit": null,
2536 "started_at": "2026-10-12T14:05:40.112Z",
2537 "last_seen_at": "2026-10-12T14:07:02.930Z",
2538 "ended_at": "2026-10-12T14:07:02.930Z",
2539 "end_reason": "done",
2540 "parent_id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2541 "agent_type": "Explore",
2542 "task": "Find where the greeting is built",
2543 "prompt": "Find every place the greeting text is built and say which file to change.",
2544 "result": "The greeting is built in src/greet.rs (greet) and nowhere else.",
2545 "model": "claude-sonnet-5-5",
2546 "subagents": 0
2547 }
2548 ],
2549 "touched": [
2550 {
2551 "session_id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2552 "kind": "file",
2553 "value": "src/greet.rs",
2554 "at": "2026-10-12T14:12:30.004Z"
2555 },
2556 {
2557 "session_id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2558 "kind": "branch",
2559 "value": "greet-caller",
2560 "at": "2026-10-12T14:30:40.871Z"
2561 }
2562 ],
2563 "links": [
2564 {
2565 "kind": "pull",
2566 "number": 14,
2567 "title": "Name the caller in the greeting",
2568 "state": "open",
2569 "via": ["attached", "branch"],
2570 "session_ids": ["ses_01m4b2c3d4e5f6g7h8j9k0m1n2"]
2571 },
2572 {
2573 "kind": "issue",
2574 "number": 12,
2575 "title": "Make the greeting name the caller",
2576 "state": "open",
2577 "via": ["attached", "claim"],
2578 "session_ids": ["ses_01m4b2c3d4e5f6g7h8j9k0m1n2", "ses_01m4b2d8x1y2z3a4b5c6d7e8f9"]
2579 }
2580 ],
2581 "skills": [
2582 {
2583 "session_id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2584 "name": "work-on-issue",
2585 "uses": 1
2586 }
2587 ],
2588 "root": null
Merge branch 'worktree-agent-a6ec0a89d7fe7a9ae'2589 },
g1t coordinates the work and the person's own sessions do it: Ask g1t reads g1t with the same tools any agent gets, answers in one conversation shared with the @g1t direct message in Chat, and hands work to sessions in the person's own harness, whose subagents g1t records, ties to issues and pull requests, and lets see each other.2590 "notes": "Entries are numbered within the session and come 500 at a time; send the last `seq` you have as `after` for the next page. `children` are the session's subagents and theirs; `touched`, `links` and `skills` cover the whole tree."
Merge branch 'worktree-agent-a6ec0a89d7fe7a9ae'2591 },
2592 "list_sessions": {
2593 "query": {
2594 "state": "active",
2595 "issue": 12
2596 },
2597 "response": [
2598 {
2599 "id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2600 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2601 "issue": 12,
2602 "pull": 14,
2603 "branch": "greet-caller",
2604 "actor": {
2605 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2606 "username": "syntaqx"
2607 },
2608 "harness": "claude_code",
2609 "harness_session_id": "5b0c1f9e-3d2a-4e8b-9f61-0c7d2a9e4b13",
2610 "title": "Make the greeting name the caller",
2611 "state": "active",
2612 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2613 "started_at": "2026-10-12T14:02:11.204Z",
2614 "last_seen_at": "2026-10-12T14:31:40.518Z",
2615 "ended_at": null,
2616 "end_reason": null
2617 }
2618 ]
2619 },
2620 "record_session_entries": {
2621 "request": {
2622 "entries": [
2623 {
2624 "kind": "prompt",
2625 "text": "Make the greeting name the caller (issue #12).",
2626 "key": "prompt-1"
2627 },
2628 {
2629 "kind": "tool_call",
2630 "text": "cargo test",
2631 "tool": "Bash",
2632 "key": "tool-7"
g1t coordinates the work and the person's own sessions do it: Ask g1t reads g1t with the same tools any agent gets, answers in one conversation shared with the @g1t direct message in Chat, and hands work to sessions in the person's own harness, whose subagents g1t records, ties to issues and pull requests, and lets see each other.2633 },
2634 {
2635 "kind": "skill",
2636 "text": "work-on-issue",
2637 "key": "skill-3"
Merge branch 'worktree-agent-a6ec0a89d7fe7a9ae'2638 }
g1t coordinates the work and the person's own sessions do it: Ask g1t reads g1t with the same tools any agent gets, answers in one conversation shared with the @g1t direct message in Chat, and hands work to sessions in the person's own harness, whose subagents g1t records, ties to issues and pull requests, and lets see each other.2639 ],
2640 "touched": [
2641 { "kind": "file", "value": "src/greet.rs" },
2642 { "kind": "branch", "value": "greet-caller" }
Merge branch 'worktree-agent-a6ec0a89d7fe7a9ae'2643 ]
2644 },
2645 "response": {
g1t coordinates the work and the person's own sessions do it: Ask g1t reads g1t with the same tools any agent gets, answers in one conversation shared with the @g1t direct message in Chat, and hands work to sessions in the person's own harness, whose subagents g1t records, ties to issues and pull requests, and lets see each other.2646 "recorded": 3,
Merge branch 'worktree-agent-a6ec0a89d7fe7a9ae'2647 "duplicates": 0
2648 },
2649 "notes": "Up to 200 entries a request. An entry whose `key` the session recorded before is counted in `duplicates` and not recorded again. Entries of a session on a pull request show in that pull request's session too (read_session)."
2650 },
2651 "claim_issue": {
2652 "request": {
2653 "session_id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2654 "note": "Taking the argument parsing first.",
2655 "ttl_minutes": 30
2656 },
2657 "response": {
2658 "claim": {
2659 "id": "clm_01m4b3d5f7h9k1m3p5r7t9w1y3",
2660 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2661 "issue": 12,
2662 "session_id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2663 "actor": {
2664 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2665 "username": "syntaqx"
2666 },
2667 "harness": "claude_code",
2668 "note": "Taking the argument parsing first.",
2669 "state": "active",
2670 "created_at": "2026-10-12T14:03:02.771Z",
2671 "expires_at": "2026-10-12T15:01:40.518Z",
2672 "ended_at": null,
2673 "end_reason": null,
2674 "handoff_to": null
2675 },
2676 "others": [
2677 {
2678 "id": "clm_01m4b2a4c6e8g0j2l4n6q8s0u2",
2679 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2680 "issue": 12,
2681 "session_id": null,
2682 "actor": {
2683 "id": "usr_01kkp2v7d4fh8m3q6t9w2z5c8e",
2684 "username": "ana"
2685 },
2686 "harness": null,
2687 "note": "Looking at the tests.",
2688 "state": "active",
2689 "created_at": "2026-10-12T13:50:12.000Z",
2690 "expires_at": "2026-10-12T14:20:12.000Z",
2691 "ended_at": null,
2692 "end_reason": null,
2693 "handoff_to": null
2694 }
2695 ],
2696 "blocked_by": [
2697 {
2698 "number": 9,
2699 "title": "Read arguments with a parser",
2700 "state": "open",
2701 "claims": [
2702 {
2703 "id": "clm_01m4b2a4c6e8g0j2l4n6q8s0u2",
2704 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2705 "issue": 9,
2706 "session_id": null,
2707 "actor": {
2708 "id": "usr_01kkp2v7d4fh8m3q6t9w2z5c8e",
2709 "username": "ana"
2710 },
2711 "harness": null,
2712 "note": null,
2713 "state": "active",
2714 "created_at": "2026-10-12T13:50:12.000Z",
2715 "expires_at": "2026-10-12T14:20:12.000Z",
2716 "ended_at": null,
2717 "end_reason": null,
2718 "handoff_to": null
2719 }
2720 ],
2721 "pulls": [
2722 {
2723 "number": 11,
2724 "title": "Parse arguments with clap",
2725 "status": "open"
2726 }
2727 ]
2728 }
2729 ]
2730 },
2731 "notes": "A claim is advisory: it is made even when `others` lists someone already on the issue. Claiming an issue you hold renews your claim. Refused with `409` for a closed issue. See [Claims](/guides/sessions/#claims)."
2732 },
2733 "release_claim": {
2734 "request": {
2735 "reason": "Ana has it covered."
2736 },
2737 "response": {
2738 "id": "clm_01m4b3d5f7h9k1m3p5r7t9w1y3",
2739 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2740 "issue": 12,
2741 "session_id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2742 "actor": {
2743 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2744 "username": "syntaqx"
2745 },
2746 "harness": "claude_code",
2747 "note": "Taking the argument parsing first.",
2748 "state": "released",
2749 "created_at": "2026-10-12T14:03:02.771Z",
2750 "expires_at": "2026-10-12T15:01:40.518Z",
2751 "ended_at": "2026-10-12T14:12:30.000Z",
2752 "end_reason": "Ana has it covered.",
2753 "handoff_to": null
2754 }
2755 },
2756 "hand_off_issue": {
2757 "request": {
2758 "to": "ana",
2759 "note": "Parsing is done and tested; the README still needs the new usage."
2760 },
2761 "response": {
2762 "id": "clm_01m4b3d5f7h9k1m3p5r7t9w1y3",
2763 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2764 "issue": 12,
2765 "session_id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2766 "actor": {
2767 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2768 "username": "syntaqx"
2769 },
2770 "harness": "claude_code",
2771 "note": "Parsing is done and tested; the README still needs the new usage.",
2772 "state": "handed_off",
2773 "created_at": "2026-10-12T14:03:02.771Z",
2774 "expires_at": "2026-10-12T15:01:40.518Z",
2775 "ended_at": "2026-10-12T14:38:00.000Z",
2776 "end_reason": "handed_off",
2777 "handoff_to": "ana"
2778 }
2779 },
2780 "list_claims": {
2781 "query": {
2782 "state": "active"
2783 },
2784 "response": [
2785 {
2786 "id": "clm_01m4b3d5f7h9k1m3p5r7t9w1y3",
2787 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2788 "issue": 12,
2789 "session_id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2790 "actor": {
2791 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2792 "username": "syntaqx"
2793 },
2794 "harness": "claude_code",
2795 "note": "Taking the argument parsing first.",
2796 "state": "active",
2797 "created_at": "2026-10-12T14:03:02.771Z",
2798 "expires_at": "2026-10-12T15:01:40.518Z",
2799 "ended_at": null,
2800 "end_reason": null,
2801 "handoff_to": null
2802 },
2803 {
2804 "id": "clm_01m4b2a4c6e8g0j2l4n6q8s0u2",
2805 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2806 "issue": 12,
2807 "session_id": null,
2808 "actor": {
2809 "id": "usr_01kkp2v7d4fh8m3q6t9w2z5c8e",
2810 "username": "ana"
2811 },
2812 "harness": null,
2813 "note": "Looking at the tests.",
2814 "state": "active",
2815 "created_at": "2026-10-12T13:50:12.000Z",
2816 "expires_at": "2026-10-12T14:20:12.000Z",
2817 "ended_at": null,
2818 "end_reason": null,
2819 "handoff_to": null
2820 }
2821 ]
2822 },
2823 "get_work": {
2824 "response": {
2825 "issue": {
2826 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
2827 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2828 "number": 12,
2829 "title": "Greeting should name the caller",
2830 "body": "Take a name from the first argument; fall back to world.\n\n## Definition of done\n\n- `cargo test` passes.\n- The README shows the new usage.",
2831 "labels": [
2832 "feature",
2833 "good first issue"
2834 ],
2835 "state": "open",
2836 "reason": null,
2837 "resolved_by": null,
2838 "author": {
2839 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2840 "username": "syntaqx",
2841 "display_username": "syntaqx",
2842 "kind": "user",
2843 "verified": false,
2844 "workspaces": []
2845 },
2846 "requested_by": null,
2847 "created_at": "2026-10-01T18:04:11.482Z",
2848 "updated_at": "2026-10-01T18:09:47.305Z",
2849 "closed_at": null,
2850 "pull_count": 0,
2851 "comment_count": 0,
2852 "assignees": [
2853 "syntaqx"
2854 ],
2855 "blocked_by": [
2856 9
2857 ],
2858 "queued": false,
2859 "agent": null,
2860 "milestone": {
2861 "number": 3,
2862 "title": "Launch"
2863 }
2864 },
2865 "definition_of_done": [
2866 "`cargo test` passes.",
2867 "The README shows the new usage."
2868 ],
2869 "required_checks": [
2870 "CI"
2871 ],
2872 "claims": [
2873 {
2874 "id": "clm_01m4b3d5f7h9k1m3p5r7t9w1y3",
2875 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2876 "issue": 12,
2877 "session_id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2878 "actor": {
2879 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2880 "username": "syntaqx"
2881 },
2882 "harness": "claude_code",
2883 "note": "Taking the argument parsing first.",
2884 "state": "active",
2885 "created_at": "2026-10-12T14:03:02.771Z",
2886 "expires_at": "2026-10-12T15:01:40.518Z",
2887 "ended_at": null,
2888 "end_reason": null,
2889 "handoff_to": null
2890 }
2891 ],
2892 "sessions": [
2893 {
2894 "id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2895 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2896 "issue": 12,
2897 "pull": 14,
2898 "branch": "greet-caller",
2899 "actor": {
2900 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2901 "username": "syntaqx"
2902 },
2903 "harness": "claude_code",
2904 "harness_session_id": "5b0c1f9e-3d2a-4e8b-9f61-0c7d2a9e4b13",
2905 "title": "Make the greeting name the caller",
2906 "state": "active",
2907 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2908 "started_at": "2026-10-12T14:02:11.204Z",
2909 "last_seen_at": "2026-10-12T14:31:40.518Z",
2910 "ended_at": null,
2911 "end_reason": null
2912 }
2913 ],
2914 "pulls": [
2915 {
2916 "number": 14,
2917 "title": "Greeting should name the caller",
2918 "status": "draft",
2919 "branch": "greet-caller",
2920 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
2921 "author": {
2922 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
2923 "username": "syntaqx"
2924 },
2925 "check_status": null,
2926 "required_checks": [
2927 {
2928 "name": "CI",
2929 "state": "success",
2930 "description": "CI passed",
2931 "target_url": "https://g1t.sh/syntaqx/hello/actions/runs/run_01m43sw8e2g6j0m4q8t2x6a0c4"
2932 }
2933 ],
2934 "mergeable": "clean",
2935 "overlaps": [
2936 {
2937 "number": 11,
2938 "title": "Parse arguments with clap",
2939 "issue": 9,
2940 "paths": [
2941 "src/main.rs"
2942 ]
2943 }
2944 ],
2945 "queue": null
2946 }
2947 ],
2948 "blocked_by": [
2949 {
2950 "number": 9,
2951 "title": "Read arguments with a parser",
2952 "state": "open",
2953 "claims": [
2954 {
2955 "id": "clm_01m4b2a4c6e8g0j2l4n6q8s0u2",
2956 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
2957 "issue": 9,
2958 "session_id": null,
2959 "actor": {
2960 "id": "usr_01kkp2v7d4fh8m3q6t9w2z5c8e",
2961 "username": "ana"
2962 },
2963 "harness": null,
2964 "note": null,
2965 "state": "active",
2966 "created_at": "2026-10-12T13:50:12.000Z",
2967 "expires_at": "2026-10-12T14:20:12.000Z",
2968 "ended_at": null,
2969 "end_reason": null,
2970 "handoff_to": null
2971 }
2972 ],
2973 "pulls": [
2974 {
2975 "number": 11,
2976 "title": "Parse arguments with clap",
2977 "status": "open"
2978 }
2979 ]
2980 }
2981 ],
2982 "blocks": [
2983 {
2984 "number": 15,
2985 "title": "Greet in the caller's language",
2986 "state": "open"
2987 }
2988 ],
2989 "decisions": [
2990 {
2991 "id": "dec_01m4b3e7g9j1l3n5q7s9u1w3y5",
2992 "issue": 12,
2993 "pull": 14,
2994 "session_id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
2995 "actor": "syntaqx",
2996 "kind": "proposal",
2997 "confidence": "claimed",
2998 "summary": "Read the name with the argument parser #9 brings, rather than by hand.",
2999 "evidence": {
3000 "commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13"
3001 },
3002 "created_at": "2026-10-12T14:20:00.000Z"
3003 }
3004 ],
3005 "last_integration_failure": null,
3006 "recent": [
3007 {
3008 "id": "evt_01m4b3d5f7h9k1m3p5r7t9w1y4",
3009 "type": "work.claimed",
3010 "source": "work",
3011 "time": "2026-10-12T14:03:02.771Z",
3012 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
3013 "actor": "usr_01kkntcg1eeb98j62xjm7eh09p",
3014 "data": {
3015 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
3016 "number": 12,
3017 "issue": 12,
3018 "claim": {
3019 "id": "clm_01m4b3d5f7h9k1m3p5r7t9w1y3",
3020 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
3021 "issue": 12,
3022 "session_id": "ses_01m4b2c3d4e5f6g7h8j9k0m1n2",
3023 "actor": {
3024 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
3025 "username": "syntaqx"
3026 },
3027 "harness": "claude_code",
3028 "note": "Taking the argument parsing first.",
3029 "state": "active",
3030 "created_at": "2026-10-12T14:03:02.771Z",
3031 "expires_at": "2026-10-12T15:01:40.518Z",
3032 "ended_at": null,
3033 "end_reason": null,
3034 "handoff_to": null
3035 },
3036 "others": [
3037 {
3038 "id": "clm_01m4b2a4c6e8g0j2l4n6q8s0u2",
3039 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
3040 "issue": 12,
3041 "session_id": null,
3042 "actor": {
3043 "id": "usr_01kkp2v7d4fh8m3q6t9w2z5c8e",
3044 "username": "ana"
3045 },
3046 "harness": null,
3047 "note": "Looking at the tests.",
3048 "state": "active",
3049 "created_at": "2026-10-12T13:50:12.000Z",
3050 "expires_at": "2026-10-12T14:20:12.000Z",
3051 "ended_at": null,
3052 "end_reason": null,
3053 "handoff_to": null
3054 }
3055 ]
3056 }
3057 }
3058 ]
3059 },
3060 "notes": "`pulls` are the issue's pull requests, oldest first; `required_checks`, `mergeable`, `overlaps` and `queue` (its `state` and `position` in the merge queue, 1 at the front) are filled in for those still open or draft. `recent` holds up to 20 coordination events about the issue or its pull requests, newest first. See [Picking up an issue](/guides/sessions/#picking-up-an-issue)."
3061 },
Merge branch 'worktree-agent-ab8033ab973f8d99a'3062 "record_decision": {
3063 "request": {
3064 "kind": "fix",
3065 "summary": "Renamed the config key #12 also introduced, so both read retry_limit.",
3066 "evidence": {
3067 "commit": "7d3e9a1c5b2f4e6a8c0d2e4f6a8b0c2d4e6f8a0b"
3068 },
3069 "session_id": "ses_01kpz7x9y1z3a5b7c9d1e3f5gh"
3070 },
3071 "response": {
3072 "id": "dec_01kpz9a1b3c5d7e9f1g3h5j7kb",
3073 "issue": 9,
3074 "pull": 14,
3075 "session_id": "ses_01kpz7x9y1z3a5b7c9d1e3f5gh",
3076 "actor": "ana",
3077 "kind": "fix",
3078 "confidence": "claimed",
3079 "summary": "Renamed the config key #12 also introduced, so both read retry_limit.",
3080 "evidence": {
3081 "commit": "7d3e9a1c5b2f4e6a8c0d2e4f6a8b0c2d4e6f8a0b"
3082 },
3083 "created_at": "2026-10-12T15:31:40.019Z"
3084 },
3085 "notes": "Kept as `claimed`. g1t records `integration_failure`, `integration_passed`, `approval` and `merge` itself. Publishes `decision.recorded`. See [decision records](/guides/why-blame/#decision-records)."
3086 },
3087 "list_decisions": {
3088 "response": [
3089 {
3090 "id": "dec_01kpz8m2q4r6s8t0v2w4x6y8za",
3091 "issue": 9,
3092 "pull": 14,
3093 "session_id": null,
3094 "actor": null,
3095 "kind": "integration_failure",
3096 "confidence": "tested",
3097 "summary": "#14 failed in the merge queue together with #12: `CI / merge_group` failed when they were combined.",
3098 "evidence": {
3099 "commit": "4be1c0d9a2f3e4b5c6d7e8f90a1b2c3d4e5f6a7b",
3100 "check": {
3101 "name": "CI / merge_group",
3102 "conclusion": "failure",
3103 "url": "https://g1t.sh/acme/web/actions/runs/run_01kpz8k0"
3104 },
3105 "combination": [
3106 11,
3107 12,
3108 14
3109 ],
3110 "other_pulls": [
3111 11,
3112 12
3113 ],
3114 "suspects": [
3115 12
3116 ],
Merge branch 'worktree-agent-a0796e9a7a41f51e5'3117 "bisected": true,
3118 "landed": []
Merge branch 'worktree-agent-ab8033ab973f8d99a'3119 },
3120 "created_at": "2026-10-12T15:04:11.204Z"
3121 },
3122 {
3123 "id": "dec_01kpz9a1b3c5d7e9f1g3h5j7kb",
3124 "issue": 9,
3125 "pull": 14,
3126 "session_id": "ses_01kpz7x9y1z3a5b7c9d1e3f5gh",
3127 "actor": "ana",
3128 "kind": "fix",
3129 "confidence": "claimed",
3130 "summary": "Renamed the config key #12 also introduced, so both read retry_limit.",
3131 "evidence": {
3132 "commit": "7d3e9a1c5b2f4e6a8c0d2e4f6a8b0c2d4e6f8a0b"
3133 },
3134 "created_at": "2026-10-12T15:31:40.019Z"
3135 }
3136 ],
3137 "notes": "`GET /repos/{owner}/{name}/issues/{number}/decisions` lists an issue's, with those on its pull requests."
3138 },
3139 "why": {
3140 "query": {
3141 "path": "src/config.rs",
3142 "line": 42
3143 },
3144 "response": {
3145 "path": "src/config.rs",
3146 "line": 42,
3147 "commit": {
3148 "hash": "7d3e9a1c5b2f4e6a8c0d2e4f6a8b0c2d4e6f8a0b",
3149 "tree_hash": "c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0",
3150 "message": "Read retry_limit, as #12 names it",
3151 "author": {
3152 "name": "Ana Lima",
3153 "email": "ana@example.com"
3154 },
3155 "parents": [
3156 "4be1c0d9a2f3e4b5c6d7e8f90a1b2c3d4e5f6a7b"
3157 ],
3158 "authored_at": "2026-10-12T15:29:02Z"
3159 },
3160 "pull": {
3161 "number": 14,
3162 "title": "Retry failed webhook deliveries",
3163 "author": "ana",
3164 "agent": "claude-code",
3165 "merged_by": "g1t",
3166 "merged_at": "2026-10-12T15:52:18.330Z"
3167 },
3168 "issue": {
3169 "number": 9,
3170 "title": "Webhook deliveries are not retried",
3171 "state": "closed",
3172 "body": "A delivery that times out is never sent again."
3173 },
3174 "decisions": [
3175 {
3176 "id": "dec_01kpz8m2q4r6s8t0v2w4x6y8za",
3177 "issue": 9,
3178 "pull": 14,
3179 "session_id": null,
3180 "actor": null,
3181 "kind": "integration_failure",
3182 "confidence": "tested",
3183 "summary": "#14 failed in the merge queue together with #12: `CI / merge_group` failed when they were combined.",
3184 "evidence": {
3185 "commit": "4be1c0d9a2f3e4b5c6d7e8f90a1b2c3d4e5f6a7b",
3186 "check": {
3187 "name": "CI / merge_group",
3188 "conclusion": "failure",
3189 "url": "https://g1t.sh/acme/web/actions/runs/run_01kpz8k0"
3190 },
3191 "combination": [
3192 11,
3193 12,
3194 14
3195 ],
3196 "other_pulls": [
3197 11,
3198 12
3199 ],
3200 "suspects": [
3201 12
3202 ],
Merge branch 'worktree-agent-a0796e9a7a41f51e5'3203 "bisected": true,
3204 "landed": []
Merge branch 'worktree-agent-ab8033ab973f8d99a'3205 },
3206 "created_at": "2026-10-12T15:04:11.204Z"
3207 },
3208 {
3209 "id": "dec_01kpz9a1b3c5d7e9f1g3h5j7kb",
3210 "issue": 9,
3211 "pull": 14,
3212 "session_id": "ses_01kpz7x9y1z3a5b7c9d1e3f5gh",
3213 "actor": "ana",
3214 "kind": "fix",
3215 "confidence": "claimed",
3216 "summary": "Renamed the config key #12 also introduced, so both read retry_limit.",
3217 "evidence": {
3218 "commit": "7d3e9a1c5b2f4e6a8c0d2e4f6a8b0c2d4e6f8a0b"
3219 },
3220 "created_at": "2026-10-12T15:31:40.019Z"
3221 }
3222 ],
3223 "sessions": [
3224 {
3225 "seq": 31,
3226 "kind": "message",
3227 "text": "#12 renamed retries to retry_limit; reading the new name here.",
3228 "tool": null,
3229 "commit": null,
3230 "at": "2026-10-12T15:27:40.118Z"
3231 }
3232 ]
3233 },
3234 "notes": "`ref` reads the file at a branch, tag or commit. See [sessions and why-blame](/guides/why-blame/#why-over-the-api)."
3235 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3236 "list_workflows": {
3237 "response": [
3238 {
3239 "id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
3240 "path": ".g1t/workflows/ci.yml",
3241 "name": "CI",
3242 "events": [
3243 "push",
3244 "pull_request",
3245 "workflow_dispatch"
3246 ],
3247 "state": "active",
3248 "error": null,
3249 "notes": [
3250 {
3251 "severity": "unsupported",
3252 "job": "test",
3253 "message": "`services` containers (such as a database) are not started on g1t yet."
3254 }
3255 ],
3256 "dispatch": {
3257 "debug": {
3258 "description": "Verbose logs",
3259 "type": "boolean",
3260 "default": false
3261 }
3262 },
3263 "last_run": {
3264 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
3265 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
3266 "path": ".g1t/workflows/ci.yml",
3267 "name": "CI",
3268 "title": "Greeting should name the caller",
3269 "number": 12,
3270 "attempt": 1,
3271 "event": "push",
3272 "ref": "refs/heads/main",
3273 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
3274 "pull": null,
3275 "status": "completed",
3276 "conclusion": "success",
3277 "error": null,
3278 "actor": "syntaqx",
3279 "created_at": "2026-10-04T15:42:07.318Z",
3280 "started_at": "2026-10-04T15:42:09.020Z",
3281 "finished_at": "2026-10-04T15:44:31.877Z"
3282 }
3283 },
3284 {
3285 "id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9nq",
3286 "path": ".g1t/workflows/nightly.yml",
3287 "name": "Nightly",
3288 "events": [
3289 "schedule"
3290 ],
3291 "state": "disabled",
3292 "error": null,
3293 "notes": [],
3294 "dispatch": null,
3295 "last_run": null
3296 }
3297 ],
3298 "notes": "`state` is `active` or `disabled`. `dispatch` holds the `workflow_dispatch` inputs, or is `null` when the workflow cannot be run by hand. See [GitHub Actions](/guides/actions/)."
3299 },
Merge branch 'worktree-agent-a4db4b523bb973765'3300 "get_workflow": {
3301 "params": {
3302 "workflow": "release.yml"
3303 },
3304 "query": {
3305 "ref": "main"
3306 },
3307 "response": {
3308 "id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9nr",
3309 "path": ".g1t/workflows/release.yml",
3310 "name": "Release",
3311 "events": [
3312 "workflow_dispatch"
3313 ],
3314 "state": "active",
3315 "error": null,
3316 "notes": [],
3317 "dispatch": {
3318 "channel": {
3319 "type": "choice",
3320 "options": [
3321 "beta",
3322 "stable"
3323 ],
3324 "default": "beta"
3325 }
3326 },
3327 "last_run": null,
3328 "ref": "main",
3329 "source": "name: Release\non:\n workflow_dispatch:\n inputs:\n channel:\n type: choice\n options: [beta, stable]\n default: beta\njobs:\n release:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - run: ./scripts/release.sh ${{ inputs.channel }}\n"
3330 },
3331 "notes": "`workflow` is the workflow's id, file name, path or name. `source` is its file as written on `ref`; `404` when the file is not on that branch or tag."
3332 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3333 "list_workflow_runs": {
3334 "query": {
3335 "workflow": "ci.yml",
3336 "branch": "main",
3337 "per_page": 20
3338 },
3339 "response": [
3340 {
3341 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
3342 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
3343 "path": ".g1t/workflows/ci.yml",
3344 "name": "CI",
3345 "title": "Greeting should name the caller",
3346 "number": 12,
3347 "attempt": 1,
3348 "event": "push",
3349 "ref": "refs/heads/main",
3350 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
3351 "pull": null,
3352 "status": "completed",
3353 "conclusion": "success",
3354 "error": null,
3355 "actor": "syntaqx",
3356 "created_at": "2026-10-04T15:42:07.318Z",
3357 "started_at": "2026-10-04T15:42:09.020Z",
3358 "finished_at": "2026-10-04T15:44:31.877Z"
3359 }
3360 ],
3361 "notes": "A run's `status` is `queued`, `pending` (waiting for its concurrency group), `in_progress` or `completed`; `conclusion` is set once it completes."
3362 },
3363 "list_runs_of_workflow": {
3364 "params": {
3365 "workflow": "ci.yml"
3366 },
3367 "query": {
3368 "branch": "main",
3369 "per_page": 20
3370 },
3371 "response": [
3372 {
3373 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
3374 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
3375 "path": ".g1t/workflows/ci.yml",
3376 "name": "CI",
3377 "title": "Greeting should name the caller",
3378 "number": 12,
3379 "attempt": 1,
3380 "event": "push",
3381 "ref": "refs/heads/main",
3382 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
3383 "pull": null,
3384 "status": "completed",
3385 "conclusion": "success",
3386 "error": null,
3387 "actor": "syntaqx",
3388 "created_at": "2026-10-04T15:42:07.318Z",
3389 "started_at": "2026-10-04T15:42:09.020Z",
3390 "finished_at": "2026-10-04T15:44:31.877Z"
3391 }
3392 ]
3393 },
3394 "get_workflow_run": {
3395 "params": {
3396 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr"
3397 },
3398 "response": {
3399 "run": {
3400 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
3401 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
3402 "path": ".g1t/workflows/ci.yml",
3403 "name": "CI",
3404 "title": "Greeting should name the caller",
3405 "number": 12,
3406 "attempt": 1,
3407 "event": "push",
3408 "ref": "refs/heads/main",
3409 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
3410 "pull": null,
3411 "status": "completed",
3412 "conclusion": "failure",
3413 "error": null,
3414 "actor": "syntaqx",
3415 "created_at": "2026-10-04T15:42:07.318Z",
3416 "started_at": "2026-10-04T15:42:09.020Z",
3417 "finished_at": "2026-10-04T15:44:31.877Z"
3418 },
3419 "jobs": [
3420 {
3421 "id": "job_01kpx7b3d0e4f8g2h6j0k4m8ns",
3422 "run_id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
3423 "key": "test",
3424 "name": "test",
3425 "needs": [],
3426 "status": "completed",
3427 "conclusion": "failure",
3428 "steps": [
3429 {
3430 "number": 1,
3431 "name": "Run actions/checkout@v4",
3432 "status": "completed",
3433 "conclusion": "success",
3434 "started_at": "2026-10-04T15:42:10.101Z",
3435 "finished_at": "2026-10-04T15:42:12.433Z"
3436 },
3437 {
3438 "number": 2,
3439 "name": "Run cargo test",
3440 "status": "completed",
3441 "conclusion": "failure",
3442 "started_at": "2026-10-04T15:42:12.440Z",
3443 "finished_at": "2026-10-04T15:44:30.902Z"
3444 }
3445 ],
3446 "annotations": [
3447 {
3448 "level": "error",
3449 "message": "assertion failed: greeting names the caller",
3450 "title": "greet",
3451 "file": "src/main.rs",
3452 "line": 41
3453 }
3454 ],
3455 "reason": null,
3456 "started_at": "2026-10-04T15:42:09.020Z",
3457 "finished_at": "2026-10-04T15:44:31.002Z"
3458 },
3459 {
3460 "id": "job_01kpx7b3d0e4f8g2h6j0k4m8nt",
3461 "run_id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
3462 "key": "deploy",
3463 "name": "deploy",
3464 "needs": [
3465 "test"
3466 ],
3467 "status": "completed",
3468 "conclusion": "skipped",
3469 "steps": [],
3470 "annotations": [],
3471 "reason": "A job it needs did not succeed.",
3472 "started_at": null,
3473 "finished_at": "2026-10-04T15:44:31.877Z"
3474 }
3475 ],
3476 "notes": [
3477 {
3478 "severity": "unsupported",
3479 "job": "test",
3480 "message": "`services` containers (such as a database) are not started on g1t yet."
3481 }
Merge Actions runs: summaries, attempts and re-runs, graceful cancel, log downloads, badges (actions 0009)3482 ],
3483 "attempts": [
3484 {
3485 "attempt": 1,
3486 "status": "completed",
3487 "conclusion": "failure",
3488 "actor": "syntaqx",
3489 "debug": false,
3490 "started_at": "2026-10-04T15:42:09.020Z",
3491 "finished_at": "2026-10-04T15:44:31.877Z"
3492 }
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3493 ]
Merge Actions runs: summaries, attempts and re-runs, graceful cancel, log downloads, badges (actions 0009)3494 },
3495 "notes": "Each re-run is a new attempt. Read an earlier one with `attempt`, or at `GET /repos/{owner}/{repo}/actions/runs/{id}/attempts/{attempt}`; its jobs have ids of their own, so `get_job_logs` reads the log each had then. A job that is `cancelling` was cancelled and is running its cleanup steps."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3496 },
3497 "get_job_logs": {
3498 "params": {
3499 "job": "job_01kpx7b3d0e4f8g2h6j0k4m8ns"
3500 },
3501 "query": {
3502 "after": 0
3503 },
3504 "response": {
3505 "chunks": [
3506 {
3507 "seq": 1,
3508 "step": 0,
3509 "text": "Preparing the sandbox\n"
3510 },
3511 {
3512 "seq": 2,
3513 "step": 2,
3514 "text": "> cargo test\ntest greet ... FAILED\n"
3515 }
3516 ],
3517 "done": true
3518 },
3519 "notes": "Returns at most 500 chunks. Step 0 is the job's setup. While `done` is false, call again with the last `seq` as `after`."
3520 },
3521 "dispatch_workflow": {
3522 "params": {
3523 "workflow": "ci.yml"
3524 },
3525 "request": {
3526 "ref": "main",
3527 "inputs": {
3528 "debug": true
3529 }
3530 },
3531 "response": {
3532 "id": "run_01kpx8d4e7f0g3h6j9k2m5n8pq",
3533 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
3534 "path": ".g1t/workflows/ci.yml",
3535 "name": "CI",
3536 "title": "CI run by syntaqx",
3537 "number": 13,
3538 "attempt": 1,
3539 "event": "workflow_dispatch",
3540 "ref": "refs/heads/main",
3541 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
3542 "pull": null,
3543 "status": "queued",
3544 "conclusion": null,
3545 "error": null,
3546 "actor": "syntaqx",
3547 "created_at": "2026-10-04T16:30:00.512Z",
3548 "started_at": null,
3549 "finished_at": null
3550 }
3551 },
3552 "cancel_workflow_run": {
3553 "params": {
3554 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr"
3555 },
3556 "response": {
3557 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
3558 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
3559 "path": ".g1t/workflows/ci.yml",
3560 "name": "CI",
3561 "title": "Greeting should name the caller",
3562 "number": 12,
3563 "attempt": 1,
3564 "event": "push",
3565 "ref": "refs/heads/main",
3566 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
3567 "pull": null,
3568 "status": "completed",
3569 "conclusion": "cancelled",
3570 "error": null,
3571 "actor": "syntaqx",
3572 "created_at": "2026-10-04T15:42:07.318Z",
3573 "started_at": "2026-10-04T15:42:09.020Z",
3574 "finished_at": "2026-10-04T15:44:31.877Z"
3575 }
3576 },
3577 "rerun_workflow_run": {
3578 "params": {
3579 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr"
3580 },
3581 "request": {
3582 "failed_only": true
3583 },
3584 "response": {
3585 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
3586 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
3587 "path": ".g1t/workflows/ci.yml",
3588 "name": "CI",
3589 "title": "Greeting should name the caller",
3590 "number": 12,
3591 "attempt": 2,
3592 "event": "push",
3593 "ref": "refs/heads/main",
3594 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
3595 "pull": null,
3596 "status": "queued",
3597 "conclusion": null,
3598 "error": null,
3599 "actor": "syntaqx",
3600 "created_at": "2026-10-04T15:42:07.318Z",
3601 "started_at": null,
3602 "finished_at": null
3603 },
3604 "notes": "The run keeps its id; `attempt` goes up by one."
3605 },
3606 "rerun_failed_jobs": {
3607 "params": {
3608 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr"
3609 },
3610 "response": {
3611 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
3612 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
3613 "path": ".g1t/workflows/ci.yml",
3614 "name": "CI",
3615 "title": "Greeting should name the caller",
3616 "number": 12,
3617 "attempt": 2,
3618 "event": "push",
3619 "ref": "refs/heads/main",
3620 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
3621 "pull": null,
3622 "status": "queued",
3623 "conclusion": null,
3624 "error": null,
3625 "actor": "syntaqx",
3626 "created_at": "2026-10-04T15:42:07.318Z",
3627 "started_at": null,
3628 "finished_at": null
3629 }
3630 },
Merge Actions runs: summaries, attempts and re-runs, graceful cancel, log downloads, badges (actions 0009)3631 "rerun_job": {
3632 "params": {
3633 "job": "job_01kpx7b3d0e4f8g2h6j0k4m8ns"
3634 },
3635 "request": {
3636 "enable_debug_logging": true
3637 },
3638 "response": {
3639 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
3640 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
3641 "path": ".g1t/workflows/ci.yml",
3642 "name": "CI",
3643 "title": "Greeting should name the caller",
3644 "number": 12,
3645 "attempt": 2,
3646 "event": "push",
3647 "ref": "refs/heads/main",
3648 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
3649 "pull": null,
3650 "status": "queued",
3651 "conclusion": null,
3652 "error": null,
3653 "actor": "syntaqx",
3654 "created_at": "2026-10-04T15:42:07.318Z",
3655 "started_at": null,
3656 "finished_at": null
3657 },
3658 "notes": "Runs the job again with every job that needs it, as a new attempt; the rest keep how they ended. A job of a matrix runs again with the rest of its matrix, and a job of a called workflow with the job that calls it. The run must have finished."
3659 },
3660 "force_cancel_workflow_run": {
3661 "params": {
3662 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr"
3663 },
3664 "response": {
3665 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
3666 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
3667 "path": ".g1t/workflows/ci.yml",
3668 "name": "CI",
3669 "title": "Greeting should name the caller",
3670 "number": 12,
3671 "attempt": 1,
3672 "event": "push",
3673 "ref": "refs/heads/main",
3674 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
3675 "pull": null,
3676 "status": "completed",
3677 "conclusion": "cancelled",
3678 "error": null,
3679 "actor": "syntaqx",
3680 "created_at": "2026-10-04T15:42:07.318Z",
3681 "started_at": "2026-10-04T15:42:09.020Z",
3682 "finished_at": "2026-10-04T15:43:02.411Z"
3683 },
3684 "notes": "Stops running jobs at once, without their `if: always()`, `cancelled()` or post steps. Use it when a job's cleanup hangs."
3685 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3686 "update_workflow": {
3687 "params": {
3688 "workflow": "nightly.yml"
3689 },
3690 "request": {
3691 "enabled": false
3692 },
3693 "response": {
3694 "id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9nq",
3695 "path": ".g1t/workflows/nightly.yml",
3696 "name": "Nightly",
3697 "events": [
3698 "schedule"
3699 ],
3700 "state": "disabled",
3701 "error": null,
3702 "notes": [],
3703 "dispatch": null,
3704 "last_run": null
3705 }
3706 },
3707 "enable_workflow": {
3708 "params": {
3709 "workflow": "nightly.yml"
3710 },
3711 "response": {
3712 "id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9nq",
3713 "path": ".g1t/workflows/nightly.yml",
3714 "name": "Nightly",
3715 "events": [
3716 "schedule"
3717 ],
3718 "state": "active",
3719 "error": null,
3720 "notes": [],
3721 "dispatch": null,
3722 "last_run": null
3723 }
3724 },
3725 "disable_workflow": {
3726 "params": {
3727 "workflow": "nightly.yml"
3728 },
3729 "response": {
3730 "id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9nq",
3731 "path": ".g1t/workflows/nightly.yml",
3732 "name": "Nightly",
3733 "events": [
3734 "schedule"
3735 ],
3736 "state": "disabled",
3737 "error": null,
3738 "notes": [],
3739 "dispatch": null,
3740 "last_run": null
3741 }
3742 },
3743 "list_actions_secrets": {
3744 "response": [
3745 {
3746 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ab",
3747 "name": "NPM_TOKEN",
3748 "kind": "secret",
3749 "value": null,
3750 "scope": "workspace",
3751 "updated_at": "2026-10-01T09:12:44.020Z",
3752 "available_to": [
3753 "workflows"
3754 ],
3755 "environments": [],
3756 "projects": [],
3757 "note": null,
Merge brokered secrets: a secret a job uses only to call an API can be tied to the hosts it is for, and the job gets a stand-in in its place, which g1t fills in on the way out to those hosts and nowhere else, so the value never enters the sandbox; and a request to an allowed host that fails upstream is retried when it can be, or answered with a 502 that says why, rather than reset.3758 "updated_by": "syntaqx",
3759 "brokered_hosts": [
3760 "registry.npmjs.org"
3761 ]
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3762 },
3763 {
3764 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ac",
3765 "name": "STRIPE_KEY",
3766 "kind": "secret",
3767 "value": null,
3768 "scope": "project",
3769 "updated_at": "2026-10-04T15:42:07.318Z",
3770 "available_to": [
3771 "workflows",
3772 "deployments"
3773 ],
3774 "environments": [
3775 "production"
3776 ],
3777 "projects": [],
3778 "note": "Rotate in the Stripe dashboard.",
Merge brokered secrets: a secret a job uses only to call an API can be tied to the hosts it is for, and the job gets a stand-in in its place, which g1t fills in on the way out to those hosts and nowhere else, so the value never enters the sandbox; and a request to an allowed host that fails upstream is retried when it can be, or answered with a 502 that says why, rather than reset.3779 "updated_by": "syntaqx",
3780 "brokered_hosts": []
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3781 }
3782 ],
Merge brokered secrets: a secret a job uses only to call an API can be tied to the hosts it is for, and the job gets a stand-in in its place, which g1t fills in on the way out to those hosts and nowhere else, so the value never enters the sandbox; and a request to an allowed host that fails upstream is retried when it can be, or answered with a 502 that says why, rather than reset.3783 "notes": "Values are never returned. A repository's list includes the workspace's rows that reach it, with `scope` set to `workspace`. Empty `environments` means every environment; empty `brokered_hosts`, a secret that is not brokered."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3784 },
3785 "list_actions_secrets_for_workspace": {
3786 "params": {
3787 "workspace": "flagon-io"
3788 },
3789 "response": [
3790 {
3791 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ab",
3792 "name": "NPM_TOKEN",
3793 "kind": "secret",
3794 "value": null,
3795 "scope": "workspace",
3796 "updated_at": "2026-10-04T15:42:07.318Z",
3797 "available_to": [
3798 "workflows"
3799 ],
3800 "environments": [],
3801 "projects": [],
3802 "note": null,
Merge brokered secrets: a secret a job uses only to call an API can be tied to the hosts it is for, and the job gets a stand-in in its place, which g1t fills in on the way out to those hosts and nowhere else, so the value never enters the sandbox; and a request to an allowed host that fails upstream is retried when it can be, or answered with a 502 that says why, rather than reset.3803 "updated_by": "syntaqx",
3804 "brokered_hosts": [
3805 "registry.npmjs.org"
3806 ]
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3807 }
3808 ],
Merge brokered secrets: a secret a job uses only to call an API can be tied to the hosts it is for, and the job gets a stand-in in its place, which g1t fills in on the way out to those hosts and nowhere else, so the value never enters the sandbox; and a request to an allowed host that fails upstream is retried when it can be, or answered with a 502 that says why, rather than reset.3809 "notes": "Values are never returned. A repository's list includes the workspace's rows that reach it, with `scope` set to `workspace`. Empty `environments` means every environment; empty `brokered_hosts`, a secret that is not brokered."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3810 },
3811 "set_actions_secret": {
3812 "params": {
3813 "setting": "STRIPE_KEY"
3814 },
3815 "request": {
3816 "value": "sk_live_…",
3817 "available_to": [
3818 "workflows",
3819 "deployments"
3820 ],
3821 "environments": [
3822 "production"
3823 ]
3824 },
3825 "response": {
3826 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ac",
3827 "name": "STRIPE_KEY",
3828 "kind": "secret",
3829 "value": null,
3830 "scope": "project",
3831 "updated_at": "2026-10-04T15:42:07.318Z",
3832 "available_to": [
3833 "workflows",
3834 "deployments"
3835 ],
3836 "environments": [
3837 "production"
3838 ],
3839 "projects": [],
3840 "note": null,
Merge brokered secrets: a secret a job uses only to call an API can be tied to the hosts it is for, and the job gets a stand-in in its place, which g1t fills in on the way out to those hosts and nowhere else, so the value never enters the sandbox; and a request to an allowed host that fails upstream is retried when it can be, or answered with a 502 that says why, rather than reset.3841 "updated_by": "syntaqx",
3842 "brokered_hosts": []
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3843 },
3844 "notes": "Keys are uppercased. See [secrets and variables](/guides/secrets-and-variables/)."
3845 },
3846 "set_actions_secret_for_workspace": {
3847 "params": {
3848 "workspace": "flagon-io",
3849 "setting": "NPM_TOKEN"
3850 },
3851 "request": {
3852 "value": "npm_…",
3853 "projects": [
3854 "hello"
Merge brokered secrets: a secret a job uses only to call an API can be tied to the hosts it is for, and the job gets a stand-in in its place, which g1t fills in on the way out to those hosts and nowhere else, so the value never enters the sandbox; and a request to an allowed host that fails upstream is retried when it can be, or answered with a 502 that says why, rather than reset.3855 ],
3856 "brokered_hosts": [
3857 "registry.npmjs.org"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3858 ]
3859 },
3860 "response": {
3861 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ac",
3862 "name": "NPM_TOKEN",
3863 "kind": "secret",
3864 "value": null,
3865 "scope": "workspace",
3866 "updated_at": "2026-10-04T15:42:07.318Z",
3867 "available_to": [
3868 "workflows"
3869 ],
3870 "environments": [],
3871 "projects": [
3872 "hello"
3873 ],
3874 "note": null,
Merge brokered secrets: a secret a job uses only to call an API can be tied to the hosts it is for, and the job gets a stand-in in its place, which g1t fills in on the way out to those hosts and nowhere else, so the value never enters the sandbox; and a request to an allowed host that fails upstream is retried when it can be, or answered with a 502 that says why, rather than reset.3875 "updated_by": "syntaqx",
3876 "brokered_hosts": [
3877 "registry.npmjs.org"
3878 ]
Merge Stripe Tax, the card fee on card payments, and one free workspace per person3879 }
3880 },
3881 "delete_actions_secret": {
3882 "params": {
3883 "setting": "STRIPE_KEY"
3884 },
3885 "response": true
3886 },
3887 "delete_actions_secret_for_workspace": {
3888 "params": {
3889 "workspace": "flagon-io",
3890 "setting": "NPM_TOKEN"
3891 },
3892 "response": true
3893 },
3894 "list_actions_variables": {
3895 "response": [
3896 {
3897 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ad",
3898 "name": "NODE_VERSION",
3899 "kind": "variable",
3900 "value": "20",
3901 "scope": "project",
3902 "updated_at": "2026-10-04T15:42:07.318Z",
3903 "available_to": [
3904 "workflows",
3905 "deployments"
3906 ],
3907 "environments": [],
3908 "projects": [],
3909 "note": null,
3910 "updated_by": "syntaqx"
3911 }
3912 ],
3913 "notes": "A repository's list includes the workspace's rows that reach it, with `scope` set to `workspace`. Empty `environments` means every environment."
3914 },
3915 "list_actions_variables_for_workspace": {
3916 "params": {
3917 "workspace": "flagon-io"
3918 },
3919 "response": [
3920 {
3921 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ad",
3922 "name": "NODE_VERSION",
3923 "kind": "variable",
3924 "value": "20",
3925 "scope": "workspace",
3926 "updated_at": "2026-10-04T15:42:07.318Z",
3927 "available_to": [
3928 "workflows",
3929 "deployments"
3930 ],
3931 "environments": [],
3932 "projects": [],
3933 "note": null,
3934 "updated_by": "syntaqx"
3935 }
3936 ]
3937 },
3938 "set_actions_variable": {
3939 "request": {
3940 "setting": "NODE_VERSION",
3941 "value": "20"
3942 },
3943 "response": {
3944 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ad",
3945 "name": "NODE_VERSION",
3946 "kind": "variable",
3947 "value": "20",
3948 "scope": "project",
3949 "updated_at": "2026-10-04T15:42:07.318Z",
3950 "available_to": [
3951 "workflows",
3952 "deployments"
3953 ],
3954 "environments": [],
3955 "projects": [],
3956 "note": null,
3957 "updated_by": "syntaqx"
3958 },
3959 "notes": "GitHub's clients send the key as `name`; that is accepted too."
3960 },
3961 "set_actions_variable_for_workspace": {
3962 "params": {
3963 "workspace": "flagon-io"
3964 },
3965 "request": {
3966 "setting": "NODE_VERSION",
3967 "value": "20"
3968 },
3969 "response": {
3970 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ad",
3971 "name": "NODE_VERSION",
3972 "kind": "variable",
3973 "value": "20",
3974 "scope": "workspace",
3975 "updated_at": "2026-10-04T15:42:07.318Z",
3976 "available_to": [
3977 "workflows",
3978 "deployments"
3979 ],
3980 "environments": [],
3981 "projects": [],
3982 "note": null,
3983 "updated_by": "syntaqx"
3984 }
3985 },
3986 "update_actions_variable": {
3987 "params": {
3988 "setting": "NODE_VERSION"
3989 },
3990 "request": {
3991 "value": "22"
3992 },
3993 "response": {
3994 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ad",
3995 "name": "NODE_VERSION",
3996 "kind": "variable",
3997 "value": "22",
3998 "scope": "project",
3999 "updated_at": "2026-10-04T15:42:07.318Z",
4000 "available_to": [
4001 "workflows",
4002 "deployments"
4003 ],
4004 "environments": [],
4005 "projects": [],
4006 "note": null,
4007 "updated_by": "syntaqx"
4008 }
4009 },
4010 "update_actions_variable_for_workspace": {
4011 "params": {
4012 "workspace": "flagon-io",
4013 "setting": "NODE_VERSION"
4014 },
4015 "request": {
4016 "value": "22"
4017 },
4018 "response": {
4019 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ad",
4020 "name": "NODE_VERSION",
4021 "kind": "variable",
4022 "value": "22",
4023 "scope": "workspace",
4024 "updated_at": "2026-10-04T15:42:07.318Z",
4025 "available_to": [
4026 "workflows",
4027 "deployments"
4028 ],
4029 "environments": [],
4030 "projects": [],
4031 "note": null,
4032 "updated_by": "syntaqx"
4033 }
4034 },
4035 "delete_actions_variable": {
4036 "params": {
4037 "setting": "NODE_VERSION"
4038 },
4039 "response": true
4040 },
4041 "delete_actions_variable_for_workspace": {
4042 "params": {
4043 "workspace": "flagon-io",
4044 "setting": "NODE_VERSION"
4045 },
4046 "response": true
4047 },
4048 "list_runners": {
4049 "response": [
4050 {
4051 "id": "rnr_01kq2m8v4c7f0h3k6n9q2t5w8z",
4052 "name": "build-01",
4053 "workspace": "flagon-io",
4054 "repo": null,
4055 "group": "Default",
4056 "labels": [
4057 "self-hosted",
4058 "linux",
4059 "x64",
4060 "gpu"
4061 ],
4062 "os": "linux",
4063 "arch": "x64",
4064 "version": "0.2.0",
4065 "ephemeral": false,
4066 "status": "busy",
4067 "work": {
4068 "kind": "workflow",
4069 "id": "job_01kq2m9b1d4g7j0m3p6s9v2y5b",
4070 "name": "test (linux, 24)",
4071 "repo": "flagon-io/hello",
4072 "run_id": "run_01kq2m9a8c1f4h7k0n3q6t9w2z",
4073 "started_at": "2026-10-06T14:02:11.000Z"
4074 },
4075 "last_seen_at": "2026-10-06T14:05:40.512Z",
4076 "created_at": "2026-10-02T09:30:00.000Z",
Merge the runner sandbox: g1t-runner sandbox up makes a person's own computer a self-hosted runner that nothing a job runs can get out of. Linux jobs run in a Linux VM of the runner's own (a WSL 2 distribution with no host mounts, interop or Docker socket on Windows; vfkit on macOS; Sysbox, or QEMU and KVM, on Linux), each in a fresh container under Sysbox inside it; on Windows 11 Pro and up, Windows jobs each run in a Windows Sandbox discarded after the job. Runners report their isolation, and the Runners page shows it.4077 "created_by": null,
4078 "isolation": "nested-container"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4079 },
4080 {
4081 "id": "rnr_01kq2m8v4c7f0h3k6n9q2t5w9a",
4082 "name": "mac-mini",
4083 "workspace": "flagon-io",
4084 "repo": null,
4085 "group": "Default",
4086 "labels": [
4087 "self-hosted",
4088 "macos",
4089 "arm64"
4090 ],
4091 "os": "macos",
4092 "arch": "arm64",
4093 "version": "0.2.0",
4094 "ephemeral": false,
4095 "status": "online",
4096 "work": null,
4097 "last_seen_at": "2026-10-06T14:05:40.512Z",
4098 "created_at": "2026-10-02T09:30:00.000Z",
Merge the runner sandbox: g1t-runner sandbox up makes a person's own computer a self-hosted runner that nothing a job runs can get out of. Linux jobs run in a Linux VM of the runner's own (a WSL 2 distribution with no host mounts, interop or Docker socket on Windows; vfkit on macOS; Sysbox, or QEMU and KVM, on Linux), each in a fresh container under Sysbox inside it; on Windows 11 Pro and up, Windows jobs each run in a Windows Sandbox discarded after the job. Runners report their isolation, and the Runners page shows it.4099 "created_by": null,
4100 "isolation": "host"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4101 }
4102 ],
4103 "notes": "A repository's list holds its own runners (`repo` set) and the workspace's that its runner group lets it use. A runner is `offline` when it has not polled for 90 seconds."
4104 },
4105 "list_runners_for_workspace": {
4106 "params": {
4107 "workspace": "flagon-io"
4108 },
4109 "response": [
4110 {
4111 "id": "rnr_01kq2m8v4c7f0h3k6n9q2t5w8z",
4112 "name": "build-01",
4113 "workspace": "flagon-io",
4114 "repo": null,
4115 "group": "Default",
4116 "labels": [
4117 "self-hosted",
4118 "linux",
4119 "x64",
4120 "gpu"
4121 ],
4122 "os": "linux",
4123 "arch": "x64",
4124 "version": "0.2.0",
4125 "ephemeral": false,
4126 "status": "busy",
4127 "work": {
4128 "kind": "workflow",
4129 "id": "job_01kq2m9b1d4g7j0m3p6s9v2y5b",
4130 "name": "test (linux, 24)",
4131 "repo": "flagon-io/hello",
4132 "run_id": "run_01kq2m9a8c1f4h7k0n3q6t9w2z",
4133 "started_at": "2026-10-06T14:02:11.000Z"
4134 },
4135 "last_seen_at": "2026-10-06T14:05:40.512Z",
4136 "created_at": "2026-10-02T09:30:00.000Z",
Merge the runner sandbox: g1t-runner sandbox up makes a person's own computer a self-hosted runner that nothing a job runs can get out of. Linux jobs run in a Linux VM of the runner's own (a WSL 2 distribution with no host mounts, interop or Docker socket on Windows; vfkit on macOS; Sysbox, or QEMU and KVM, on Linux), each in a fresh container under Sysbox inside it; on Windows 11 Pro and up, Windows jobs each run in a Windows Sandbox discarded after the job. Runners report their isolation, and the Runners page shows it.4137 "created_by": null,
4138 "isolation": "nested-container"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4139 },
4140 {
4141 "id": "rnr_01kq2m8v4c7f0h3k6n9q2t5w9a",
4142 "name": "mac-mini",
4143 "workspace": "flagon-io",
4144 "repo": null,
4145 "group": "Default",
4146 "labels": [
4147 "self-hosted",
4148 "macos",
4149 "arm64"
4150 ],
4151 "os": "macos",
4152 "arch": "arm64",
4153 "version": "0.2.0",
4154 "ephemeral": false,
4155 "status": "online",
4156 "work": null,
4157 "last_seen_at": "2026-10-06T14:05:40.512Z",
4158 "created_at": "2026-10-02T09:30:00.000Z",
Merge the runner sandbox: g1t-runner sandbox up makes a person's own computer a self-hosted runner that nothing a job runs can get out of. Linux jobs run in a Linux VM of the runner's own (a WSL 2 distribution with no host mounts, interop or Docker socket on Windows; vfkit on macOS; Sysbox, or QEMU and KVM, on Linux), each in a fresh container under Sysbox inside it; on Windows 11 Pro and up, Windows jobs each run in a Windows Sandbox discarded after the job. Runners report their isolation, and the Runners page shows it.4159 "created_by": null,
4160 "isolation": "host"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4161 }
4162 ]
4163 },
4164 "create_runner_registration_token": {
4165 "response": {
4166 "token": "g1trt_…",
4167 "expires_at": "2026-10-06T15:04:00.000Z",
4168 "workspace": "flagon-io",
4169 "repo": "flagon-io/hello",
4170 "group": null,
4171 "url": "https://g1t.sh"
4172 },
4173 "notes": "Pass it to `g1t-runner register --url https://g1t.sh --token …` within the hour. See [self-hosted runners](/guides/self-hosted-runners/)."
4174 },
4175 "create_runner_registration_token_for_workspace": {
4176 "params": {
4177 "workspace": "flagon-io"
4178 },
4179 "request": {
4180 "group": "Default"
4181 },
4182 "response": {
4183 "token": "g1trt_…",
4184 "expires_at": "2026-10-06T15:04:00.000Z",
4185 "workspace": "flagon-io",
4186 "repo": null,
4187 "group": "Default",
4188 "url": "https://g1t.sh"
4189 }
4190 },
4191 "remove_runner": {
4192 "params": {
4193 "id": "rnr_01kq2m8v4c7f0h3k6n9q2t5w8z"
4194 },
4195 "response": true
4196 },
4197 "remove_runner_for_workspace": {
4198 "params": {
4199 "workspace": "flagon-io",
4200 "id": "rnr_01kq2m8v4c7f0h3k6n9q2t5w8z"
4201 },
4202 "response": true
4203 },
4204 "get_runner_settings": {
4205 "response": {
4206 "agents_on_self_hosted": false,
4207 "agent_labels": [
4208 "self-hosted",
4209 "linux"
4210 ],
4211 "fork_pull_requests": false,
4212 "inherited": true
4213 }
4214 },
4215 "get_runner_settings_for_workspace": {
4216 "params": {
4217 "workspace": "flagon-io"
4218 },
4219 "response": {
4220 "agents_on_self_hosted": true,
4221 "agent_labels": [
4222 "self-hosted",
4223 "linux"
4224 ],
4225 "fork_pull_requests": false,
4226 "inherited": false
4227 }
4228 },
4229 "update_runner_settings": {
4230 "request": {
4231 "inherit": true
4232 },
4233 "response": {
4234 "agents_on_self_hosted": false,
4235 "agent_labels": [
4236 "self-hosted",
4237 "linux"
4238 ],
4239 "fork_pull_requests": false,
4240 "inherited": true
4241 }
4242 },
4243 "update_runner_settings_for_workspace": {
4244 "params": {
4245 "workspace": "flagon-io"
4246 },
4247 "request": {
4248 "agents_on_self_hosted": true,
4249 "agent_labels": [
4250 "linux"
4251 ]
4252 },
4253 "response": {
4254 "agents_on_self_hosted": true,
4255 "agent_labels": [
4256 "self-hosted",
4257 "linux"
4258 ],
4259 "fork_pull_requests": false,
4260 "inherited": false
4261 },
4262 "notes": "Agent work on your runners still uses g1t's model proxy, paid as before, unless the workspace has its own model provider."
4263 },
4264 "list_runner_groups": {
4265 "params": {
4266 "workspace": "flagon-io"
4267 },
4268 "response": [
4269 {
4270 "id": "rng_01kq2m7r2a5d8g1j4m7p0s3v6y",
4271 "name": "Default",
4272 "default": true,
4273 "repositories": [],
4274 "runners": 2,
4275 "updated_at": "2026-10-02T09:30:00.000Z"
4276 },
4277 {
4278 "id": "rng_01kq2m7r2a5d8g1j4m7p0s3v6z",
4279 "name": "GPU",
4280 "default": false,
4281 "repositories": [
4282 "hello",
4283 "models"
4284 ],
4285 "runners": 1,
4286 "updated_at": "2026-10-05T11:20:00.000Z"
Every agent can have its own computer. A session that needs one wakes it: a home of its own on g1t cloud, one per agent and never shared, where it runs commands, reads and writes files and keeps what it made, with each session working in its own folder under a shared home; after ten idle minutes it sleeps, its home kept as a snapshot and restored when it wakes, and Reset wipes the home while memory and artifacts stay. Its shell and files are abilities with the usual choices, Alone, Alone when asked, Ask first or Never, offered only inside sessions and never to a chat reply; every command shows on the session with its output, and the agent's new Computer tab shows the state, the disk used of the five gigabytes included, the recent commands, and Wake, Put to sleep and Reset. Machine time counts only while it is awake, on the sandbox lines of the ledger that name the agent and who asked, held to the same spend caps as the session; the disk itself costs nothing in this version. The runner gained a long-lived supervisor that answers the computer's requests inside the container, and the runner service a computer per agent that keeps its snapshot in the agent homes bucket when one is attached, and says so when none is. The REST API and the agent tool can read a computer, wake it, put it to sleep and reset it. The agents, abilities, sessions, runners, billing and deploy guides say how it works and what an operator sets up; pinning a computer to your own runner, its browser and take-over come next.4287 }
4288 ]
4289 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4290 "create_runner_group": {
4291 "params": {
4292 "workspace": "flagon-io"
4293 },
4294 "request": {
4295 "name": "GPU",
4296 "repositories": [
4297 "hello",
4298 "models"
4299 ]
4300 },
4301 "response": {
4302 "id": "rng_01kq2m7r2a5d8g1j4m7p0s3v6z",
4303 "name": "GPU",
4304 "default": false,
4305 "repositories": [
4306 "hello",
4307 "models"
4308 ],
4309 "runners": 1,
4310 "updated_at": "2026-10-05T11:20:00.000Z"
4311 }
4312 },
4313 "update_runner_group": {
4314 "params": {
4315 "workspace": "flagon-io",
4316 "id": "rng_01kq2m7r2a5d8g1j4m7p0s3v6z"
4317 },
4318 "request": {
4319 "repositories": []
4320 },
4321 "response": {
4322 "id": "rng_01kq2m7r2a5d8g1j4m7p0s3v6z",
4323 "name": "GPU",
4324 "default": false,
4325 "repositories": [],
4326 "runners": 1,
4327 "updated_at": "2026-10-05T11:20:00.000Z"
4328 }
4329 },
4330 "delete_runner_group": {
4331 "params": {
4332 "workspace": "flagon-io",
4333 "id": "rng_01kq2m7r2a5d8g1j4m7p0s3v6z"
4334 },
4335 "response": true
4336 },
4337 "list_webhooks": {
4338 "response": [
4339 {
4340 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4341 "scope": "repo",
4342 "workspace": "flagon-io",
4343 "repo": "flagon-io/hello",
4344 "url": "https://hooks.example.com/g1t",
4345 "events": [
4346 "git.push",
4347 "pull.merged"
4348 ],
4349 "active": true,
4350 "secret_hint": "…9c2e",
4351 "created_by": "syntaqx",
4352 "created_at": "2026-10-04T15:42:07.318Z",
4353 "last_status": "delivered",
4354 "last_delivered_at": "2026-10-04T15:42:07.611Z"
4355 }
4356 ]
4357 },
4358 "list_webhooks_for_workspace": {
4359 "params": {
4360 "workspace": "flagon-io"
4361 },
4362 "response": [
4363 {
4364 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4365 "scope": "workspace",
4366 "workspace": "flagon-io",
4367 "repo": null,
4368 "url": "https://hooks.example.com/g1t",
4369 "events": [
4370 "git.push",
4371 "pull.merged"
4372 ],
4373 "active": true,
4374 "secret_hint": "…9c2e",
4375 "created_by": "syntaqx",
4376 "created_at": "2026-10-04T15:42:07.318Z",
4377 "last_status": "delivered",
4378 "last_delivered_at": "2026-10-04T15:42:07.611Z"
4379 }
4380 ]
4381 },
4382 "create_webhook": {
4383 "request": {
4384 "url": "https://hooks.example.com/g1t",
4385 "events": [
4386 "git.push",
4387 "pull.merged"
4388 ]
4389 },
4390 "response": {
4391 "hook": {
4392 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4393 "scope": "repo",
4394 "workspace": "flagon-io",
4395 "repo": "flagon-io/hello",
4396 "url": "https://hooks.example.com/g1t",
4397 "events": [
4398 "git.push",
4399 "pull.merged"
4400 ],
4401 "active": true,
4402 "secret_hint": "…9c2e",
4403 "created_by": "syntaqx",
4404 "created_at": "2026-10-04T15:42:07.318Z",
4405 "last_status": "delivered",
4406 "last_delivered_at": "2026-10-04T15:42:07.611Z"
4407 },
4408 "secret": "whsec_…"
4409 },
4410 "notes": "A ping is sent before the response, so `last_status` is usually set already. When g1t made the signing secret, `secret` holds it: it is shown only this once. See [webhooks](/guides/webhooks/)."
4411 },
4412 "create_webhook_for_workspace": {
4413 "params": {
4414 "workspace": "flagon-io"
4415 },
4416 "request": {
4417 "url": "https://hooks.example.com/g1t"
4418 },
4419 "response": {
4420 "hook": {
4421 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4422 "scope": "workspace",
4423 "workspace": "flagon-io",
4424 "repo": null,
4425 "url": "https://hooks.example.com/g1t",
4426 "events": [
4427 "*"
4428 ],
4429 "active": true,
4430 "secret_hint": "…9c2e",
4431 "created_by": "syntaqx",
4432 "created_at": "2026-10-04T15:42:07.318Z",
4433 "last_status": "delivered",
4434 "last_delivered_at": "2026-10-04T15:42:07.611Z"
4435 },
4436 "secret": "whsec_…"
4437 },
4438 "notes": "A ping is sent before the response, so `last_status` is usually set already. When g1t made the signing secret, `secret` holds it: it is shown only this once. See [webhooks](/guides/webhooks/)."
4439 },
4440 "update_webhook": {
4441 "params": {
4442 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
4443 },
4444 "request": {
4445 "active": false
4446 },
4447 "response": {
4448 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4449 "scope": "repo",
4450 "workspace": "flagon-io",
4451 "repo": "flagon-io/hello",
4452 "url": "https://hooks.example.com/g1t",
4453 "events": [
4454 "git.push",
4455 "pull.merged"
4456 ],
4457 "active": false,
4458 "secret_hint": "…9c2e",
4459 "created_by": "syntaqx",
4460 "created_at": "2026-10-04T15:42:07.318Z",
4461 "last_status": "delivered",
4462 "last_delivered_at": "2026-10-04T15:42:07.611Z"
4463 }
4464 },
4465 "update_webhook_for_workspace": {
4466 "params": {
4467 "workspace": "flagon-io",
4468 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
4469 },
4470 "request": {
4471 "active": false
4472 },
4473 "response": {
4474 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4475 "scope": "workspace",
4476 "workspace": "flagon-io",
4477 "repo": null,
4478 "url": "https://hooks.example.com/g1t",
4479 "events": [
4480 "git.push",
4481 "pull.merged"
4482 ],
4483 "active": false,
4484 "secret_hint": "…9c2e",
4485 "created_by": "syntaqx",
4486 "created_at": "2026-10-04T15:42:07.318Z",
4487 "last_status": "delivered",
4488 "last_delivered_at": "2026-10-04T15:42:07.611Z"
4489 }
4490 },
4491 "delete_webhook": {
4492 "params": {
4493 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
4494 },
4495 "response": true
4496 },
4497 "delete_webhook_for_workspace": {
4498 "params": {
4499 "workspace": "flagon-io",
4500 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
4501 },
4502 "response": true
4503 },
4504 "ping_webhook": {
4505 "params": {
4506 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
4507 },
4508 "response": {
4509 "id": "dlv_01kpx5p9v2j7k3m8n4p5q6r7st",
4510 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4511 "event_id": "",
4512 "event": "ping",
4513 "status": "delivered",
4514 "attempts": 1,
4515 "response_status": 200,
4516 "response_body": "ok",
4517 "error": null,
4518 "duration_ms": 184,
4519 "payload": "{\"hook\":{\"events\":[\"git.push\",\"pull.merged\"],\"id\":\"hk_01kpx5p9s4h0t1w6x8y2a3b4cd\",\"url\":\"https://hooks.example.com/g1t\"},\"message\":\"g1t will send this webhook's events here.\",\"time\":\"2026-10-04T16:01:12.440Z\",\"type\":\"ping\"}",
4520 "created_at": "2026-10-04T16:01:12.440Z",
4521 "delivered_at": "2026-10-04T16:01:12.631Z",
4522 "next_attempt_at": null
4523 },
4524 "notes": "`payload` is the JSON that was sent, as a string."
4525 },
4526 "ping_webhook_for_workspace": {
4527 "params": {
4528 "workspace": "flagon-io",
4529 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
4530 },
4531 "response": {
4532 "id": "dlv_01kpx5p9v2j7k3m8n4p5q6r7st",
4533 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4534 "event_id": "",
4535 "event": "ping",
4536 "status": "delivered",
4537 "attempts": 1,
4538 "response_status": 200,
4539 "response_body": "ok",
4540 "error": null,
4541 "duration_ms": 184,
4542 "payload": "{\"hook\":{\"events\":[\"git.push\",\"pull.merged\"],\"id\":\"hk_01kpx5p9s4h0t1w6x8y2a3b4cd\",\"url\":\"https://hooks.example.com/g1t\"},\"message\":\"g1t will send this webhook's events here.\",\"time\":\"2026-10-04T16:01:12.440Z\",\"type\":\"ping\"}",
4543 "created_at": "2026-10-04T16:01:12.440Z",
4544 "delivered_at": "2026-10-04T16:01:12.631Z",
4545 "next_attempt_at": null
4546 }
4547 },
4548 "list_webhook_deliveries": {
4549 "params": {
4550 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
4551 },
4552 "response": [
4553 {
4554 "id": "dlv_01kpx6a2b3c4d5e6f7g8h9j0kz",
4555 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4556 "event_id": "",
4557 "event": "ping",
4558 "status": "pending",
4559 "attempts": 1,
4560 "response_status": 503,
4561 "response_body": "Service Unavailable",
4562 "error": null,
4563 "duration_ms": 212,
4564 "payload": "{\"hook\":{\"events\":[\"git.push\",\"pull.merged\"],\"id\":\"hk_01kpx5p9s4h0t1w6x8y2a3b4cd\",\"url\":\"https://hooks.example.com/g1t\"},\"message\":\"g1t will send this webhook's events here.\",\"time\":\"2026-10-04T16:01:12.440Z\",\"type\":\"ping\"}",
4565 "created_at": "2026-10-04T16:20:03.100Z",
4566 "delivered_at": null,
4567 "next_attempt_at": "2026-10-04T16:21:03.312Z"
4568 },
4569 {
4570 "id": "dlv_01kpx5p9v2j7k3m8n4p5q6r7st",
4571 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4572 "event_id": "",
4573 "event": "ping",
4574 "status": "delivered",
4575 "attempts": 1,
4576 "response_status": 200,
4577 "response_body": "ok",
4578 "error": null,
4579 "duration_ms": 184,
4580 "payload": "{\"hook\":{\"events\":[\"git.push\",\"pull.merged\"],\"id\":\"hk_01kpx5p9s4h0t1w6x8y2a3b4cd\",\"url\":\"https://hooks.example.com/g1t\"},\"message\":\"g1t will send this webhook's events here.\",\"time\":\"2026-10-04T16:01:12.440Z\",\"type\":\"ping\"}",
4581 "created_at": "2026-10-04T16:01:12.440Z",
4582 "delivered_at": "2026-10-04T16:01:12.631Z",
4583 "next_attempt_at": null
4584 }
4585 ],
4586 "notes": "Returns at most 50, newest first. `status` is `pending`, `delivered` or `failed`; `next_attempt_at` is set while it is pending."
4587 },
4588 "list_webhook_deliveries_for_workspace": {
4589 "params": {
4590 "workspace": "flagon-io",
4591 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
4592 },
4593 "response": [
4594 {
4595 "id": "dlv_01kpx6a2b3c4d5e6f7g8h9j0kz",
4596 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4597 "event_id": "",
4598 "event": "ping",
4599 "status": "pending",
4600 "attempts": 1,
4601 "response_status": 503,
4602 "response_body": "Service Unavailable",
4603 "error": null,
4604 "duration_ms": 212,
4605 "payload": "{\"hook\":{\"events\":[\"git.push\",\"pull.merged\"],\"id\":\"hk_01kpx5p9s4h0t1w6x8y2a3b4cd\",\"url\":\"https://hooks.example.com/g1t\"},\"message\":\"g1t will send this webhook's events here.\",\"time\":\"2026-10-04T16:01:12.440Z\",\"type\":\"ping\"}",
4606 "created_at": "2026-10-04T16:20:03.100Z",
4607 "delivered_at": null,
4608 "next_attempt_at": "2026-10-04T16:21:03.312Z"
4609 },
4610 {
4611 "id": "dlv_01kpx5p9v2j7k3m8n4p5q6r7st",
4612 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4613 "event_id": "",
4614 "event": "ping",
4615 "status": "delivered",
4616 "attempts": 1,
4617 "response_status": 200,
4618 "response_body": "ok",
4619 "error": null,
4620 "duration_ms": 184,
4621 "payload": "{\"hook\":{\"events\":[\"git.push\",\"pull.merged\"],\"id\":\"hk_01kpx5p9s4h0t1w6x8y2a3b4cd\",\"url\":\"https://hooks.example.com/g1t\"},\"message\":\"g1t will send this webhook's events here.\",\"time\":\"2026-10-04T16:01:12.440Z\",\"type\":\"ping\"}",
4622 "created_at": "2026-10-04T16:01:12.440Z",
4623 "delivered_at": "2026-10-04T16:01:12.631Z",
4624 "next_attempt_at": null
4625 }
4626 ]
4627 },
4628 "redeliver_webhook": {
4629 "params": {
4630 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4631 "delivery": "dlv_01kpx6a2b3c4d5e6f7g8h9j0kz"
4632 },
4633 "response": {
4634 "id": "dlv_01kpx6c8d1e2f3g4h5j6k7m8np",
4635 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4636 "event_id": "",
4637 "event": "ping",
4638 "status": "delivered",
4639 "attempts": 1,
4640 "response_status": 200,
4641 "response_body": "ok",
4642 "error": null,
4643 "duration_ms": 171,
4644 "payload": "{\"hook\":{\"events\":[\"git.push\",\"pull.merged\"],\"id\":\"hk_01kpx5p9s4h0t1w6x8y2a3b4cd\",\"url\":\"https://hooks.example.com/g1t\"},\"message\":\"g1t will send this webhook's events here.\",\"time\":\"2026-10-04T16:01:12.440Z\",\"type\":\"ping\"}",
4645 "created_at": "2026-10-04T16:25:40.007Z",
4646 "delivered_at": "2026-10-04T16:25:40.178Z",
4647 "next_attempt_at": null
4648 },
4649 "notes": "The response is the new delivery."
4650 },
4651 "redeliver_webhook_for_workspace": {
4652 "params": {
4653 "workspace": "flagon-io",
4654 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4655 "delivery": "dlv_01kpx6a2b3c4d5e6f7g8h9j0kz"
4656 },
4657 "response": {
4658 "id": "dlv_01kpx6c8d1e2f3g4h5j6k7m8np",
4659 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
4660 "event_id": "",
4661 "event": "ping",
4662 "status": "delivered",
4663 "attempts": 1,
4664 "response_status": 200,
4665 "response_body": "ok",
4666 "error": null,
4667 "duration_ms": 171,
4668 "payload": "{\"hook\":{\"events\":[\"git.push\",\"pull.merged\"],\"id\":\"hk_01kpx5p9s4h0t1w6x8y2a3b4cd\",\"url\":\"https://hooks.example.com/g1t\"},\"message\":\"g1t will send this webhook's events here.\",\"time\":\"2026-10-04T16:01:12.440Z\",\"type\":\"ping\"}",
4669 "created_at": "2026-10-04T16:25:40.007Z",
4670 "delivered_at": "2026-10-04T16:25:40.178Z",
4671 "next_attempt_at": null
4672 }
4673 },
4674 "list_integrations": {
4675 "params": {
4676 "workspace": "flagon-io"
4677 },
4678 "response": [
4679 {
4680 "id": "con_01kpx4n8r3g9s0v5w7x1z2a3bc",
4681 "workspace": "flagon-io",
4682 "provider": "jira",
4683 "kind": "tracker",
4684 "name": "Jira",
4685 "config": {
4686 "write_back": true,
4687 "site": "https://acme.atlassian.net",
4688 "email": "syntaqx@example.com",
4689 "keys": [
4690 "TECH"
4691 ]
4692 },
4693 "secret_hint": "…x7Qe",
4694 "webhook_url": null,
4695 "created_by": "syntaqx",
4696 "created_at": "2026-10-04T15:42:07.318Z",
4697 "last_used_at": null,
4698 "last_error": null,
4699 "models": []
4700 }
4701 ],
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4702 "notes": "`kind` is `alerts` or `tracker`. `secret_hint` shows the end of the secret; the secret itself is never returned. `webhook_url` is where an alert source sends its alerts."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4703 },
4704 "connect_integration": {
4705 "params": {
4706 "workspace": "flagon-io"
4707 },
4708 "request": {
4709 "provider": "webhook",
4710 "config": {
4711 "repo": "flagon-io/hello",
4712 "label": "bug"
4713 }
4714 },
4715 "response": {
4716 "connection": {
4717 "id": "con_01kpx4n8r3g9s0v5w7x1z2a3bd",
4718 "workspace": "flagon-io",
4719 "provider": "webhook",
4720 "kind": "alerts",
4721 "name": "Webhook",
4722 "config": {
4723 "repo": "flagon-io/hello",
4724 "label": "bug",
4725 "write_back": true
4726 },
4727 "secret_hint": null,
4728 "webhook_url": "https://api.g1t.sh/hooks/con_01kpx4n8r3g9s0v5w7x1z2a3bd",
4729 "created_by": "syntaqx",
4730 "created_at": "2026-10-04T15:42:07.318Z",
4731 "last_used_at": null,
4732 "last_error": null,
4733 "models": []
4734 },
4735 "signing_secret": "g1ts_9f2c4a7e1b0d3c6f8a2e5b7d9c1f4a6e8b0d2c4f6a8e1b3d"
4736 },
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4737 "notes": "`signing_secret` is set only when g1t made it, for `datadog` and `webhook`, and is shown only this once. See [integrations](/guides/integrations/)."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4738 },
AI Gateway: OpenAI's format, open models, and your own providers4739 "update_integration": {
4740 "params": {
4741 "workspace": "flagon-io",
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4742 "id": "con_01kpx4n8r3g9s0v5w7x1z2a3bc"
AI Gateway: OpenAI's format, open models, and your own providers4743 },
4744 "request": {
4745 "config": {
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4746 "site": "https://acme.atlassian.net",
4747 "email": "syntaqx@example.com",
4748 "keys": [
4749 "TECH",
4750 "OPS"
Merge main (membership, two-factor, GitHub repo roles) into tokens4751 ]
AI Gateway: OpenAI's format, open models, and your own providers4752 },
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4753 "secret": "atlassian-api-token"
AI Gateway: OpenAI's format, open models, and your own providers4754 },
4755 "response": {
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4756 "id": "con_01kpx4n8r3g9s0v5w7x1z2a3bc",
AI Gateway: OpenAI's format, open models, and your own providers4757 "workspace": "flagon-io",
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4758 "provider": "jira",
4759 "kind": "tracker",
4760 "name": "Jira",
AI Gateway: OpenAI's format, open models, and your own providers4761 "config": {
4762 "write_back": true,
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4763 "site": "https://acme.atlassian.net",
4764 "email": "syntaqx@example.com",
4765 "keys": [
4766 "TECH",
4767 "OPS"
Merge main (membership, two-factor, GitHub repo roles) into tokens4768 ]
AI Gateway: OpenAI's format, open models, and your own providers4769 },
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4770 "secret_hint": "…oken",
AI Gateway: OpenAI's format, open models, and your own providers4771 "webhook_url": null,
4772 "created_by": "syntaqx",
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4773 "created_at": "2026-10-04T15:42:07.318Z",
AI Gateway: OpenAI's format, open models, and your own providers4774 "last_used_at": "2026-10-07T14:00:02.000Z",
4775 "last_error": null,
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4776 "models": []
AI Gateway: OpenAI's format, open models, and your own providers4777 },
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4778 "notes": "The secret is write-only: it is kept encrypted and only its last four characters come back, as `secret_hint`. Use it to rotate a key."
AI Gateway: OpenAI's format, open models, and your own providers4779 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4780 "disconnect_integration": {
4781 "params": {
4782 "workspace": "flagon-io",
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4783 "id": "con_01kpx4n8r3g9s0v5w7x1z2a3bd"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4784 },
4785 "response": true
4786 },
4787 "test_integration": {
4788 "params": {
4789 "workspace": "flagon-io",
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4790 "id": "con_01kpx4n8r3g9s0v5w7x1z2a3bc"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4791 },
4792 "response": {
4793 "ok": true,
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.4794 "message": "Connected to https://acme.atlassian.net as Chase Pierce."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4795 },
4796 "notes": "Credentials that do not work still answer `200`, with `ok` false and `message` saying what went wrong."
Merge remote-tracking branch 'origin/claude/cool-newton-7nm8r9' into claude/cool-newton-7nm8r94797 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4798 "get_context": {
4799 "query": {
4800 "reference": "TECH-1234"
4801 },
4802 "response": {
4803 "provider": "jira",
4804 "key": "TECH-1234",
4805 "title": "Checkout fails for EU cards",
4806 "url": "https://acme.atlassian.net/browse/TECH-1234",
4807 "status": "In Progress",
4808 "body": "Customers with 3DS cards see a 500 at /pay.",
4809 "fetched_at": "2026-10-04T15:42:07.318Z"
4810 }
4811 },
4812 "import_issue": {
4813 "request": {
4814 "reference": "TECH-1234"
4815 },
4816 "response": {
4817 "number": 42,
4818 "item": {
4819 "provider": "jira",
4820 "key": "TECH-1234",
4821 "title": "Checkout fails for EU cards",
4822 "url": "https://acme.atlassian.net/browse/TECH-1234",
4823 "status": "In Progress",
4824 "body": "Customers with 3DS cards see a 500 at /pay.",
4825 "fetched_at": "2026-10-04T15:42:07.318Z"
4826 },
4827 "created": true
4828 },
4829 "notes": "`created` is false when the ticket was imported before; `number` is then that issue."
4830 },
4831 "remember": {
4832 "request": {
4833 "text": "The tests need TZ=UTC or the date tests fail.",
4834 "scope": "project",
4835 "kind": "gotcha",
4836 "from_number": 14
4837 },
4838 "response": {
4839 "id": "mem_01m43v8q2w3e4r5t6y7u8i9o0p",
4840 "scope": "project",
4841 "workspace": "flagon-io",
4842 "repo": {
4843 "namespace": "flagon-io",
4844 "name": "hello"
4845 },
4846 "text": "The tests need TZ=UTC or the date tests fail.",
4847 "kind": "gotcha",
4848 "source": {
4849 "kind": "run",
4850 "run_id": "arn_01m43v2c1p9k8d7e6f5a4b3c2d",
4851 "repo": {
4852 "namespace": "flagon-io",
4853 "name": "hello"
4854 },
4855 "number": 14
4856 },
4857 "created_by": "g1t",
4858 "pinned": false,
4859 "created_at": "2026-10-01T18:40:12.000Z",
4860 "updated_at": "2026-10-01T18:40:12.000Z",
4861 "last_used_at": null
4862 },
4863 "notes": "Text that looks like a key, a token or a password is refused with `invalid`: memory is read by every agent in the workspace. Saving the same text again in the same scope returns the memory already kept."
4864 },
4865 "recall": {
4866 "query": {
4867 "q": "pnpm"
4868 },
4869 "response": {
4870 "project": [],
4871 "workspace": [
4872 {
4873 "id": "mem_01m43t0a1s2d3f4g5h6j7k8l9z",
4874 "scope": "workspace",
4875 "workspace": "flagon-io",
4876 "repo": null,
4877 "text": "We use pnpm everywhere, never npm or yarn.",
4878 "kind": "convention",
4879 "source": {
4880 "kind": "person",
4881 "run_id": null,
4882 "repo": null,
4883 "number": null
4884 },
4885 "created_by": "syntaqx",
4886 "pinned": true,
4887 "created_at": "2026-10-01T18:40:12.000Z",
4888 "updated_at": "2026-10-01T18:40:12.000Z",
4889 "last_used_at": null
4890 }
4891 ]
4892 },
4893 "notes": "Anyone who can read the repository gets its project memory; `workspace` is filled only for members of the workspace, and is empty for anyone else. Each memory returned is marked used, which keeps it near the front of what agents are given."
4894 },
4895 "search": {
4896 "query": {
4897 "q": "parse_query language:rust repo:acme/web",
4898 "type": "code"
4899 },
4900 "response": {
4901 "query": "parse_query repo:acme/web language:rust",
4902 "type": "code",
4903 "counts": {
4904 "repositories": 0,
4905 "code": 2,
4906 "issues": 0,
4907 "pulls": 0,
4908 "people": 0
4909 },
4910 "page": 1,
4911 "per_page": 20,
4912 "more": false,
4913 "hits": [
4914 {
4915 "kind": "code",
4916 "title": "src/search/query.rs",
4917 "url": "/acme/web/blob/main/src/search/query.rs#L42",
4918 "repo": "acme/web",
4919 "private": false,
4920 "description": null,
4921 "snippet": [],
4922 "lines": [
4923 {
4924 "number": 41,
4925 "parts": [
4926 {
4927 "text": "/// Reads a query typed into the search box.",
4928 "highlight": false
4929 }
4930 ]
4931 },
4932 {
4933 "number": 42,
4934 "parts": [
4935 {
4936 "text": "pub fn ",
4937 "highlight": false
4938 },
4939 {
4940 "text": "parse_query",
4941 "highlight": true
4942 },
4943 {
4944 "text": "(text: &str) -> Query {",
4945 "highlight": false
4946 }
4947 ]
4948 },
4949 {
4950 "number": 43,
4951 "parts": [
4952 {
4953 "text": " let mut query = Query::default();",
4954 "highlight": false
4955 }
4956 ]
4957 }
4958 ],
4959 "path": "src/search/query.rs",
4960 "language": "rust",
4961 "ref": "main",
4962 "number": null,
4963 "state": null,
4964 "author": null,
4965 "requested_by": null,
4966 "labels": [],
4967 "topics": [],
4968 "slug": null,
4969 "avatar": null,
4970 "updated_at": null
4971 }
4972 ],
4973 "notes": []
4974 },
4975 "notes": "`q` takes words, `\"exact phrases\"`, `-words` to leave out, and qualifiers: `repo:owner/name`, `org:` (or `workspace:`), `language:`, `path:` (a glob when it has `*`), `is:issue`, `is:pr`, `is:open`, `is:closed`, `is:merged`, `is:draft`, `is:public`, `is:private`, `author:` and `label:`; most can be left out with a leading `-`, as in `-label:wontfix`. `type` is `repositories`, `code`, `issues`, `pulls` or `people`; without it, `path:` means code, `is:pr` pull requests, `is:open`, `author:` or `label:` issues, and anything else repositories. `counts` says how many results each type has, up to 1,000. Each result's `snippet` (or, for code, each of its `lines`) is a list of parts, `highlight` true where the query matched. Code is searched on default branches and needs a word of three characters or more, unless the query names a `repo:`. Public content is returned to anyone, without a token; private content only to people who can read it (members of its workspace, and people given a role on the repository), checked when the search runs, so a repository made private, or a role taken away, stops appearing at once. A g1t agent's token can search too. An issue or pull request g1t opened has `author` `g1t` and `requested_by` the person it was for; `author:` matches the author."
4976 },
4977 "list_collaborators": {
4978 "response": {
4979 "repo": "flagon-io/hello",
4980 "base_permission": "write",
4981 "people": [
4982 {
4983 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar4984 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4985 "name": "Chase Pierce",
4986 "avatar": null,
4987 "role": "admin",
4988 "source": "owner",
4989 "direct": null,
4990 "workspace_role": "owner"
4991 },
4992 {
4993 "username": "linus",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar4994 "display_username": "linus",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person4995 "name": null,
4996 "avatar": null,
4997 "role": "maintain",
4998 "source": "direct",
4999 "direct": "maintain",
5000 "workspace_role": "member"
5001 },
5002 {
5003 "username": "grace",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar5004 "display_username": "grace",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person5005 "name": "Grace Hopper",
5006 "avatar": null,
5007 "role": "write",
5008 "source": "base",
5009 "direct": null,
5010 "workspace_role": "member"
5011 },
5012 {
5013 "username": "ada",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar5014 "display_username": "Ada",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person5015 "name": "Ada Lovelace",
5016 "avatar": null,
5017 "role": "triage",
5018 "source": "direct",
5019 "direct": "triage",
5020 "workspace_role": null
5021 }
5022 ],
5023 "invitations": [
5024 {
5025 "id": "rin_01kp3c4d5e6f7g8h9j0k1m2n3p",
5026 "repo": "flagon-io/hello",
5027 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
5028 "invitee": "alan",
5029 "email": null,
5030 "role": "write",
5031 "invited_by": "syntaqx",
5032 "inviter_avatar": null,
5033 "status": "pending",
5034 "created_at": "2026-10-05T17:00:00.000Z",
5035 "expires_at": "2026-10-12T17:00:00.000Z"
5036 },
5037 {
5038 "id": "rin_01kp3d7e8f9g0h1j2k3m4n5p6q",
5039 "repo": "flagon-io/hello",
5040 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
5041 "invitee": null,
5042 "email": "joan@example.com",
5043 "role": "read",
5044 "invited_by": "syntaqx",
5045 "inviter_avatar": null,
5046 "status": "pending",
5047 "created_at": "2026-10-05T17:00:00.000Z",
5048 "expires_at": "2026-10-12T17:00:00.000Z"
5049 }
5050 ],
5051 "viewer_role": "admin",
5052 "can_manage": true
5053 },
5054 "notes": "Owners are listed with `source` `owner`, members with the base permission with `base`, and anyone given a role on this repository with `direct`; `role` is the highest of these, and `direct` shows a direct role even when ownership or the base permission gives more. `workspace_role` null means an outside collaborator. Anyone can read a public repository, which is not listed. `invitations` is empty unless you have the Admin role (`can_manage`). Refused with `403` below the Write role, and `404` for a private repository you cannot see. See [Access and roles](/guides/access-and-roles/)."
5055 },
5056 "add_collaborator": {
5057 "request": {
5058 "invitee": "ada",
5059 "role": "triage"
5060 },
5061 "response": {
5062 "result": "invited",
5063 "invitation": {
5064 "id": "rin_01kp3e9f0g1h2j3k4m5n6p7q8r",
5065 "repo": "flagon-io/hello",
5066 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
5067 "invitee": "ada",
5068 "email": null,
5069 "role": "triage",
5070 "invited_by": "syntaqx",
5071 "inviter_avatar": null,
5072 "status": "pending",
5073 "created_at": "2026-10-05T17:00:00.000Z",
5074 "expires_at": "2026-10-12T17:00:00.000Z"
5075 }
5076 },
Merge site-audit: SEO routes, analytics with consent first in Europe, security page, founder and X account, docs header; the tour opens on the pull request and leads with Code, on the real shell, with Agents and Docs working today5077 "notes": "`invitee` is a username or an email address. A member of the workspace answers `{\"result\": \"granted\", \"collaborator\": {…}}` with the role already given, shown as list_collaborators shows a person. Anyone else answers `{\"result\": \"invited\", \"invitation\": {…}}`: the invitation is emailed and waits 7 days, and the role is theirs once they accept it. An email address without an account gets an invitation with `email` set and `invitee` null, and an invite that makes the account and accepts in one step. Refused with `404` when no account has that username, `409` when they already have a role of their own or a pending invitation (change it with update_collaborator), and `403` without the Admin role, from an agent's or a workspace's token, or when the person does not meet what the workspace asks of everyone with access. A `collaborator_added` webhook event is sent once they have the role. See [Access and roles](/guides/access-and-roles/). On a free workspace, inviting anyone who is not a member answers `402` with `payment_required` until it starts the g1t plan."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person5078 },
5079 "update_collaborator": {
5080 "params": {
5081 "owner": "flagon-io",
5082 "name": "hello",
5083 "username": "ada"
5084 },
5085 "request": {
5086 "role": "write"
5087 },
5088 "response": {
5089 "username": "ada",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar5090 "display_username": "Ada",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person5091 "name": "Ada Lovelace",
5092 "avatar": null,
5093 "role": "write",
5094 "source": "direct",
5095 "direct": "write",
5096 "workspace_role": null
5097 },
5098 "notes": "Changes a direct role, or the role of the person's pending invitation. `404` when they have neither: an owner's Admin and a member's base permission are not changed here. Changing a direct role sends the `repo.collaborator_role_changed` webhook event. See [Access and roles](/guides/access-and-roles/)."
5099 },
5100 "remove_collaborator": {
5101 "params": {
5102 "owner": "flagon-io",
5103 "name": "hello",
5104 "username": "ada"
5105 },
5106 "response": true,
5107 "notes": "Takes away a direct role. Anyone may remove their own, to leave a repository. `404` when the person has no role of their own on it. A member keeps the workspace's base permission. Sends the `repo.collaborator_removed` webhook event. See [Access and roles](/guides/access-and-roles/)."
5108 },
5109 "get_collaborator_permission": {
5110 "params": {
5111 "owner": "flagon-io",
5112 "name": "hello",
5113 "username": "ada"
5114 },
5115 "response": {
5116 "username": "ada",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar5117 "display_username": "Ada",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person5118 "role": "triage",
5119 "source": "direct",
5120 "capabilities": [
5121 "read",
5122 "participate",
5123 "triage"
5124 ]
5125 },
5126 "notes": "`capabilities` lists what the role allows, in the table's order: `read`, `participate`, `triage`, `push`, `merge`, `run`, `manage_settings`, `manage_protection`, `manage_integrations`, `manage_access`, `administer` and `delete` (which also takes an owner of the workspace). `role` and `source` are null, and `capabilities` empty, for someone with no role. Refused with `403` below the Write role, unless you ask about yourself. See [Access and roles](/guides/access-and-roles/)."
5127 },
5128 "list_repo_invitations": {
5129 "response": [
5130 {
5131 "id": "rin_01kp3c4d5e6f7g8h9j0k1m2n3p",
5132 "repo": "flagon-io/hello",
5133 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
5134 "invitee": "alan",
5135 "email": null,
5136 "role": "write",
5137 "invited_by": "syntaqx",
5138 "inviter_avatar": null,
5139 "status": "pending",
5140 "created_at": "2026-10-05T17:00:00.000Z",
5141 "expires_at": "2026-10-12T17:00:00.000Z"
5142 },
5143 {
5144 "id": "rin_01kp3d7e8f9g0h1j2k3m4n5p6q",
5145 "repo": "flagon-io/hello",
5146 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
5147 "invitee": null,
5148 "email": "joan@example.com",
5149 "role": "read",
5150 "invited_by": "syntaqx",
5151 "inviter_avatar": null,
5152 "status": "pending",
5153 "created_at": "2026-10-05T17:00:00.000Z",
5154 "expires_at": "2026-10-12T17:00:00.000Z"
5155 }
5156 ],
5157 "notes": "Pending invitations only, newest first. `email` is set for an invitation sent to an address that had no account. Refused with `403` without the Admin role. See [Access and roles](/guides/access-and-roles/)."
5158 },
5159 "revoke_repo_invitation": {
5160 "params": {
5161 "owner": "flagon-io",
5162 "name": "hello",
5163 "id": "rin_01kp3c4d5e6f7g8h9j0k1m2n3p"
5164 },
5165 "response": {
5166 "id": "rin_01kp3c4d5e6f7g8h9j0k1m2n3p",
5167 "repo": "flagon-io/hello",
5168 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
5169 "invitee": "alan",
5170 "email": null,
5171 "role": "write",
5172 "invited_by": "syntaqx",
5173 "inviter_avatar": null,
5174 "status": "revoked",
5175 "created_at": "2026-10-05T17:00:00.000Z",
5176 "expires_at": "2026-10-12T17:00:00.000Z"
5177 },
5178 "notes": "`404` when there is no pending invitation with that id on this repository."
5179 },
5180 "list_my_repo_invitations": {
5181 "response": [
5182 {
5183 "id": "rin_01kp3e9f0g1h2j3k4m5n6p7q8r",
5184 "repo": "flagon-io/hello",
5185 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
5186 "invitee": "ada",
5187 "email": null,
5188 "role": "triage",
5189 "invited_by": "syntaqx",
5190 "inviter_avatar": null,
5191 "status": "pending",
5192 "created_at": "2026-10-05T17:00:00.000Z",
5193 "expires_at": "2026-10-12T17:00:00.000Z"
5194 }
5195 ],
5196 "notes": "Invitations sent to your username, and to any of your confirmed addresses before you had an account, newest first. Accept one with `PATCH /user/repository_invitations/{id}`, or decline it with `DELETE`. Expired and answered ones are left out."
5197 },
5198 "accept_repo_invitation": {
5199 "params": {
5200 "id": "rin_01kp3e9f0g1h2j3k4m5n6p7q8r"
5201 },
5202 "response": {
5203 "id": "rin_01kp3e9f0g1h2j3k4m5n6p7q8r",
5204 "repo": "flagon-io/hello",
5205 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
5206 "invitee": "ada",
5207 "email": null,
5208 "role": "triage",
5209 "invited_by": "syntaqx",
5210 "inviter_avatar": null,
5211 "status": "accepted",
5212 "created_at": "2026-10-05T17:00:00.000Z",
5213 "expires_at": "2026-10-12T17:00:00.000Z"
5214 },
5215 "notes": "The role is yours at once. `404` when you have no pending invitation with that id (it may have expired or been revoked), and `403` when your account does not meet what the workspace asks of everyone with access, such as two-factor authentication, with a message that says what to turn on. See [Access and roles](/guides/access-and-roles/)."
5216 },
5217 "decline_repo_invitation": {
5218 "params": {
5219 "id": "rin_01kp3e9f0g1h2j3k4m5n6p7q8r"
5220 },
5221 "response": {
5222 "id": "rin_01kp3e9f0g1h2j3k4m5n6p7q8r",
5223 "repo": "flagon-io/hello",
5224 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
5225 "invitee": "ada",
5226 "email": null,
5227 "role": "triage",
5228 "invited_by": "syntaqx",
5229 "inviter_avatar": null,
5230 "status": "declined",
5231 "created_at": "2026-10-05T17:00:00.000Z",
5232 "expires_at": "2026-10-12T17:00:00.000Z"
5233 },
5234 "notes": "`404` when you have no pending invitation with that id."
5235 },
5236 "set_base_permission": {
5237 "params": {
5238 "workspace": "flagon-io"
5239 },
5240 "request": {
5241 "base_permission": "read"
5242 },
5243 "response": {
5244 "workspace": "flagon-io",
5245 "base_permission": "read"
5246 },
5247 "notes": "`base_permission` is `none`, `read`, `write` (the default) or `admin`. Owners keep Admin, and a role given on a repository directly still counts where it is higher. Refused with `403` for anyone but an owner signed in as a person. See [Access and roles](/guides/access-and-roles/)."
5248 },
5249 "list_outside_collaborators": {
5250 "params": {
5251 "workspace": "flagon-io"
5252 },
5253 "response": [
5254 {
5255 "username": "ada",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar5256 "display_username": "Ada",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person5257 "name": "Ada Lovelace",
5258 "avatar": null,
5259 "repos": [
5260 {
5261 "repo": "flagon-io/docs",
5262 "role": "write"
5263 },
5264 {
5265 "repo": "flagon-io/hello",
5266 "role": "triage"
5267 }
5268 ]
5269 }
5270 ],
5271 "notes": "By username, each with the repositories they have a role on. Refused with `403` for anyone but an owner. See [Access and roles](/guides/access-and-roles/)."
5272 },
Merge branch 'worktree-agent-a5a5de74d8863d554' into worktree-agent-a16631325aecf58ca5273 "list_deploy_keys": {
5274 "params": {
5275 "owner": "flagon-io",
5276 "name": "hello"
5277 },
5278 "response": [
5279 {
5280 "id": "dk_01kp3f2g3h4j5k6m7n8p9q0r1s",
5281 "title": "Docs build",
5282 "key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE",
5283 "fingerprint": "SHA256:ubxEl41fJDnUoEPKSZE0y6R0ZjjAQf/wV5vZgeBV8qk",
5284 "read_only": true,
5285 "created_at": "2026-10-06T09:12:00.000Z",
5286 "created_by": "syntaqx",
5287 "last_used_at": "2026-10-08T07:40:00.000Z"
5288 },
5289 {
5290 "id": "dk_01kp3g4h5j6k7m8n9p0q1r2s3t",
5291 "title": "Release bot",
5292 "key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ8Vq2nLr5Xw0sT3yK7mP1cH4dF6gB9aE2uZ5oN8iR0j",
5293 "fingerprint": "SHA256:2h7VyLkcqBHwKVtfFUchGsE5pDwpgBPV/VvJgYiS27M",
5294 "read_only": false,
5295 "created_at": "2026-10-07T15:30:00.000Z",
5296 "created_by": "syntaqx",
5297 "last_used_at": null
5298 }
5299 ],
5300 "notes": "Oldest first. `read_only` false means the key may push, workflow files included. `last_used_at` is when it last signed in over SSH, to within 5 minutes, and null when it never has. Refused with `403` without the Admin role, and for an agent's token or a workspace token without Admin; `404` for a private repository you cannot see. See [Deploy keys](/guides/git/#deploy-keys)."
5301 },
5302 "get_deploy_key": {
5303 "params": {
5304 "owner": "flagon-io",
5305 "name": "hello",
5306 "id": "dk_01kp3f2g3h4j5k6m7n8p9q0r1s"
5307 },
5308 "response": {
5309 "id": "dk_01kp3f2g3h4j5k6m7n8p9q0r1s",
5310 "title": "Docs build",
5311 "key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE",
5312 "fingerprint": "SHA256:ubxEl41fJDnUoEPKSZE0y6R0ZjjAQf/wV5vZgeBV8qk",
5313 "read_only": true,
5314 "created_at": "2026-10-06T09:12:00.000Z",
5315 "created_by": "syntaqx",
5316 "last_used_at": "2026-10-08T07:40:00.000Z"
5317 },
5318 "notes": "`404` when the repository has no deploy key with that id."
5319 },
5320 "create_deploy_key": {
5321 "params": {
5322 "owner": "flagon-io",
5323 "name": "hello"
5324 },
5325 "request": {
5326 "title": "Release bot",
5327 "key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ8Vq2nLr5Xw0sT3yK7mP1cH4dF6gB9aE2uZ5oN8iR0j release@ci",
5328 "read_only": false
5329 },
5330 "response": {
5331 "id": "dk_01kp3g4h5j6k7m8n9p0q1r2s3t",
5332 "title": "Release bot",
5333 "key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ8Vq2nLr5Xw0sT3yK7mP1cH4dF6gB9aE2uZ5oN8iR0j",
5334 "fingerprint": "SHA256:2h7VyLkcqBHwKVtfFUchGsE5pDwpgBPV/VvJgYiS27M",
5335 "read_only": false,
5336 "created_at": "2026-10-07T15:30:00.000Z",
5337 "created_by": "syntaqx",
5338 "last_used_at": null
5339 },
5340 "notes": "`read_only` is true unless you send false. The key's comment is not kept; it becomes the title when you send none. Refused with `400` for a line that is not an OpenSSH public key, `409` with `Key is already in use.` when the key is registered already (as anyone's SSH key or as a deploy key anywhere), `409` past 100 keys, and `403` without the Admin role, from an agent's token, from a workspace token without Admin, or before your email address is confirmed. Recorded in the workspace's audit log as `repo.deploy_key_added`."
5341 },
5342 "delete_deploy_key": {
5343 "params": {
5344 "owner": "flagon-io",
5345 "name": "hello",
5346 "id": "dk_01kp3g4h5j6k7m8n9p0q1r2s3t"
5347 },
5348 "response": true,
5349 "notes": "The key stops working at once. `404` when the repository has no deploy key with that id. Recorded in the workspace's audit log as `repo.deploy_key_removed`."
5350 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person5351 "list_teams": {
5352 "params": {
5353 "workspace": "flagon-io"
5354 },
5355 "query": {
5356 "q": "back"
5357 },
5358 "response": [
5359 {
5360 "id": "team_01m52k8d3f7h1k5n9r3v7z1c5g",
5361 "workspace": "flagon-io",
5362 "slug": "backend",
5363 "name": "Backend",
5364 "description": "The API and the services behind it.",
5365 "visibility": "visible",
5366 "parent": {
5367 "slug": "engineering",
5368 "name": "Engineering"
5369 },
5370 "notify": true,
5371 "review_assignment": {
5372 "enabled": false,
5373 "algorithm": "round_robin",
5374 "count": 1,
5375 "skip_busy": false,
5376 "busy_at": 5,
5377 "include_child_teams": false,
5378 "excluded": [],
5379 "notify_team": false
5380 },
5381 "members_count": 4,
5382 "repos_count": 2,
5383 "child_teams_count": 1,
5384 "viewer_role": "maintainer",
5385 "can_manage": true,
5386 "created_at": "2026-10-06T15:02:11.480Z",
5387 "updated_at": "2026-10-06T15:02:11.480Z"
5388 }
5389 ],
5390 "notes": "Teams you are in come first, then the rest by name. A secret team is listed only for its own people and the workspace's owners. `review_assignment` is what happens when the team is asked to review: see [`set_team_review_assignment`](/reference/api/teams/set-team-review-assignment/). `403` for anyone who is not a member of the workspace. See [Teams](/guides/teams/)."
5391 },
5392 "create_team": {
5393 "params": {
5394 "workspace": "flagon-io"
5395 },
5396 "request": {
5397 "name": "Backend",
5398 "description": "The API and the services behind it.",
5399 "visibility": "visible",
5400 "parent": "engineering",
5401 "members": [
5402 "ana"
5403 ]
5404 },
5405 "response": {
5406 "id": "team_01m52k8d3f7h1k5n9r3v7z1c5g",
5407 "workspace": "flagon-io",
5408 "slug": "backend",
5409 "name": "Backend",
5410 "description": "The API and the services behind it.",
5411 "visibility": "visible",
5412 "parent": {
5413 "slug": "engineering",
5414 "name": "Engineering"
5415 },
5416 "notify": true,
5417 "review_assignment": {
5418 "enabled": false,
5419 "algorithm": "round_robin",
5420 "count": 1,
5421 "skip_busy": false,
5422 "busy_at": 5,
5423 "include_child_teams": false,
5424 "excluded": [],
5425 "notify_team": false
5426 },
5427 "members_count": 2,
5428 "repos_count": 0,
5429 "child_teams_count": 0,
5430 "viewer_role": "maintainer",
5431 "can_manage": true,
5432 "created_at": "2026-10-06T15:02:11.480Z",
5433 "updated_at": "2026-10-06T15:02:11.480Z"
5434 },
5435 "notes": "You become the team's maintainer. Refused with `403` for a member when the workspace's `team_creation` is `owners`. `slug` is made from `name` when left out (`Web & Mobile` becomes `web-mobile`), and `409` says one is taken. A workspace has at most 500 teams, nested at most 8 deep; `name` is at most 80 characters and `description` 280. A `secret` team cannot have a parent or child teams. Refused with `403` for an agent's or a workspace's token. See [Teams](/guides/teams/)."
5436 },
5437 "get_team": {
5438 "params": {
5439 "workspace": "flagon-io",
5440 "team": "backend"
5441 },
5442 "response": {
5443 "id": "team_01m52k8d3f7h1k5n9r3v7z1c5g",
5444 "workspace": "flagon-io",
5445 "slug": "backend",
5446 "name": "Backend",
5447 "description": "The API and the services behind it.",
5448 "visibility": "visible",
5449 "parent": {
5450 "slug": "engineering",
5451 "name": "Engineering"
5452 },
5453 "notify": true,
5454 "review_assignment": {
5455 "enabled": false,
5456 "algorithm": "round_robin",
5457 "count": 1,
5458 "skip_busy": false,
5459 "busy_at": 5,
5460 "include_child_teams": false,
5461 "excluded": [],
5462 "notify_team": false
5463 },
5464 "members_count": 4,
5465 "repos_count": 2,
5466 "child_teams_count": 1,
5467 "viewer_role": "maintainer",
5468 "can_manage": true,
5469 "created_at": "2026-10-06T15:02:11.480Z",
5470 "updated_at": "2026-10-06T15:02:11.480Z"
5471 },
5472 "notes": "`404` for a team that does not exist, or a secret one you are not in, unless you are an owner."
5473 },
5474 "update_team": {
5475 "params": {
5476 "workspace": "flagon-io",
5477 "team": "backend"
5478 },
5479 "request": {
5480 "description": "The API, the services behind it, and their on-call.",
5481 "visibility": "secret",
5482 "parent": ""
5483 },
5484 "response": {
5485 "id": "team_01m52k8d3f7h1k5n9r3v7z1c5g",
5486 "workspace": "flagon-io",
5487 "slug": "backend",
5488 "name": "Backend",
5489 "description": "The API, the services behind it, and their on-call.",
5490 "visibility": "secret",
5491 "parent": null,
5492 "notify": true,
5493 "review_assignment": {
5494 "enabled": false,
5495 "algorithm": "round_robin",
5496 "count": 1,
5497 "skip_busy": false,
5498 "busy_at": 5,
5499 "include_child_teams": false,
5500 "excluded": [],
5501 "notify_team": false
5502 },
5503 "members_count": 4,
5504 "repos_count": 2,
5505 "child_teams_count": 1,
5506 "viewer_role": "maintainer",
5507 "can_manage": true,
5508 "created_at": "2026-10-06T15:02:11.480Z",
5509 "updated_at": "2026-10-07T09:41:52.006Z"
5510 },
5511 "notes": "Only the fields given change. `parent` set to `\"\"` takes the team out from under its parent; a team cannot be nested under itself or one of its own child teams. A new `slug` changes how it is mentioned: `@flagon-io/backend` no longer reaches it. `review_assignment` takes the fields [`set_team_review_assignment`](/reference/api/teams/set-team-review-assignment/) does. Owners of the workspace and the team's maintainers (`403` otherwise)."
5512 },
5513 "delete_team": {
5514 "params": {
5515 "workspace": "flagon-io",
5516 "team": "backend"
5517 },
5518 "response": true,
5519 "notes": "Its child teams move up to its parent, or to the top when it has none. The roles it gave on repositories are taken away, and it is no longer asked to review. Owners of the workspace and the team's maintainers (`403` otherwise)."
5520 },
5521 "list_team_members": {
5522 "params": {
5523 "workspace": "flagon-io",
5524 "team": "backend"
5525 },
5526 "query": {
5527 "include_child_teams": "true"
5528 },
5529 "response": [
5530 {
5531 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar5532 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person5533 "name": "Chase Pierce",
5534 "avatar": null,
5535 "role": "maintainer",
5536 "via": null
5537 },
5538 {
5539 "username": "ana",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar5540 "display_username": "Ana",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person5541 "name": "Ana Lima",
5542 "avatar": null,
5543 "role": "member",
5544 "via": null
5545 },
5546 {
5547 "username": "bo",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar5548 "display_username": "bo",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person5549 "name": null,
5550 "avatar": null,
5551 "role": "member",
5552 "via": "payments"
5553 }
5554 ],
5555 "notes": "Maintainers come first, then members, each by username. With `include_child_teams`, the people of its child teams (and theirs) follow, each with `via`, the child team they are in; someone in both is listed once, as the team's own."
5556 },
5557 "set_team_member": {
5558 "params": {
5559 "workspace": "flagon-io",
5560 "team": "backend",
5561 "username": "ana"
5562 },
5563 "request": {
5564 "role": "maintainer"
5565 },
5566 "response": {
5567 "username": "ana",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar5568 "display_username": "Ana",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person5569 "name": "Ana Lima",
5570 "avatar": null,
5571 "role": "maintainer",
5572 "via": null
5573 },
5574 "notes": "`role` is `member` (the default) or `maintainer`. `422` when they are not a member of the workspace: add them to it first. Owners of the workspace and the team's maintainers (`403` otherwise)."
5575 },
5576 "remove_team_member": {
5577 "params": {
5578 "workspace": "flagon-io",
5579 "team": "backend",
5580 "username": "ana"
5581 },
5582 "response": true,
5583 "notes": "Anyone may take themselves out of a team. Leaving the workspace takes a person out of all its teams."
5584 },
5585 "list_child_teams": {
5586 "params": {
5587 "workspace": "flagon-io",
5588 "team": "engineering"
5589 },
5590 "response": [
5591 {
5592 "id": "team_01m52k8d3f7h1k5n9r3v7z1c5g",
5593 "workspace": "flagon-io",
5594 "slug": "backend",
5595 "name": "Backend",
5596 "description": "The API and the services behind it.",
5597 "visibility": "visible",
5598 "parent": {
5599 "slug": "engineering",
5600 "name": "Engineering"
5601 },
5602 "notify": true,
5603 "review_assignment": {
5604 "enabled": false,
5605 "algorithm": "round_robin",
5606 "count": 1,
5607 "skip_busy": false,
5608 "busy_at": 5,
5609 "include_child_teams": false,
5610 "excluded": [],
5611 "notify_team": false
5612 },
5613 "members_count": 4,
5614 "repos_count": 2,
5615 "child_teams_count": 0,
5616 "viewer_role": "maintainer",
5617 "can_manage": true,
5618 "created_at": "2026-10-06T15:02:11.480Z",
5619 "updated_at": "2026-10-06T15:02:11.480Z"
5620 }
5621 ],
5622 "notes": "Only the teams directly under it; read each one's own with this again. A child team inherits its parent's roles on repositories, and a mention or review request for the parent reaches its people too."
5623 },
5624 "list_team_repos": {
5625 "params": {
5626 "workspace": "flagon-io",
5627 "team": "backend"
5628 },
5629 "response": [
5630 {
5631 "repo": "flagon-io/hello",
5632 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
5633 "role": "write",
5634 "inherited_from": null
5635 },
5636 {
5637 "repo": "flagon-io/docs",
5638 "repo_id": "rep_01m3m5r2a8c4e6g8j0m2p4r6t8",
5639 "role": "read",
5640 "inherited_from": "engineering"
5641 }
5642 ],
5643 "notes": "A role inherited from a parent team names it in `inherited_from`. Where the team has a role of its own on the same repository, the higher one is listed. Only repositories you can see are listed."
5644 },
5645 "set_team_repo": {
5646 "params": {
5647 "workspace": "flagon-io",
5648 "team": "backend",
5649 "repo": "hello"
5650 },
5651 "request": {
5652 "role": "maintain"
5653 },
5654 "response": {
5655 "repo": "flagon-io/hello",
5656 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
5657 "role": "maintain",
5658 "inherited_from": null
5659 },
5660 "notes": "`repo` in the path is the repository's name in the team's workspace; a team has roles only on its own workspace's repositories. `role` is `read`, `triage`, `write`, `maintain` or `admin`. Everyone in the team and its child teams gets it; someone with a higher role otherwise keeps that. Needs the Admin role on the repository (`403` otherwise), and the `access:admin` scope. See [Access and roles](/guides/access-and-roles/)."
5661 },
5662 "remove_team_repo": {
5663 "params": {
5664 "workspace": "flagon-io",
5665 "team": "backend",
5666 "repo": "hello"
5667 },
5668 "response": true,
5669 "notes": "A role the team inherits from a parent is taken away on the parent. Needs the Admin role on the repository, or to be an owner or one of the team's maintainers."
5670 },
5671 "set_team_review_assignment": {
5672 "params": {
5673 "workspace": "flagon-io",
5674 "team": "backend"
5675 },
5676 "request": {
5677 "enabled": true,
5678 "algorithm": "load_balance",
5679 "count": 2,
5680 "skip_busy": true,
5681 "busy_at": 5,
5682 "excluded": [
5683 "syntaqx"
5684 ]
5685 },
5686 "response": {
5687 "id": "team_01m52k8d3f7h1k5n9r3v7z1c5g",
5688 "workspace": "flagon-io",
5689 "slug": "backend",
5690 "name": "Backend",
5691 "description": "The API and the services behind it.",
5692 "visibility": "visible",
5693 "parent": {
5694 "slug": "engineering",
5695 "name": "Engineering"
5696 },
5697 "notify": true,
5698 "review_assignment": {
5699 "enabled": true,
5700 "algorithm": "load_balance",
5701 "count": 2,
5702 "skip_busy": true,
5703 "busy_at": 5,
5704 "include_child_teams": false,
5705 "excluded": [
5706 "syntaqx"
5707 ],
5708 "notify_team": false
5709 },
5710 "members_count": 4,
5711 "repos_count": 2,
5712 "child_teams_count": 1,
5713 "viewer_role": "maintainer",
5714 "can_manage": true,
5715 "created_at": "2026-10-06T15:02:11.480Z",
5716 "updated_at": "2026-10-07T09:44:03.512Z"
5717 },
5718 "notes": "| Field | |\n| --- | --- |\n| `enabled` | Off, everyone in the team is asked. On, `count` people are picked and asked, and the team stays shown as asked beside them. |\n| `algorithm` | `round_robin`: whoever this team asked least recently. `load_balance`: whoever has the fewest pull requests waiting on their review. |\n| `count` | How many to pick, 1 to 10. People from the team already asked count towards it. |\n| `skip_busy`, `busy_at` | Leave out anyone with `busy_at` (1 to 100) or more pull requests waiting on their review. |\n| `include_child_teams` | Also pick from its child teams' people. |\n| `excluded` | Usernames never picked. Replaces the whole list. |\n| `notify_team` | Also tell the rest of the team when people are picked. |\n\nFields left out keep their value. The pull request's author is never picked. See [Teams](/guides/teams/)."
5719 },
5720 "list_user_teams": {
5721 "params": {
5722 "workspace": "flagon-io",
5723 "username": "ana"
5724 },
5725 "response": [
5726 {
5727 "id": "team_01m52k8d3f7h1k5n9r3v7z1c5g",
5728 "workspace": "flagon-io",
5729 "slug": "backend",
5730 "name": "Backend",
5731 "description": "The API and the services behind it.",
5732 "visibility": "visible",
5733 "parent": {
5734 "slug": "engineering",
5735 "name": "Engineering"
5736 },
5737 "notify": true,
5738 "review_assignment": {
5739 "enabled": false,
5740 "algorithm": "round_robin",
5741 "count": 1,
5742 "skip_busy": false,
5743 "busy_at": 5,
5744 "include_child_teams": false,
5745 "excluded": [],
5746 "notify_team": false
5747 },
5748 "members_count": 4,
5749 "repos_count": 2,
5750 "child_teams_count": 1,
5751 "viewer_role": null,
5752 "can_manage": false,
5753 "created_at": "2026-10-06T15:02:11.480Z",
5754 "updated_at": "2026-10-06T15:02:11.480Z"
5755 }
5756 ],
5757 "notes": "Only the teams they are in themselves, not the parents those teams are under. Secret teams you are not in are left out unless you are an owner. `403` for anyone who is not a member of the workspace."
5758 },
5759 "list_security_alerts": {
5760 "params": {
5761 "owner": "flagon-io",
5762 "name": "hello"
5763 },
5764 "query": {
5765 "state": "open"
5766 },
5767 "response": [
5768 {
5769 "kind": "secret",
5770 "id": "sec_01kp4a7b2c3d4e5f6g7h8j9k0m",
5771 "state": "dismissed",
5772 "secret_type": "aws_access_key",
5773 "label": "an AWS access key",
5774 "path": "test/fixtures/aws.env",
5775 "line": 3,
5776 "commit": "9f2c1e04b7d3a8e6f5c2b1a0d9e8f7c6b5a4d3e2",
5777 "preview": "AKIA…MPLE",
5778 "status": "allowed",
5779 "source": "history",
5780 "test_value": "the documented example key",
5781 "found_by": null,
5782 "found_at": "2026-10-01T12:00:00.000Z",
5783 "dismissed_reason": "used_in_tests",
5784 "dismissed_comment": "Only in the test fixtures.",
5785 "dismissed_by": "syntaqx",
5786 "dismissed_at": "2026-10-02T09:15:00.000Z"
5787 },
5788 {
5789 "kind": "dependency",
5790 "id": "vul_01kp4b8c3d4e5f6g7h8j9k0m1n",
5791 "state": "open",
5792 "ecosystem": "npm",
5793 "package": "lodash",
5794 "version": "4.17.20",
5795 "manifest": "package-lock.json",
5796 "advisory": "GHSA-35jh-r3h4-6jhm",
5797 "osv_id": "GHSA-35jh-r3h4-6jhm",
5798 "summary": "Command Injection in lodash",
5799 "severity": "high",
5800 "fixed_version": "4.17.21",
5801 "fixed_at": null,
5802 "update": {
5803 "state": "open",
5804 "target": "4.17.21",
5805 "branch": "g1t/security/lodash-4.17.21",
5806 "pull": 42,
5807 "issue": null,
5808 "error": null,
5809 "updated_at": "2026-10-01T12:20:00.000Z"
5810 },
5811 "found_at": "2026-10-01T12:00:00.000Z",
5812 "dismissed_reason": null,
5813 "dismissed_comment": null,
5814 "dismissed_by": null,
5815 "dismissed_at": null
5816 }
5817 ],
5818 "notes": "Secrets come first, then dependencies. Fields only one kind has are left out of the other: a secret has `secret_type`, `label`, `path`, `line`, `commit`, `preview`, `status` (`open`, `blocked`, `allowed` or `resolved`), `source` (`push` or `history`), `test_value` and `found_by`; a dependency has `ecosystem`, `package`, `version`, `manifest`, `advisory`, `osv_id`, `summary`, `severity`, `fixed_version` (null when no patched version is available), `fixed_at` and `update`, the pull request g1t opens to upgrade it. `dismissed_reason`, `dismissed_comment`, `dismissed_by` and `dismissed_at` are null while an alert is open; a secret fixed by being revoked keeps them. `422` for a `state` or `kind` it does not know, and `404` for anyone without the Write role. See [Security](/guides/security/)."
5819 },
5820 "dismiss_security_alert": {
5821 "params": {
5822 "owner": "flagon-io",
5823 "name": "hello",
5824 "id": "vul_01kp4b8c3d4e5f6g7h8j9k0m1n"
5825 },
5826 "request": {
5827 "reason": "tolerable_risk",
5828 "comment": "Only the build uses it, on trusted input."
5829 },
5830 "response": {
5831 "kind": "dependency",
5832 "id": "vul_01kp4b8c3d4e5f6g7h8j9k0m1n",
5833 "state": "dismissed",
5834 "ecosystem": "npm",
5835 "package": "lodash",
5836 "version": "4.17.20",
5837 "manifest": "package-lock.json",
5838 "advisory": "GHSA-35jh-r3h4-6jhm",
5839 "osv_id": "GHSA-35jh-r3h4-6jhm",
5840 "summary": "Command Injection in lodash",
5841 "severity": "high",
5842 "fixed_version": "4.17.21",
5843 "fixed_at": null,
5844 "update": {
5845 "state": "open",
5846 "target": "4.17.21",
5847 "branch": "g1t/security/lodash-4.17.21",
5848 "pull": 42,
5849 "issue": null,
5850 "error": null,
5851 "updated_at": "2026-10-01T12:20:00.000Z"
5852 },
5853 "found_at": "2026-10-01T12:00:00.000Z",
5854 "dismissed_reason": "tolerable_risk",
5855 "dismissed_comment": "Only the build uses it, on trusted input.",
5856 "dismissed_by": "syntaqx",
5857 "dismissed_at": "2026-10-06T10:00:00.000Z"
5858 },
5859 "notes": "| Kind | Reasons |\n| --- | --- |\n| `secret` | `false_positive`, `used_in_tests`, `revoked`, `wont_fix` |\n| `dependency` | `fix_started`, `no_bandwidth`, `tolerable_risk`, `inaccurate`, `not_used` |\n\nA reason for the other kind of alert, or one not in the table, is refused with `422`. A secret dismissed as `revoked` becomes `fixed`; with any other reason it becomes `dismissed` and pushes that carry it go through. Dismissing a secret needs the Admin role on the repository; a dependency needs the Write role. A token needs `repo:admin` for either, and a g1t agent’s token never dismisses alerts."
5860 },
5861 "reopen_security_alert": {
5862 "params": {
5863 "owner": "flagon-io",
5864 "name": "hello",
5865 "id": "sec_01kp4a7b2c3d4e5f6g7h8j9k0m"
5866 },
5867 "response": {
5868 "kind": "secret",
5869 "id": "sec_01kp4a7b2c3d4e5f6g7h8j9k0m",
5870 "state": "open",
5871 "secret_type": "aws_access_key",
5872 "label": "an AWS access key",
5873 "path": "test/fixtures/aws.env",
5874 "line": 3,
5875 "commit": "9f2c1e04b7d3a8e6f5c2b1a0d9e8f7c6b5a4d3e2",
5876 "preview": "AKIA…MPLE",
5877 "status": "open",
5878 "source": "history",
5879 "test_value": "the documented example key",
5880 "found_by": null,
5881 "found_at": "2026-10-01T12:00:00.000Z",
5882 "dismissed_reason": null,
5883 "dismissed_comment": null,
5884 "dismissed_by": null,
5885 "dismissed_at": null
5886 },
5887 "notes": "The alert is `open` again, and a reopened secret stops pushes that carry it. The same roles as dismissing: Admin for a secret, Write for a dependency."
5888 },
5889 "list_notifications": {
5890 "query": {
5891 "participating": "true"
5892 },
5893 "response": {
5894 "items": [
5895 {
5896 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a",
5897 "reason": "review_requested",
5898 "severity": "warning",
5899 "title": "ada asked you to review flagon-io/hello#14",
5900 "body": "Add a greeting to the README",
5901 "event": "pull.review_requested",
5902 "repo": "flagon-io/hello",
5903 "workspace": "flagon-io",
5904 "subject": "pull",
5905 "number": 14,
5906 "url": "/flagon-io/hello/pull/14",
5907 "actor": "ada",
5908 "count": 3,
5909 "created_at": "2026-10-06T15:02:11.000Z",
5910 "updated_at": "2026-10-07T09:41:30.000Z",
5911 "read_at": null,
5912 "done_at": null,
5913 "saved": false,
5914 "snoozed_until": null
5915 },
5916 {
5917 "id": "ntf_01kp7k9a8b7c6d5e4f3g2h1j0k",
5918 "reason": "ci_activity",
5919 "severity": "error",
5920 "title": "Production of hello failed to deploy",
5921 "body": "The build failed: npm run build exited with 1.",
5922 "event": "deployment.failed",
5923 "repo": "flagon-io/hello",
5924 "workspace": "flagon-io",
5925 "subject": "deploy",
5926 "number": null,
5927 "url": "/flagon-io/hello/deployments/dpl_01kp7k8z7y6x5w4v3t2s1r0q9p",
5928 "actor": "syntaqx",
5929 "count": 1,
5930 "created_at": "2026-10-07T08:12:40.000Z",
5931 "updated_at": "2026-10-07T08:12:40.000Z",
5932 "read_at": null,
5933 "done_at": null,
5934 "saved": false,
5935 "snoozed_until": null
5936 }
5937 ],
5938 "next": null
5939 },
5940 "notes": "Unread threads only, unless `all=true`. Threads that wait on you (an agent, or a review asked of you) have severity `warning`.\n\n| `reason` | You were told because |\n| --- | --- |\n| `agent` | An agent is waiting on you: it asked a question, or g1t stopped until a person steps in |\n| `review_requested` | You were asked to review |\n| `assign` | You were assigned |\n| `mention` | Someone mentioned you by `@username` |\n| `ci_activity` | Checks, a workflow or a deployment on your work finished |\n| `security_alert` | A security alert on a repository you look after |\n| `state_change` | It was closed, reopened or merged |\n| `author` | You opened it, or asked g1t for it |\n| `comment` | You commented on it |\n| `manual` | You subscribed to it by hand |\n| `subscribed` | You watch its repository |\n\nWith `participating=true`, threads you only follow (`manual`, `subscribed`) are left out. For the next page, pass `next` as `cursor`; `next` is null on the last."
5941 },
5942 "list_repo_notifications": {
5943 "params": {
5944 "owner": "flagon-io",
5945 "name": "hello"
5946 },
5947 "query": {
5948 "all": "true"
5949 },
5950 "response": {
5951 "items": [
5952 {
5953 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a",
5954 "reason": "review_requested",
5955 "severity": "warning",
5956 "title": "ada asked you to review flagon-io/hello#14",
5957 "body": "Add a greeting to the README",
5958 "event": "pull.review_requested",
5959 "repo": "flagon-io/hello",
5960 "workspace": "flagon-io",
5961 "subject": "pull",
5962 "number": 14,
5963 "url": "/flagon-io/hello/pull/14",
5964 "actor": "ada",
5965 "count": 3,
5966 "created_at": "2026-10-06T15:02:11.000Z",
5967 "updated_at": "2026-10-07T09:41:30.000Z",
5968 "read_at": "2026-10-07T09:50:00.000Z",
5969 "done_at": null,
5970 "saved": false,
5971 "snoozed_until": null
5972 },
5973 {
5974 "id": "ntf_01kp7k9a8b7c6d5e4f3g2h1j0k",
5975 "reason": "ci_activity",
5976 "severity": "error",
5977 "title": "Production of hello failed to deploy",
5978 "body": "The build failed: npm run build exited with 1.",
5979 "event": "deployment.failed",
5980 "repo": "flagon-io/hello",
5981 "workspace": "flagon-io",
5982 "subject": "deploy",
5983 "number": null,
5984 "url": "/flagon-io/hello/deployments/dpl_01kp7k8z7y6x5w4v3t2s1r0q9p",
5985 "actor": "syntaqx",
5986 "count": 1,
5987 "created_at": "2026-10-07T08:12:40.000Z",
5988 "updated_at": "2026-10-07T08:12:40.000Z",
5989 "read_at": null,
5990 "done_at": null,
5991 "saved": false,
5992 "snoozed_until": null
5993 }
5994 ],
5995 "next": "ntf_01kp7k9a8b7c6d5e4f3g2h1j0k"
5996 },
5997 "notes": "The same as `GET /notifications`, for one repository you can read."
5998 },
5999 "mark_notifications_read": {
6000 "request": {
6001 "last_read_at": "2026-10-07T10:00:00Z"
6002 },
6003 "response": {
6004 "marked": 12,
6005 "last_read_at": "2026-10-07T10:00:00.000Z"
6006 },
6007 "notes": "Threads with activity after `last_read_at` stay unread, so send the time you last listed them."
6008 },
6009 "mark_repo_notifications_read": {
6010 "params": {
6011 "owner": "flagon-io",
6012 "name": "hello"
6013 },
6014 "request": {},
6015 "response": {
6016 "marked": 3,
6017 "last_read_at": "2026-10-07T10:02:41.512Z"
6018 }
6019 },
6020 "get_notification_thread": {
6021 "params": {
6022 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a"
6023 },
6024 "response": {
6025 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a",
6026 "reason": "review_requested",
6027 "severity": "warning",
6028 "title": "ada asked you to review flagon-io/hello#14",
6029 "body": "Add a greeting to the README",
6030 "event": "pull.review_requested",
6031 "repo": "flagon-io/hello",
6032 "workspace": "flagon-io",
6033 "subject": "pull",
6034 "number": 14,
6035 "url": "/flagon-io/hello/pull/14",
6036 "actor": "ada",
6037 "count": 3,
6038 "created_at": "2026-10-06T15:02:11.000Z",
6039 "updated_at": "2026-10-07T09:41:30.000Z",
6040 "read_at": null,
6041 "done_at": null,
6042 "saved": false,
6043 "snoozed_until": null,
6044 "activity": [
6045 {
6046 "reason": "review_requested",
6047 "severity": "warning",
6048 "title": "ada asked you to review flagon-io/hello#14",
6049 "body": "Add a greeting to the README",
6050 "event": "pull.review_requested",
6051 "actor": "ada",
6052 "created_at": "2026-10-07T09:41:30.000Z"
6053 },
6054 {
6055 "reason": "comment",
6056 "severity": "info",
6057 "title": "ada commented on flagon-io/hello#14",
6058 "body": "Pushed the fix for the heading.",
6059 "event": "comment.created",
6060 "actor": "ada",
6061 "created_at": "2026-10-06T18:20:02.000Z"
6062 },
6063 {
6064 "reason": "comment",
6065 "severity": "info",
6066 "title": "g1t commented on flagon-io/hello#14",
6067 "body": "The heading level is off by one.",
6068 "event": "comment.created",
6069 "actor": "g1t",
6070 "created_at": "2026-10-06T15:02:11.000Z"
6071 }
6072 ],
6073 "subscription": {
6074 "subscribed": true,
6075 "ignored": false,
6076 "reason": "review_requested",
6077 "repo": "flagon-io/hello",
6078 "number": 14,
6079 "updated_at": null
6080 }
6081 },
6082 "notes": "`activity` keeps the last 10 things that happened on the thread, newest first; `count` is how many there have been. `subscription` is null for a workflow or a deployment, which nobody subscribes to."
6083 },
6084 "mark_thread_read": {
6085 "params": {
6086 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a"
6087 },
6088 "request": {},
6089 "response": {
6090 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a",
6091 "reason": "review_requested",
6092 "severity": "warning",
6093 "title": "ada asked you to review flagon-io/hello#14",
6094 "body": "Add a greeting to the README",
6095 "event": "pull.review_requested",
6096 "repo": "flagon-io/hello",
6097 "workspace": "flagon-io",
6098 "subject": "pull",
6099 "number": 14,
6100 "url": "/flagon-io/hello/pull/14",
6101 "actor": "ada",
6102 "count": 3,
6103 "created_at": "2026-10-06T15:02:11.000Z",
6104 "updated_at": "2026-10-07T09:41:30.000Z",
6105 "read_at": "2026-10-07T10:03:00.000Z",
6106 "done_at": null,
6107 "saved": false,
6108 "snoozed_until": null,
6109 "activity": [
6110 {
6111 "reason": "review_requested",
6112 "severity": "warning",
6113 "title": "ada asked you to review flagon-io/hello#14",
6114 "body": "Add a greeting to the README",
6115 "event": "pull.review_requested",
6116 "actor": "ada",
6117 "created_at": "2026-10-07T09:41:30.000Z"
6118 },
6119 {
6120 "reason": "comment",
6121 "severity": "info",
6122 "title": "ada commented on flagon-io/hello#14",
6123 "body": "Pushed the fix for the heading.",
6124 "event": "comment.created",
6125 "actor": "ada",
6126 "created_at": "2026-10-06T18:20:02.000Z"
6127 },
6128 {
6129 "reason": "comment",
6130 "severity": "info",
6131 "title": "g1t commented on flagon-io/hello#14",
6132 "body": "The heading level is off by one.",
6133 "event": "comment.created",
6134 "actor": "g1t",
6135 "created_at": "2026-10-06T15:02:11.000Z"
6136 }
6137 ],
6138 "subscription": {
6139 "subscribed": true,
6140 "ignored": false,
6141 "reason": "review_requested",
6142 "repo": "flagon-io/hello",
6143 "number": 14,
6144 "updated_at": null
6145 }
6146 }
6147 },
6148 "mark_thread_done": {
6149 "params": {
6150 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a"
6151 },
6152 "response": {
6153 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a",
6154 "reason": "review_requested",
6155 "severity": "warning",
6156 "title": "ada asked you to review flagon-io/hello#14",
6157 "body": "Add a greeting to the README",
6158 "event": "pull.review_requested",
6159 "repo": "flagon-io/hello",
6160 "workspace": "flagon-io",
6161 "subject": "pull",
6162 "number": 14,
6163 "url": "/flagon-io/hello/pull/14",
6164 "actor": "ada",
6165 "count": 3,
6166 "created_at": "2026-10-06T15:02:11.000Z",
6167 "updated_at": "2026-10-07T09:41:30.000Z",
6168 "read_at": "2026-10-07T10:03:00.000Z",
6169 "done_at": "2026-10-07T10:03:00.000Z",
6170 "saved": false,
6171 "snoozed_until": null,
6172 "activity": [
6173 {
6174 "reason": "review_requested",
6175 "severity": "warning",
6176 "title": "ada asked you to review flagon-io/hello#14",
6177 "body": "Add a greeting to the README",
6178 "event": "pull.review_requested",
6179 "actor": "ada",
6180 "created_at": "2026-10-07T09:41:30.000Z"
6181 },
6182 {
6183 "reason": "comment",
6184 "severity": "info",
6185 "title": "ada commented on flagon-io/hello#14",
6186 "body": "Pushed the fix for the heading.",
6187 "event": "comment.created",
6188 "actor": "ada",
6189 "created_at": "2026-10-06T18:20:02.000Z"
6190 },
6191 {
6192 "reason": "comment",
6193 "severity": "info",
6194 "title": "g1t commented on flagon-io/hello#14",
6195 "body": "The heading level is off by one.",
6196 "event": "comment.created",
6197 "actor": "g1t",
6198 "created_at": "2026-10-06T15:02:11.000Z"
6199 }
6200 ],
6201 "subscription": {
6202 "subscribed": true,
6203 "ignored": false,
6204 "reason": "review_requested",
6205 "repo": "flagon-io/hello",
6206 "number": 14,
6207 "updated_at": null
6208 }
6209 },
6210 "notes": "New activity on a done thread brings it back to the inbox, unread."
6211 },
6212 "save_thread": {
6213 "params": {
6214 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a"
6215 },
6216 "request": {},
6217 "response": {
6218 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a",
6219 "reason": "review_requested",
6220 "severity": "warning",
6221 "title": "ada asked you to review flagon-io/hello#14",
6222 "body": "Add a greeting to the README",
6223 "event": "pull.review_requested",
6224 "repo": "flagon-io/hello",
6225 "workspace": "flagon-io",
6226 "subject": "pull",
6227 "number": 14,
6228 "url": "/flagon-io/hello/pull/14",
6229 "actor": "ada",
6230 "count": 3,
6231 "created_at": "2026-10-06T15:02:11.000Z",
6232 "updated_at": "2026-10-07T09:41:30.000Z",
6233 "read_at": null,
6234 "done_at": null,
6235 "saved": true,
6236 "snoozed_until": null,
6237 "activity": [
6238 {
6239 "reason": "review_requested",
6240 "severity": "warning",
6241 "title": "ada asked you to review flagon-io/hello#14",
6242 "body": "Add a greeting to the README",
6243 "event": "pull.review_requested",
6244 "actor": "ada",
6245 "created_at": "2026-10-07T09:41:30.000Z"
6246 },
6247 {
6248 "reason": "comment",
6249 "severity": "info",
6250 "title": "ada commented on flagon-io/hello#14",
6251 "body": "Pushed the fix for the heading.",
6252 "event": "comment.created",
6253 "actor": "ada",
6254 "created_at": "2026-10-06T18:20:02.000Z"
6255 },
6256 {
6257 "reason": "comment",
6258 "severity": "info",
6259 "title": "g1t commented on flagon-io/hello#14",
6260 "body": "The heading level is off by one.",
6261 "event": "comment.created",
6262 "actor": "g1t",
6263 "created_at": "2026-10-06T15:02:11.000Z"
6264 }
6265 ],
6266 "subscription": {
6267 "subscribed": true,
6268 "ignored": false,
6269 "reason": "review_requested",
6270 "repo": "flagon-io/hello",
6271 "number": 14,
6272 "updated_at": null
6273 }
6274 }
6275 },
6276 "unsave_thread": {
6277 "params": {
6278 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a"
6279 },
6280 "response": {
6281 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a",
6282 "reason": "review_requested",
6283 "severity": "warning",
6284 "title": "ada asked you to review flagon-io/hello#14",
6285 "body": "Add a greeting to the README",
6286 "event": "pull.review_requested",
6287 "repo": "flagon-io/hello",
6288 "workspace": "flagon-io",
6289 "subject": "pull",
6290 "number": 14,
6291 "url": "/flagon-io/hello/pull/14",
6292 "actor": "ada",
6293 "count": 3,
6294 "created_at": "2026-10-06T15:02:11.000Z",
6295 "updated_at": "2026-10-07T09:41:30.000Z",
6296 "read_at": null,
6297 "done_at": null,
6298 "saved": false,
6299 "snoozed_until": null,
6300 "activity": [
6301 {
6302 "reason": "review_requested",
6303 "severity": "warning",
6304 "title": "ada asked you to review flagon-io/hello#14",
6305 "body": "Add a greeting to the README",
6306 "event": "pull.review_requested",
6307 "actor": "ada",
6308 "created_at": "2026-10-07T09:41:30.000Z"
6309 },
6310 {
6311 "reason": "comment",
6312 "severity": "info",
6313 "title": "ada commented on flagon-io/hello#14",
6314 "body": "Pushed the fix for the heading.",
6315 "event": "comment.created",
6316 "actor": "ada",
6317 "created_at": "2026-10-06T18:20:02.000Z"
6318 },
6319 {
6320 "reason": "comment",
6321 "severity": "info",
6322 "title": "g1t commented on flagon-io/hello#14",
6323 "body": "The heading level is off by one.",
6324 "event": "comment.created",
6325 "actor": "g1t",
6326 "created_at": "2026-10-06T15:02:11.000Z"
6327 }
6328 ],
6329 "subscription": {
6330 "subscribed": true,
6331 "ignored": false,
6332 "reason": "review_requested",
6333 "repo": "flagon-io/hello",
6334 "number": 14,
6335 "updated_at": null
6336 }
6337 }
6338 },
6339 "snooze_thread": {
6340 "params": {
6341 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a"
6342 },
6343 "request": {
6344 "until": "2026-10-08T09:00:00Z"
6345 },
6346 "response": {
6347 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a",
6348 "reason": "review_requested",
6349 "severity": "warning",
6350 "title": "ada asked you to review flagon-io/hello#14",
6351 "body": "Add a greeting to the README",
6352 "event": "pull.review_requested",
6353 "repo": "flagon-io/hello",
6354 "workspace": "flagon-io",
6355 "subject": "pull",
6356 "number": 14,
6357 "url": "/flagon-io/hello/pull/14",
6358 "actor": "ada",
6359 "count": 3,
6360 "created_at": "2026-10-06T15:02:11.000Z",
6361 "updated_at": "2026-10-07T09:41:30.000Z",
6362 "read_at": "2026-10-07T10:03:00.000Z",
6363 "done_at": null,
6364 "saved": false,
6365 "snoozed_until": "2026-10-08T09:00:00.000Z",
6366 "activity": [
6367 {
6368 "reason": "review_requested",
6369 "severity": "warning",
6370 "title": "ada asked you to review flagon-io/hello#14",
6371 "body": "Add a greeting to the README",
6372 "event": "pull.review_requested",
6373 "actor": "ada",
6374 "created_at": "2026-10-07T09:41:30.000Z"
6375 },
6376 {
6377 "reason": "comment",
6378 "severity": "info",
6379 "title": "ada commented on flagon-io/hello#14",
6380 "body": "Pushed the fix for the heading.",
6381 "event": "comment.created",
6382 "actor": "ada",
6383 "created_at": "2026-10-06T18:20:02.000Z"
6384 },
6385 {
6386 "reason": "comment",
6387 "severity": "info",
6388 "title": "g1t commented on flagon-io/hello#14",
6389 "body": "The heading level is off by one.",
6390 "event": "comment.created",
6391 "actor": "g1t",
6392 "created_at": "2026-10-06T15:02:11.000Z"
6393 }
6394 ],
6395 "subscription": {
6396 "subscribed": true,
6397 "ignored": false,
6398 "reason": "review_requested",
6399 "repo": "flagon-io/hello",
6400 "number": 14,
6401 "updated_at": null
6402 }
6403 }
6404 },
6405 "unsnooze_thread": {
6406 "params": {
6407 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a"
6408 },
6409 "response": {
6410 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a",
6411 "reason": "review_requested",
6412 "severity": "warning",
6413 "title": "ada asked you to review flagon-io/hello#14",
6414 "body": "Add a greeting to the README",
6415 "event": "pull.review_requested",
6416 "repo": "flagon-io/hello",
6417 "workspace": "flagon-io",
6418 "subject": "pull",
6419 "number": 14,
6420 "url": "/flagon-io/hello/pull/14",
6421 "actor": "ada",
6422 "count": 3,
6423 "created_at": "2026-10-06T15:02:11.000Z",
6424 "updated_at": "2026-10-07T09:41:30.000Z",
6425 "read_at": "2026-10-07T10:03:00.000Z",
6426 "done_at": null,
6427 "saved": false,
6428 "snoozed_until": null,
6429 "activity": [
6430 {
6431 "reason": "review_requested",
6432 "severity": "warning",
6433 "title": "ada asked you to review flagon-io/hello#14",
6434 "body": "Add a greeting to the README",
6435 "event": "pull.review_requested",
6436 "actor": "ada",
6437 "created_at": "2026-10-07T09:41:30.000Z"
6438 },
6439 {
6440 "reason": "comment",
6441 "severity": "info",
6442 "title": "ada commented on flagon-io/hello#14",
6443 "body": "Pushed the fix for the heading.",
6444 "event": "comment.created",
6445 "actor": "ada",
6446 "created_at": "2026-10-06T18:20:02.000Z"
6447 },
6448 {
6449 "reason": "comment",
6450 "severity": "info",
6451 "title": "g1t commented on flagon-io/hello#14",
6452 "body": "The heading level is off by one.",
6453 "event": "comment.created",
6454 "actor": "g1t",
6455 "created_at": "2026-10-06T15:02:11.000Z"
6456 }
6457 ],
6458 "subscription": {
6459 "subscribed": true,
6460 "ignored": false,
6461 "reason": "review_requested",
6462 "repo": "flagon-io/hello",
6463 "number": 14,
6464 "updated_at": null
6465 }
6466 }
6467 },
6468 "get_thread_subscription": {
6469 "params": {
6470 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a"
6471 },
6472 "response": {
6473 "subscribed": true,
6474 "ignored": false,
6475 "reason": "review_requested",
6476 "repo": "flagon-io/hello",
6477 "number": 14,
6478 "updated_at": null
6479 }
6480 },
6481 "set_thread_subscription": {
6482 "params": {
6483 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a"
6484 },
6485 "request": {
6486 "ignored": true
6487 },
6488 "response": {
6489 "subscribed": false,
6490 "ignored": true,
6491 "reason": null,
6492 "repo": "flagon-io/hello",
6493 "number": 14,
6494 "updated_at": "2026-10-07T10:04:00.000Z"
6495 },
6496 "notes": "| Body | Then |\n| --- | --- |\n| `{}` or `{\"subscribed\": true}` | You hear of what happens on it |\n| `{\"subscribed\": false}` | You hear only of what is asked of you |\n| `{\"ignored\": true}` | You hear of nothing on it, not even a mention |"
6497 },
6498 "delete_thread_subscription": {
6499 "params": {
6500 "id": "ntf_01kp7m2q3r4s5t6v7w8x9y0z1a"
6501 },
6502 "response": {
6503 "subscribed": false,
6504 "ignored": false,
6505 "reason": null,
6506 "repo": "flagon-io/hello",
6507 "number": 14,
6508 "updated_at": "2026-10-07T10:04:00.000Z"
6509 }
6510 },
6511 "get_issue_subscription": {
6512 "params": {
6513 "owner": "flagon-io",
6514 "name": "hello",
6515 "number": 14
6516 },
6517 "response": {
6518 "subscribed": true,
6519 "ignored": false,
6520 "reason": "author",
6521 "repo": null,
6522 "number": 14,
6523 "updated_at": null
6524 }
6525 },
6526 "set_issue_subscription": {
6527 "params": {
6528 "owner": "flagon-io",
6529 "name": "hello",
6530 "number": 14
6531 },
6532 "request": {
6533 "subscribed": true
6534 },
6535 "response": {
6536 "subscribed": true,
6537 "ignored": false,
6538 "reason": "manual",
6539 "repo": null,
6540 "number": 14,
6541 "updated_at": "2026-10-07T10:05:00.000Z"
6542 }
6543 },
6544 "delete_issue_subscription": {
6545 "params": {
6546 "owner": "flagon-io",
6547 "name": "hello",
6548 "number": 14
6549 },
6550 "response": {
6551 "subscribed": false,
6552 "ignored": false,
6553 "reason": null,
6554 "repo": null,
6555 "number": 14,
6556 "updated_at": "2026-10-07T10:05:30.000Z"
6557 }
6558 },
6559 "get_repo_subscription": {
6560 "params": {
6561 "owner": "flagon-io",
6562 "name": "hello"
6563 },
6564 "response": {
6565 "repo": "flagon-io/hello",
6566 "level": "participating",
6567 "events": [],
6568 "subscribed": false,
6569 "ignored": false,
6570 "updated_at": null
6571 }
6572 },
6573 "set_repo_subscription": {
6574 "params": {
6575 "owner": "flagon-io",
6576 "name": "hello"
6577 },
6578 "request": {
6579 "level": "custom",
6580 "events": [
6581 "pulls",
6582 "deployments"
6583 ]
6584 },
6585 "response": {
6586 "repo": "flagon-io/hello",
6587 "level": "custom",
6588 "events": [
6589 "pulls",
6590 "deployments"
6591 ],
6592 "subscribed": true,
6593 "ignored": false,
6594 "updated_at": "2026-10-07T10:06:00.000Z"
6595 },
6596 "notes": "| `level` | You hear of |\n| --- | --- |\n| `participating` | What you take part in, or are mentioned in (the default) |\n| `all` | Every issue and pull request opened, commented on, closed or merged, and every deployment |\n| `custom` | What you take part in, and the kinds in `events`: `issues`, `pulls`, `deployments`, `security` |\n| `ignore` | Nothing, not even a mention |\n\nInstead of `level`, `{\"subscribed\": true}` is `all`, `{\"subscribed\": false}` is `participating` and `{\"ignored\": true}` is `ignore`."
6597 },
6598 "delete_repo_subscription": {
6599 "params": {
6600 "owner": "flagon-io",
6601 "name": "hello"
6602 },
6603 "response": {
6604 "repo": "flagon-io/hello",
6605 "level": "participating",
6606 "events": [],
6607 "subscribed": false,
6608 "ignored": false,
6609 "updated_at": null
6610 }
6611 },
6612 "list_watched_repos": {
6613 "response": [
6614 {
6615 "repo": "flagon-io/hello",
6616 "level": "all",
6617 "events": [],
6618 "subscribed": true,
6619 "ignored": false,
6620 "updated_at": "2026-10-07T10:00:00.000Z"
6621 },
6622 {
6623 "repo": "flagon-io/docs",
6624 "level": "ignore",
6625 "events": [],
6626 "subscribed": false,
6627 "ignored": true,
6628 "updated_at": "2026-10-05T14:30:00.000Z"
6629 }
6630 ]
6631 },
6632 "get_usage": {
6633 "params": {
6634 "workspace": "flagon-io"
6635 },
6636 "query": {
6637 "from": "2026-10-01",
6638 "until": "2026-10-07",
6639 "group_by": "project"
6640 },
6641 "response": {
6642 "from": "2026-10-01",
6643 "until": "2026-10-07",
6644 "totals": {
Merge branch 'worktree-agent-a56293a6f836cd343'6645 "price_micros": 48212000,
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6646 "discount_micros": 0,
6647 "included_micros": 20000000,
6648 "credits_micros": 18000000,
Merge branch 'worktree-agent-a56293a6f836cd343'6649 "charged_micros": 10212000,
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6650 "pending_micros": 1340000,
Money is written one way. A single formatter turns millionths of a dollar into dollars, rounding half up on whole micros rather than on a float, so the same sum reads the same on every page: under a cent reads <$0.01 on a total and exactly nothing is $0.00, while the statement's lines, a session's receipt, the price book and an agent's effort costs carry up to four places where the fraction of a cent is the point; the six formatters that each rounded their own way are gone. This month is the calendar month in UTC from its first day to today everywhere, and billing counts the month's not-yet-closed usage in any range that reaches into the current month, so the top bar's pill, Spend, Home and Usage ask for the same days and get the same figure; Home now reads the usage report the others read instead of adding up statements. Usage's pending sentence says what of that usage the close will charge after the discount and included usage, which the billing API returns as pending_charged_micros. A reconciliation test holds the pill, Spend, Home and Usage to one number for one month. The usage and billing guide says how amounts are written and what this month means.6651 "pending_charged_micros": 1340000,
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6652 "cost_micros": 40100000
6653 },
6654 "days": [
6655 {
6656 "day": "2026-10-06",
Billing, integrations, security and identity no longer serve g1t's own agents. Billing stops metering agent runs, model tokens and AI Gateway requests, drops its model catalogue and price-keeper model prices, and stops selling AI credit, which only ever paid for those; credit bought earlier still pays toward what is owed. A usage report, statement or invoice that holds an old agent or model meter shows it as "Other usage" rather than failing, and the get_ai_credit and buy_ai_credit API operations and MCP billing actions go. Integrations no longer connects model providers or routes models, and no longer assigns imported issues or alerts to g1t; a model provider already connected can still be disconnected. Security drops "Fix with g1t". Identity no longer creates agent tokens or puts agents on teams, a team's lead is a person, and run credentials are issued only for checks, the merge queue, merge checks, deployments and bumps; tokens and credentials already issued keep working until they expire. The reserved names g1t and g1t-agent stay reserved. No tables are dropped.6657 "product": "other",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6658 "micros": 12400000
6659 },
6660 {
6661 "day": "2026-10-06",
6662 "product": "sandboxes",
6663 "micros": 2100000
6664 },
6665 {
6666 "day": "2026-10-07",
Billing, integrations, security and identity no longer serve g1t's own agents. Billing stops metering agent runs, model tokens and AI Gateway requests, drops its model catalogue and price-keeper model prices, and stops selling AI credit, which only ever paid for those; credit bought earlier still pays toward what is owed. A usage report, statement or invoice that holds an old agent or model meter shows it as "Other usage" rather than failing, and the get_ai_credit and buy_ai_credit API operations and MCP billing actions go. Integrations no longer connects model providers or routes models, and no longer assigns imported issues or alerts to g1t; a model provider already connected can still be disconnected. Security drops "Fix with g1t". Identity no longer creates agent tokens or puts agents on teams, a team's lead is a person, and run credentials are issued only for checks, the merge queue, merge checks, deployments and bumps; tokens and credentials already issued keep working until they expire. The reserved names g1t and g1t-agent stay reserved. No tables are dropped.6667 "product": "other",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6668 "micros": 9800000
6669 }
6670 ],
6671 "products": [
6672 {
6673 "key": "sandboxes",
6674 "label": "Sandboxes",
Merge branch 'worktree-agent-a56293a6f836cd343'6675 "micros": 7212000,
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6676 "meters": [
6677 {
Merge branch 'worktree-agent-a56293a6f836cd343'6678 "key": "runner_2-core",
6679 "label": "Runner minutes, 2-core (2 vCPU, 8 GiB, 16 GB)",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6680 "product": "sandboxes",
Merge branch 'worktree-agent-a56293a6f836cd343'6681 "unit": "minutes",
6682 "quantity": 1803,
6683 "micros": 7212000,
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6684 "pending_micros": 0,
6685 "daily": [
6686 900000,
6687 1200000,
6688 800000,
6689 1100000,
6690 0,
6691 2100000,
Merge branch 'worktree-agent-a56293a6f836cd343'6692 1112000
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6693 ],
Merge branch 'worktree-agent-a56293a6f836cd343'6694 "allowance": null,
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6695 "by_project": [
6696 {
6697 "project": "flagon-io/g1t",
Merge branch 'worktree-agent-a56293a6f836cd343'6698 "micros": 7212000,
6699 "quantity": 1803
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6700 }
6701 ]
6702 }
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.6703 ]
Billing, integrations, security and identity no longer serve g1t's own agents. Billing stops metering agent runs, model tokens and AI Gateway requests, drops its model catalogue and price-keeper model prices, and stops selling AI credit, which only ever paid for those; credit bought earlier still pays toward what is owed. A usage report, statement or invoice that holds an old agent or model meter shows it as "Other usage" rather than failing, and the get_ai_credit and buy_ai_credit API operations and MCP billing actions go. Integrations no longer connects model providers or routes models, and no longer assigns imported issues or alerts to g1t; a model provider already connected can still be disconnected. Security drops "Fix with g1t". Identity no longer creates agent tokens or puts agents on teams, a team's lead is a person, and run credentials are issued only for checks, the merge queue, merge checks, deployments and bumps; tokens and credentials already issued keep working until they expire. The reserved names g1t and g1t-agent stay reserved. No tables are dropped.6704 },
6705 {
6706 "key": "other",
6707 "label": "Other",
6708 "micros": 41000000,
6709 "meters": [
6710 {
6711 "key": "other",
6712 "label": "Other",
6713 "product": "other",
6714 "unit": "entries",
6715 "quantity": 23,
6716 "micros": 41000000,
6717 "pending_micros": 0,
6718 "daily": [
6719 3100000,
6720 5200000,
6721 4400000,
6722 6000000,
6723 0,
6724 12400000,
6725 9800000
6726 ],
6727 "allowance": null,
6728 "by_project": [
6729 {
6730 "project": "flagon-io/g1t",
6731 "micros": 36000000,
6732 "quantity": 14
6733 },
6734 {
6735 "project": "flagon-io/hello",
6736 "micros": 5000000,
6737 "quantity": 9
6738 }
6739 ]
6740 }
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.6741 ]
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6742 }
6743 ],
6744 "projects": [
6745 "flagon-io/g1t",
6746 "flagon-io/hello"
6747 ],
6748 "included": {
6749 "used": 20,
6750 "of": 20,
6751 "unit": "dollars"
6752 },
6753 "discount_percent": null,
6754 "ai_credit_micros": 62000000,
6755 "credit_micros": 0,
6756 "trial_micros": null,
6757 "plan": "pro",
6758 "free": false,
6759 "group_by": "project",
6760 "groups": [
6761 {
6762 "key": "flagon-io/g1t",
6763 "micros": 43210000
6764 },
6765 {
6766 "key": "flagon-io/hello",
6767 "micros": 5000000
6768 }
6769 ]
6770 },
Billing, integrations, security and identity no longer serve g1t's own agents. Billing stops metering agent runs, model tokens and AI Gateway requests, drops its model catalogue and price-keeper model prices, and stops selling AI credit, which only ever paid for those; credit bought earlier still pays toward what is owed. A usage report, statement or invoice that holds an old agent or model meter shows it as "Other usage" rather than failing, and the get_ai_credit and buy_ai_credit API operations and MCP billing actions go. Integrations no longer connects model providers or routes models, and no longer assigns imported issues or alerts to g1t; a model provider already connected can still be disconnected. Security drops "Fix with g1t". Identity no longer creates agent tokens or puts agents on teams, a team's lead is a person, and run credentials are issued only for checks, the merge queue, merge checks, deployments and bumps; tokens and credentials already issued keep working until they expire. The reserved names g1t and g1t-agent stay reserved. No tables are dropped.6771 "notes": "Every product family with meters is listed, in order, even with nothing used; this example shows two. `other` comes last, and only when it has something: usage on meters g1t no longer has, such as agent runs from before they were retired. `daily` has one amount for each day of the range, oldest first. `projects` and `products` take several values separated by commas: `?products=sandboxes,deployments`. A range of more than 400 days, or one that ends before it starts, is refused with `invalid`."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6772 },
6773 "get_budget": {
6774 "params": {
6775 "workspace": "flagon-io"
6776 },
6777 "response": {
6778 "workspace": "flagon-io",
6779 "amount_micros": 500000000,
6780 "automatic": false,
6781 "spent_micros": 132450000,
6782 "max_amount_micros": 2000000000,
6783 "alerts": [
6784 50,
6785 75,
6786 90,
6787 100
6788 ],
6789 "pause_at_limit": true,
6790 "webhook": "https://ops.example.com/g1t/budget",
6791 "state": "ok",
6792 "message": null
6793 },
6794 "notes": "All amounts are whole millionths of a dollar: 500000000 is $500. `max_amount_micros` is null for g1t's own workspaces, which have no ceiling. When `state` is `stopped`, new sandboxes, builds and app requests wait until the limit is raised or the month closes."
6795 },
6796 "set_budget": {
6797 "params": {
6798 "workspace": "flagon-io"
6799 },
6800 "request": {
6801 "amount_micros": 500000000,
6802 "alerts": [
6803 50,
6804 75,
6805 90,
6806 100
6807 ],
6808 "webhook": "https://ops.example.com/g1t/budget"
6809 },
6810 "response": {
6811 "workspace": "flagon-io",
6812 "amount_micros": 500000000,
6813 "automatic": false,
6814 "spent_micros": 132450000,
6815 "max_amount_micros": 2000000000,
6816 "alerts": [
6817 50,
6818 75,
6819 90,
6820 100
6821 ],
6822 "pause_at_limit": true,
6823 "webhook": "https://ops.example.com/g1t/budget",
6824 "state": "ok",
6825 "message": null
6826 },
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.6827 "notes": "Fields left out keep their value. A limit above `max_amount_micros` is refused with `invalid`. Called by anyone but an owner signed in as a person, or by a workspace's own token or a run's token, it is refused with `forbidden`. Each alert is sent once a month, to the owners by email and, with `webhook`, as a JSON POST."
Merge the AI Gateway: Anthropic's Messages API on a workspace's tokens6828 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person6829 "list_invoices": {
6830 "params": {
6831 "workspace": "flagon-io"
6832 },
6833 "response": {
6834 "invoices": [
6835 {
6836 "id": "in_1Q2w3E4r5T6y7U8i",
6837 "number": "FLAGON-0004",
6838 "status": "paid",
6839 "total_cents": 4210,
6840 "currency": "usd",
6841 "created_at": "2026-10-01T00:05:00.000Z",
6842 "description": "Usage for 2026-09",
6843 "hosted_url": "https://invoice.example.com/i/acct_1/in_1Q2w3E4r5T6y7U8i",
6844 "pdf_url": "https://invoice.example.com/i/acct_1/in_1Q2w3E4r5T6y7U8i/pdf"
6845 }
6846 ],
6847 "usage_invoices": [
6848 {
6849 "id": "inv_01kkqz8d3c6f9t2wq5n8h1m4r7",
6850 "workspace": "flagon-io",
6851 "reason": "month",
6852 "period": "2026-09",
6853 "amount_micros": 42100000,
6854 "status": "paid",
6855 "hosted_url": "https://invoice.example.com/i/acct_1/in_1Q2w3E4r5T6y7U8i",
6856 "pdf_url": "https://invoice.example.com/i/acct_1/in_1Q2w3E4r5T6y7U8i/pdf",
6857 "lines": [
6858 {
6859 "description": "Agent: models",
6860 "amount_micros": 35900000
6861 },
6862 {
6863 "description": "Sandbox time",
6864 "amount_micros": 6200000
6865 }
6866 ],
6867 "created_at": "2026-10-01T00:05:00.000Z"
6868 },
6869 {
6870 "id": "inv_01kkqz8d3c6f9t2wq5n8h1m4r7",
6871 "workspace": "flagon-io",
6872 "reason": "month",
6873 "period": "2026-09",
6874 "amount_micros": 42100000,
6875 "status": "paid",
6876 "hosted_url": "https://invoice.example.com/i/acct_1/in_1Q2w3E4r5T6y7U8i",
6877 "pdf_url": "https://invoice.example.com/i/acct_1/in_1Q2w3E4r5T6y7U8i/pdf",
6878 "lines": [
6879 {
6880 "description": "Agent: models",
6881 "amount_micros": 35900000
6882 },
6883 {
6884 "description": "Sandbox time",
6885 "amount_micros": 6200000
6886 }
6887 ],
6888 "created_at": "2026-10-01T00:05:00.000Z",
6889 "fee_micros": 1600000,
6890 "tax_micros": 3510000
6891 }
6892 ],
6893 "upcoming": {
6894 "closes_at": "2026-11-01T00:00:00.000Z",
6895 "subscriptions_micros": 20000000,
6896 "usage_micros": 10210000,
6897 "total_micros": 30210000
6898 },
6899 "unavailable": null
6900 },
6901 "notes": "`invoices` are in cents (`total_cents`); `usage_invoices` and `upcoming` in millionths of a dollar. A usage invoice's `reason` is `month` (the month closed) or `threshold` (charged near the limit), and its `status` `paid`, `open`, `failed` or `void`. An invoice's `status` is `paid`, `open`, `void`, `uncollectible` or `draft`."
6902 },
6903 "get_billing_details": {
6904 "params": {
6905 "workspace": "flagon-io"
6906 },
6907 "response": {
6908 "customer": true,
6909 "email": "billing@flagon.example.com",
6910 "name": "Flagon, Inc.",
6911 "address": {
6912 "line1": "100 Market Street",
6913 "line2": "",
6914 "city": "San Francisco",
6915 "state": "CA",
6916 "postal_code": "94105",
6917 "country": "US"
6918 },
6919 "tax_id_type": "us_ein",
6920 "tax_id": "12-3456789",
6921 "po_number": null,
6922 "language": "en",
6923 "payment_method": {
6924 "kind": "card",
6925 "brand": "visa",
6926 "last4": "4242",
6927 "exp_month": 12,
6928 "exp_year": 2028
6929 },
6930 "tax_location": true,
6931 "tax_address_needed_at": null,
6932 "tax_id_status": "unavailable",
6933 "tax_exempt": "none"
6934 },
6935 "notes": "Owners change these on the workspace's billing page. `payment_method` is null until a card or other way to pay is saved. Tax is worked out from the address: `tax_location` is false until it has at least a country (and in the US a ZIP code), and `tax_address_needed_at` is set while a charge waits for one."
6936 },
6937 "list_pinned_projects": {
6938 "params": {
6939 "workspace": "flagon-io"
6940 },
6941 "response": [
6942 {
6943 "position": 0,
6944 "id": "prj_01kkp3m8w2f6t9qh4c7d1r5n0x",
6945 "workspace": "flagon-io",
6946 "slug": "g1t",
6947 "name": "g1t",
6948 "description": null,
6949 "private": false,
6950 "archived": false,
6951 "kind": "app",
6952 "url": "https://g1t.sh/flagon-io/g1t",
6953 "pushed_at": "2026-10-07T10:00:00.000Z",
6954 "updated_at": "2026-10-01T09:12:00.000Z"
6955 },
6956 {
6957 "position": 1,
6958 "id": "prj_01kkq0c4d9h2w7rn5f8t3k6p2z",
6959 "workspace": "flagon-io",
6960 "slug": "lab-api",
6961 "name": "lab-api",
6962 "description": null,
6963 "private": true,
6964 "archived": false,
6965 "kind": "app",
6966 "url": "https://g1t.sh/flagon-io/lab-api",
6967 "pushed_at": "2026-10-06T18:40:00.000Z",
6968 "updated_at": "2026-10-01T09:12:00.000Z"
6969 },
6970 {
6971 "position": 2,
6972 "id": "prj_01kkp3n2a7e5v8sk3b6g9j4m1y",
6973 "workspace": "flagon-io",
6974 "slug": "hello",
6975 "name": "hello",
6976 "description": "Greets people from the command line.",
6977 "private": false,
6978 "archived": false,
6979 "kind": "library",
6980 "url": "https://g1t.sh/flagon-io/hello",
6981 "pushed_at": null,
6982 "updated_at": "2026-10-01T09:12:00.000Z"
6983 }
6984 ],
6985 "notes": "In your order: `position` 0 first. The sidebar shows these, then the projects you opened last. `pushed_at` is null until the project's repository is pushed to."
6986 },
6987 "pin_project": {
6988 "params": {
6989 "workspace": "flagon-io",
6990 "project": "hello"
6991 },
6992 "request": {
6993 "position": 0
6994 },
6995 "response": [
6996 {
6997 "position": 0,
6998 "id": "prj_01kkp3n2a7e5v8sk3b6g9j4m1y",
6999 "workspace": "flagon-io",
7000 "slug": "hello",
7001 "name": "hello",
7002 "description": "Greets people from the command line.",
7003 "private": false,
7004 "archived": false,
7005 "kind": "library",
7006 "url": "https://g1t.sh/flagon-io/hello",
7007 "pushed_at": null,
7008 "updated_at": "2026-10-01T09:12:00.000Z"
7009 },
7010 {
7011 "position": 1,
7012 "id": "prj_01kkp3m8w2f6t9qh4c7d1r5n0x",
7013 "workspace": "flagon-io",
7014 "slug": "g1t",
7015 "name": "g1t",
7016 "description": null,
7017 "private": false,
7018 "archived": false,
7019 "kind": "app",
7020 "url": "https://g1t.sh/flagon-io/g1t",
7021 "pushed_at": "2026-10-07T10:00:00.000Z",
7022 "updated_at": "2026-10-01T09:12:00.000Z"
7023 },
7024 {
7025 "position": 2,
7026 "id": "prj_01kkq0c4d9h2w7rn5f8t3k6p2z",
7027 "workspace": "flagon-io",
7028 "slug": "lab-api",
7029 "name": "lab-api",
7030 "description": null,
7031 "private": true,
7032 "archived": false,
7033 "kind": "app",
7034 "url": "https://g1t.sh/flagon-io/lab-api",
7035 "pushed_at": "2026-10-06T18:40:00.000Z",
7036 "updated_at": "2026-10-01T09:12:00.000Z"
7037 }
7038 ],
7039 "notes": "A ninth pin in a workspace is refused with `409 conflict`: unpin one first."
7040 },
7041 "unpin_project": {
7042 "params": {
7043 "workspace": "flagon-io",
7044 "project": "lab-api"
7045 },
7046 "response": [
7047 {
7048 "position": 0,
7049 "id": "prj_01kkp3m8w2f6t9qh4c7d1r5n0x",
7050 "workspace": "flagon-io",
7051 "slug": "g1t",
7052 "name": "g1t",
7053 "description": null,
7054 "private": false,
7055 "archived": false,
7056 "kind": "app",
7057 "url": "https://g1t.sh/flagon-io/g1t",
7058 "pushed_at": "2026-10-07T10:00:00.000Z",
7059 "updated_at": "2026-10-01T09:12:00.000Z"
7060 },
7061 {
7062 "position": 1,
7063 "id": "prj_01kkp3n2a7e5v8sk3b6g9j4m1y",
7064 "workspace": "flagon-io",
7065 "slug": "hello",
7066 "name": "hello",
7067 "description": "Greets people from the command line.",
7068 "private": false,
7069 "archived": false,
7070 "kind": "library",
7071 "url": "https://g1t.sh/flagon-io/hello",
7072 "pushed_at": null,
7073 "updated_at": "2026-10-01T09:12:00.000Z"
7074 }
7075 ]
7076 },
7077 "reorder_pinned_projects": {
7078 "params": {
7079 "workspace": "flagon-io"
7080 },
7081 "request": {
7082 "projects": [
7083 "lab-api",
7084 "g1t",
7085 "hello"
7086 ]
7087 },
7088 "response": [
7089 {
7090 "position": 0,
7091 "id": "prj_01kkq0c4d9h2w7rn5f8t3k6p2z",
7092 "workspace": "flagon-io",
7093 "slug": "lab-api",
7094 "name": "lab-api",
7095 "description": null,
7096 "private": true,
7097 "archived": false,
7098 "kind": "app",
7099 "url": "https://g1t.sh/flagon-io/lab-api",
7100 "pushed_at": "2026-10-06T18:40:00.000Z",
7101 "updated_at": "2026-10-01T09:12:00.000Z"
7102 },
7103 {
7104 "position": 1,
7105 "id": "prj_01kkp3m8w2f6t9qh4c7d1r5n0x",
7106 "workspace": "flagon-io",
7107 "slug": "g1t",
7108 "name": "g1t",
7109 "description": null,
7110 "private": false,
7111 "archived": false,
7112 "kind": "app",
7113 "url": "https://g1t.sh/flagon-io/g1t",
7114 "pushed_at": "2026-10-07T10:00:00.000Z",
7115 "updated_at": "2026-10-01T09:12:00.000Z"
7116 },
7117 {
7118 "position": 2,
7119 "id": "prj_01kkp3n2a7e5v8sk3b6g9j4m1y",
7120 "workspace": "flagon-io",
7121 "slug": "hello",
7122 "name": "hello",
7123 "description": "Greets people from the command line.",
7124 "private": false,
7125 "archived": false,
7126 "kind": "library",
7127 "url": "https://g1t.sh/flagon-io/hello",
7128 "pushed_at": null,
7129 "updated_at": "2026-10-01T09:12:00.000Z"
7130 }
7131 ],
7132 "notes": "Name every pinned project once; anything else is refused with `422 invalid`."
7133 },
g1t coordinates the work and the person's own sessions do it: Ask g1t reads g1t with the same tools any agent gets, answers in one conversation shared with the @g1t direct message in Chat, and hands work to sessions in the person's own harness, whose subagents g1t records, ties to issues and pull requests, and lets see each other.7134 "list_commits": {
7135 "notes": "With `path`, `last_changed` is the commit that last changed that file or directory.",
7136 "params": {
7137 "owner": "flagon-io",
7138 "name": "g1t"
7139 },
7140 "query": {
7141 "path": "scripts/deploy/npm-ci.mjs",
7142 "limit": "1"
7143 },
7144 "response": {
7145 "repo": "flagon-io/g1t",
7146 "commits": [
7147 {
7148 "sha": "85c083a0e4b1d2c3f4a5b6c7d8e9f0a1b2c3d4e5",
7149 "message": "The runner's broker test reads the relayed answer's body as chunks.",
7150 "author": { "name": "Chase Pierce" },
7151 "authored_at": "2026-10-12T22:04:11Z",
7152 "parents": ["75c6704f2b1a3c4d5e6f708192a3b4c5d6e7f809"],
7153 "html_url": "https://g1t.sh/flagon-io/g1t/commit/85c083a0e4b1d2c3f4a5b6c7d8e9f0a1b2c3d4e5"
7154 }
7155 ],
7156 "path": "scripts/deploy/npm-ci.mjs",
7157 "last_changed": {
7158 "sha": "5d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e",
7159 "message": "Installs in cloud jobs retry when npm's download breaks off.",
7160 "author": { "name": "Chase Pierce" },
7161 "authored_at": "2026-10-13T01:12:40Z",
7162 "parents": ["0a1b2c3d4e5f60718293a4b5c6d7e8f9a0b1c2d3"],
7163 "html_url": "https://g1t.sh/flagon-io/g1t/commit/5d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e"
7164 }
7165 }
7166 },
7167 "get_contents": {
7168 "notes": "A file's text, or with no `path` (or a directory's) the entries and README. `ref` is a branch, tag or commit; the default branch when left out.",
7169 "params": {
7170 "owner": "flagon-io",
7171 "name": "g1t"
7172 },
7173 "query": {
7174 "path": "CONTRIBUTING.md"
7175 },
7176 "response": {
7177 "type": "file",
7178 "repo": "flagon-io/g1t",
7179 "ref": "main",
7180 "path": "CONTRIBUTING.md",
7181 "size": 412,
7182 "binary": false,
7183 "text": "# Contributing\n\nRun the tests before you push:\n\n```sh\ncargo test --workspace\nnpm test --workspaces --if-present\n```\n",
7184 "html_url": "https://g1t.sh/flagon-io/g1t/blob/main/CONTRIBUTING.md"
7185 }
7186 },
7187 "get_workspace_activity": {
7188 "notes": "What shipped today across a workspace: `since` at midnight UTC and `kinds=merged,releases,deployments,pushes`. Each event links to its page on g1t (`url`). Ask g1t reads this to answer questions about a workspace.",
7189 "params": {
7190 "workspace": "flagon-io"
7191 },
7192 "query": {
7193 "since": "2026-10-12T00:00:00Z",
7194 "kinds": "merged,releases,deployments"
7195 },
7196 "response": {
7197 "workspace": "flagon-io",
7198 "since": "2026-10-12T00:00:00Z",
7199 "until": "2026-10-12T21:40:00Z",
7200 "repositories": 4,
7201 "summary": {
7202 "merged_pull_requests": 1,
7203 "releases": 1,
7204 "production_deployments": 1,
7205 "failed_deployments": 0,
7206 "default_branch_pushes": 0,
7207 "failed_runs": 0
7208 },
7209 "events": [
7210 {
7211 "kind": "deployment_succeeded",
7212 "time": "2026-10-12T21:12:04Z",
7213 "repo": "flagon-io/g1t",
7214 "actor": "syntaqx",
7215 "environment": "production",
7216 "project": "g1t",
7217 "branch": "main",
7218 "commit": "75c6704f2b1a",
7219 "url": "https://g1t.sh/flagon-io/g1t/deployments/dpl_01kkp3m8w2f6t9qh4c7d1r5n0x"
7220 },
7221 {
7222 "kind": "release_published",
7223 "time": "2026-10-12T19:30:51Z",
7224 "repo": "flagon-io/runner",
7225 "actor": "syntaqx",
7226 "tag": "v0.3.3",
7227 "title": "Runner 0.3.3",
7228 "url": "https://g1t.sh/flagon-io/runner/releases/tag/v0.3.3"
7229 },
7230 {
7231 "kind": "pull_merged",
7232 "time": "2026-10-12T18:02:17Z",
7233 "repo": "flagon-io/g1t",
7234 "actor": "syntaqx",
7235 "number": 412,
7236 "title": "Ask g1t answers with the workspace's own AI provider",
7237 "url": "https://g1t.sh/flagon-io/g1t/pull/412",
7238 "issue": 398
7239 }
7240 ],
7241 "complete": true
7242 }
7243 },
Merge branch 'main' into worktree-agent-a69aeabc4b0deeb977244 "list_projects": {
7245 "params": {
7246 "workspace": "flagon-io"
7247 },
7248 "response": [
7249 {
7250 "id": "prj_01kkp3m8w2f6t9qh4c7d1r5n0x",
7251 "workspace": "flagon-io",
7252 "slug": "g1t",
7253 "name": "g1t",
7254 "description": "Git hosting where people and agents work together.",
7255 "description_inherited": true,
7256 "url": "https://g1t.sh/flagon-io/g1t",
7257 "repository": "flagon-io/g1t",
7258 "root_dir": "",
7259 "default_branch": "main",
7260 "private": false,
7261 "archived": false,
7262 "primary": true,
7263 "kind": "app",
7264 "kind_reason": {
7265 "by": "set",
7266 "detail": "Set to an app that runs elsewhere."
7267 },
7268 "runs": "elsewhere",
7269 "production_url": "https://g1t.sh",
7270 "setting": {
7271 "kind": "app",
7272 "runs": "elsewhere"
7273 },
7274 "detected": {
7275 "kind": "app",
7276 "reason": {
7277 "by": "files",
7278 "detail": "wrangler.jsonc at its root makes it an app."
7279 }
7280 },
7281 "ecosystem": null,
7282 "links": {
7283 "homepage": "https://g1t.sh",
7284 "homepage_inherited": true,
7285 "docs": "https://docs.g1t.sh",
7286 "custom": [
7287 {
7288 "label": "Status",
7289 "url": "https://status.g1t.sh"
7290 }
7291 ]
7292 },
7293 "created_at": "2026-09-01T10:00:00.000Z",
7294 "updated_at": "2026-10-07T11:20:00.000Z",
7295 "pushed_at": "2026-10-07T10:00:00.000Z"
7296 },
7297 {
7298 "id": "prj_01kkp3n2a7e5v8sk3b6g9j4m1y",
7299 "workspace": "flagon-io",
7300 "slug": "hello",
7301 "name": "hello",
7302 "description": "Greets people from the command line.",
7303 "description_inherited": false,
7304 "url": "https://g1t.sh/flagon-io/hello",
7305 "repository": "flagon-io/hello",
7306 "root_dir": "",
7307 "default_branch": "main",
7308 "private": false,
7309 "archived": false,
7310 "primary": true,
7311 "kind": "library",
7312 "kind_reason": {
7313 "by": "files",
7314 "detail": "composer.json says it is a library."
7315 },
7316 "runs": null,
7317 "production_url": null,
7318 "setting": {
7319 "kind": null,
7320 "runs": null
7321 },
7322 "detected": {
7323 "kind": "library",
7324 "reason": {
7325 "by": "files",
7326 "detail": "composer.json says it is a library."
7327 }
7328 },
7329 "ecosystem": "composer",
7330 "links": {
7331 "homepage": null,
7332 "homepage_inherited": false,
7333 "docs": null,
7334 "custom": []
7335 },
7336 "created_at": "2026-09-12T14:30:00.000Z",
7337 "updated_at": "2026-10-01T09:12:00.000Z",
7338 "pushed_at": null
7339 }
7340 ],
7341 "notes": "By name. Projects whose repository you cannot see are left out; without a token you see public ones only. `kind` is what the project is, from `setting` where a person set it and from detection otherwise (`detected`, shown beside it); `kind_reason` says why. `runs` is null for what is not deployed. `homepage_inherited` is true while the homepage is its repository's website. `pushed_at` is null until its repository is pushed to. See [Projects](/guides/projects/)."
7342 },
7343 "get_project": {
7344 "params": {
7345 "workspace": "flagon-io",
7346 "project": "g1t"
7347 },
7348 "response": {
7349 "id": "prj_01kkp3m8w2f6t9qh4c7d1r5n0x",
7350 "workspace": "flagon-io",
7351 "slug": "g1t",
7352 "name": "g1t",
7353 "description": "Git hosting where people and agents work together.",
7354 "description_inherited": true,
7355 "url": "https://g1t.sh/flagon-io/g1t",
7356 "repository": "flagon-io/g1t",
7357 "root_dir": "",
7358 "default_branch": "main",
7359 "private": false,
7360 "archived": false,
7361 "primary": true,
7362 "kind": "app",
7363 "kind_reason": {
7364 "by": "set",
7365 "detail": "Set to an app that runs elsewhere."
7366 },
7367 "runs": "elsewhere",
7368 "production_url": "https://g1t.sh",
7369 "setting": {
7370 "kind": "app",
7371 "runs": "elsewhere"
7372 },
7373 "detected": {
7374 "kind": "app",
7375 "reason": {
7376 "by": "files",
7377 "detail": "wrangler.jsonc at its root makes it an app."
7378 }
7379 },
7380 "ecosystem": null,
7381 "links": {
7382 "homepage": "https://g1t.sh",
7383 "homepage_inherited": true,
7384 "docs": "https://docs.g1t.sh",
7385 "custom": [
7386 {
7387 "label": "Status",
7388 "url": "https://status.g1t.sh"
7389 }
7390 ]
7391 },
7392 "created_at": "2026-09-01T10:00:00.000Z",
7393 "updated_at": "2026-10-07T11:20:00.000Z",
7394 "pushed_at": "2026-10-07T10:00:00.000Z"
7395 },
7396 "notes": "`404` for a project that does not exist or whose repository you cannot see. `setting` holds what a person set, each part null while it is left to detection. `ecosystem` is where a library's files say it is published (`composer`, `npm`, `cargo`, `go` or `python`), or null. See [What a project is](/guides/projects/#what-a-project-is)."
7397 },
7398 "update_project": {
7399 "params": {
7400 "workspace": "flagon-io",
7401 "project": "g1t"
7402 },
7403 "request": {
7404 "kind": "app",
7405 "runs": "elsewhere",
7406 "production_url": "https://g1t.sh",
7407 "docs_url": "https://docs.g1t.sh",
7408 "links": [
7409 {
7410 "label": "Status",
7411 "url": "https://status.g1t.sh"
7412 }
7413 ]
7414 },
7415 "response": {
7416 "id": "prj_01kkp3m8w2f6t9qh4c7d1r5n0x",
7417 "workspace": "flagon-io",
7418 "slug": "g1t",
7419 "name": "g1t",
7420 "description": "Git hosting where people and agents work together.",
7421 "description_inherited": true,
7422 "url": "https://g1t.sh/flagon-io/g1t",
7423 "repository": "flagon-io/g1t",
7424 "root_dir": "",
7425 "default_branch": "main",
7426 "private": false,
7427 "archived": false,
7428 "primary": true,
7429 "kind": "app",
7430 "kind_reason": {
7431 "by": "set",
7432 "detail": "Set to an app that runs elsewhere."
7433 },
7434 "runs": "elsewhere",
7435 "production_url": "https://g1t.sh",
7436 "setting": {
7437 "kind": "app",
7438 "runs": "elsewhere"
7439 },
7440 "detected": {
7441 "kind": "app",
7442 "reason": {
7443 "by": "files",
7444 "detail": "wrangler.jsonc at its root makes it an app."
7445 }
7446 },
7447 "ecosystem": null,
7448 "links": {
7449 "homepage": "https://g1t.sh",
7450 "homepage_inherited": true,
7451 "docs": "https://docs.g1t.sh",
7452 "custom": [
7453 {
7454 "label": "Status",
7455 "url": "https://status.g1t.sh"
7456 }
7457 ]
7458 },
7459 "created_at": "2026-09-01T10:00:00.000Z",
7460 "updated_at": "2026-10-07T11:20:00.000Z",
7461 "pushed_at": "2026-10-07T10:00:00.000Z"
7462 },
7463 "notes": "Only the fields given change. `kind` and `runs` take `auto` to go back to detection. Setting `runs` makes the project an app unless it is docs. Making it a `library`, `tool` or `other` while [Deployments](/guides/deployments/) are on is refused with `409 conflict`: turn them off first. `description` and `homepage` given as null or `\"\"` follow the repository's again; `production_url` and `docs_url` given as null or `\"\"` are cleared. `links` replaces the project's other links: at most 10, each with a `label` of up to 40 characters and an http or https `url` (`https://` is added when you leave the scheme out); anything else is refused with `422 invalid`. Needs the Maintain role or higher on the project's repository. Recorded in the [audit log](/guides/audit-log/). See [Settings](/guides/projects/#settings)."
7464 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person7465 "list_secret_scanning_alerts": {
7466 "params": {
7467 "owner": "flagon-io",
7468 "name": "hello"
7469 },
7470 "query": {
7471 "state": "open"
7472 },
7473 "response": [
7474 {
7475 "id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p",
7476 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
7477 "kind": "github_token",
7478 "label": "a GitHub token",
7479 "path": "scripts/release.sh",
7480 "line": 12,
7481 "commit": "4807077b296e6edbf410d55e72749d3e1170c291",
7482 "preview": "ghp_X7…",
7483 "status": "open",
7484 "source": "push",
7485 "found_by": "syntaqx",
7486 "found_at": "2026-10-06T09:14:02.118Z",
7487 "decided_by": null,
7488 "reason": null,
7489 "decided_at": null,
7490 "dismissed_reason": null,
7491 "test_value": null,
7492 "state": "open",
7493 "validity": "active",
7494 "validity_checked_at": "2026-10-06T09:20:41.502Z",
7495 "bypass": {
7496 "reason": "will_fix_later",
7497 "comment": "Rotating it this afternoon.",
7498 "by": "syntaqx",
7499 "at": "2026-10-06T09:14:02.118Z",
7500 "approved_by": null
7501 },
7502 "pattern_id": null,
7503 "pattern_name": null,
7504 "locations": 1
7505 }
7506 ],
7507 "notes": "| Filter | Values |\n| --- | --- |\n| `state` | `open` (in the history, or blocked at a push), `dismissed`, `fixed` |\n| `secret_type` | `aws_access_key`, `github_token`, `custom_pattern`, … |\n| `validity` | `active`, `inactive`, `unknown`, `unsupported` |\n| `bypassed` | `true` or `false` |\n\nThe secret itself is never returned: `preview` is enough to recognise it. `status` says where it stands: `open`, `blocked` (stopped at a push, never landed), `allowed` or `resolved`."
7508 },
7509 "list_secret_scanning_alerts_for_workspace": {
7510 "params": {
7511 "workspace": "flagon-io"
7512 },
7513 "query": {
7514 "state": "open"
7515 },
7516 "response": [
7517 {
7518 "repo": "hello",
7519 "secret": {
7520 "id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p",
7521 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
7522 "kind": "github_token",
7523 "label": "a GitHub token",
7524 "path": "scripts/release.sh",
7525 "line": 12,
7526 "commit": "4807077b296e6edbf410d55e72749d3e1170c291",
7527 "preview": "ghp_X7…",
7528 "status": "open",
7529 "source": "push",
7530 "found_by": "syntaqx",
7531 "found_at": "2026-10-06T09:14:02.118Z",
7532 "decided_by": null,
7533 "reason": null,
7534 "decided_at": null,
7535 "dismissed_reason": null,
7536 "test_value": null,
7537 "state": "open",
7538 "validity": "active",
7539 "validity_checked_at": "2026-10-06T09:20:41.502Z",
7540 "bypass": {
7541 "reason": "will_fix_later",
7542 "comment": "Rotating it this afternoon.",
7543 "by": "syntaqx",
7544 "at": "2026-10-06T09:14:02.118Z",
7545 "approved_by": null
7546 },
7547 "pattern_id": null,
7548 "pattern_name": null,
7549 "locations": 1
7550 }
7551 }
7552 ],
7553 "notes": "Every repository whose findings you may see, each alert with its repository's name."
7554 },
7555 "get_secret_scanning_alert": {
7556 "params": {
7557 "owner": "flagon-io",
7558 "name": "hello",
7559 "id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p"
7560 },
7561 "response": {
7562 "secret": {
7563 "id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p",
7564 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
7565 "kind": "github_token",
7566 "label": "a GitHub token",
7567 "path": "scripts/release.sh",
7568 "line": 12,
7569 "commit": "4807077b296e6edbf410d55e72749d3e1170c291",
7570 "preview": "ghp_X7…",
7571 "status": "blocked",
7572 "source": "push",
7573 "found_by": "syntaqx",
7574 "found_at": "2026-10-06T09:14:02.118Z",
7575 "decided_by": null,
7576 "reason": null,
7577 "decided_at": null,
7578 "dismissed_reason": null,
7579 "test_value": null,
7580 "state": "open",
7581 "validity": null,
7582 "validity_checked_at": null,
7583 "bypass": null,
7584 "pattern_id": null,
7585 "pattern_name": null,
7586 "locations": 1
7587 },
7588 "locations": [
7589 {
7590 "path": "scripts/release.sh",
7591 "line": 12,
7592 "commit": "4807077b296e6edbf410d55e72749d3e1170c291",
7593 "source": "push",
7594 "found_at": "2026-10-06T09:14:02.118Z"
7595 }
7596 ],
7597 "activity": [],
7598 "requests": [],
7599 "checkable": true,
7600 "can_bypass": true,
7601 "can_request_bypass": false
7602 }
7603 },
7604 "update_secret_scanning_alert": {
7605 "params": {
7606 "owner": "flagon-io",
7607 "name": "hello",
7608 "id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p"
7609 },
7610 "request": {
7611 "state": "dismissed",
7612 "reason": "revoked",
7613 "comment": "Rotated in the issuer's settings."
7614 },
7615 "response": {
7616 "id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p",
7617 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
7618 "kind": "github_token",
7619 "label": "a GitHub token",
7620 "path": "scripts/release.sh",
7621 "line": 12,
7622 "commit": "4807077b296e6edbf410d55e72749d3e1170c291",
7623 "preview": "ghp_X7…",
7624 "status": "resolved",
7625 "source": "push",
7626 "found_by": "syntaqx",
7627 "found_at": "2026-10-06T09:14:02.118Z",
7628 "decided_by": "syntaqx",
7629 "reason": "Rotated in the issuer's settings.",
7630 "decided_at": "2026-10-06T09:20:41.502Z",
7631 "dismissed_reason": "revoked",
7632 "test_value": null,
7633 "state": "fixed",
7634 "validity": "active",
7635 "validity_checked_at": "2026-10-06T09:20:41.502Z",
7636 "bypass": {
7637 "reason": "will_fix_later",
7638 "comment": "Rotating it this afternoon.",
7639 "by": "syntaqx",
7640 "at": "2026-10-06T09:14:02.118Z",
7641 "approved_by": null
7642 },
7643 "pattern_id": null,
7644 "pattern_name": null,
7645 "locations": 1
7646 },
7647 "notes": "Takes the Admin role: a dismissed secret is let through push protection, unless it was `revoked`, which marks it fixed. `state` `open` reopens it."
7648 },
7649 "list_secret_scanning_locations": {
7650 "params": {
7651 "owner": "flagon-io",
7652 "name": "hello",
7653 "id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p"
7654 },
7655 "response": [
7656 {
7657 "path": "scripts/release.sh",
7658 "line": 12,
7659 "commit": "4807077b296e6edbf410d55e72749d3e1170c291",
7660 "source": "push",
7661 "found_at": "2026-10-06T09:14:02.118Z"
7662 }
7663 ]
7664 },
7665 "bypass_push_protection": {
7666 "params": {
7667 "owner": "flagon-io",
7668 "name": "hello",
7669 "id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p"
7670 },
7671 "request": {
7672 "reason": "will_fix_later",
7673 "comment": "Rotating it this afternoon."
7674 },
7675 "response": {
7676 "secret": {
7677 "id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p",
7678 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
7679 "kind": "github_token",
7680 "label": "a GitHub token",
7681 "path": "scripts/release.sh",
7682 "line": 12,
7683 "commit": "4807077b296e6edbf410d55e72749d3e1170c291",
7684 "preview": "ghp_X7…",
7685 "status": "open",
7686 "source": "push",
7687 "found_by": "syntaqx",
7688 "found_at": "2026-10-06T09:14:02.118Z",
7689 "decided_by": null,
7690 "reason": null,
7691 "decided_at": null,
7692 "dismissed_reason": null,
7693 "test_value": null,
7694 "state": "open",
7695 "validity": null,
7696 "validity_checked_at": null,
7697 "bypass": {
7698 "reason": "will_fix_later",
7699 "comment": "Rotating it this afternoon.",
7700 "by": "syntaqx",
7701 "at": "2026-10-06T09:14:02.118Z",
7702 "approved_by": null
7703 },
7704 "pattern_id": null,
7705 "pattern_name": null,
7706 "locations": 1
7707 },
7708 "request": null
7709 },
7710 "notes": "| Reason | The alert |\n| --- | --- |\n| `false_positive` | Closed as a false positive |\n| `used_in_tests` | Closed as used in tests |\n| `will_fix_later` | Stays open, to be rotated |\n\nWith delegated bypass on, a call from someone who does not review bypasses makes a request instead: `request` is set and the secret is still blocked until an owner or admin approves it. Push again once it is bypassed."
7711 },
7712 "check_secret_validity": {
7713 "params": {
7714 "owner": "flagon-io",
7715 "name": "hello",
7716 "id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p"
7717 },
7718 "response": {
7719 "id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p",
7720 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
7721 "kind": "github_token",
7722 "label": "a GitHub token",
7723 "path": "scripts/release.sh",
7724 "line": 12,
7725 "commit": "4807077b296e6edbf410d55e72749d3e1170c291",
7726 "preview": "ghp_X7…",
7727 "status": "open",
7728 "source": "push",
7729 "found_by": "syntaqx",
7730 "found_at": "2026-10-06T09:14:02.118Z",
7731 "decided_by": null,
7732 "reason": null,
7733 "decided_at": null,
7734 "dismissed_reason": null,
7735 "test_value": null,
7736 "state": "open",
7737 "validity": "active",
7738 "validity_checked_at": "2026-10-06T09:20:41.502Z",
7739 "bypass": {
7740 "reason": "will_fix_later",
7741 "comment": "Rotating it this afternoon.",
7742 "by": "syntaqx",
7743 "at": "2026-10-06T09:14:02.118Z",
7744 "approved_by": null
7745 },
7746 "pattern_id": null,
7747 "pattern_name": null,
7748 "locations": 1
7749 },
7750 "notes": "Made for GitHub, GitLab, Stripe, Slack, npm, OpenAI, Anthropic and SendGrid tokens, with the issuer's own read-only call. Other formats answer `unsupported`; a secret that never landed answers `unknown`."
7751 },
7752 "list_bypass_requests": {
7753 "params": {
7754 "workspace": "flagon-io"
7755 },
7756 "query": {
7757 "state": "pending"
7758 },
7759 "response": [
7760 {
7761 "id": "byp_01kq2n8e5f6g7h8j9k0m1n2p3q",
7762 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
7763 "workspace": "flagon-io",
7764 "repo": "hello",
7765 "secret_id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p",
7766 "label": "a GitHub token",
7767 "path": "scripts/release.sh",
7768 "line": 12,
7769 "preview": "ghp_X7…",
7770 "requester": "ana",
7771 "reason": "used_in_tests",
7772 "comment": "A token from the test fixtures, never issued.",
7773 "state": "pending",
7774 "reviewer": null,
7775 "review_comment": null,
7776 "created_at": "2026-10-06T09:14:02.118Z",
7777 "reviewed_at": null
7778 }
7779 ]
7780 },
7781 "review_bypass_request": {
7782 "params": {
7783 "workspace": "flagon-io",
7784 "id": "byp_01kq2n8e5f6g7h8j9k0m1n2p3q"
7785 },
7786 "request": {
7787 "decision": "approve",
7788 "comment": "A fixture."
7789 },
7790 "response": {
7791 "id": "byp_01kq2n8e5f6g7h8j9k0m1n2p3q",
7792 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
7793 "workspace": "flagon-io",
7794 "repo": "hello",
7795 "secret_id": "sec_01kq2m7d4e5f6g7h8j9k0m1n2p",
7796 "label": "a GitHub token",
7797 "path": "scripts/release.sh",
7798 "line": 12,
7799 "preview": "ghp_X7…",
7800 "requester": "ana",
7801 "reason": "used_in_tests",
7802 "comment": "A token from the test fixtures, never issued.",
7803 "state": "approved",
7804 "reviewer": "syntaqx",
7805 "review_comment": "A fixture.",
7806 "created_at": "2026-10-06T09:14:02.118Z",
7807 "reviewed_at": "2026-10-06T09:20:41.502Z"
7808 }
7809 },
7810 "list_custom_patterns": {
7811 "params": {
7812 "owner": "flagon-io",
7813 "name": "hello"
7814 },
7815 "response": {
7816 "patterns": [
7817 {
7818 "id": "pat_01kq2p9f6g7h8j9k0m1n2p3q4r",
7819 "scope": "repository",
7820 "workspace": "flagon-io",
7821 "repo": "hello",
7822 "name": "Acme API key",
7823 "pattern": "acme_[a-z0-9]{32}",
7824 "before": null,
7825 "after": null,
7826 "test_strings": [
7827 "ACME_KEY=acme_0123456789abcdef0123456789abcdef"
7828 ],
7829 "state": "published",
7830 "created_by": "syntaqx",
7831 "created_at": "2026-10-06T09:14:02.118Z",
7832 "updated_by": "syntaqx",
7833 "updated_at": "2026-10-06T09:14:02.118Z",
7834 "open_alerts": 0
7835 }
7836 ],
7837 "entitled": true
7838 },
Pricing says it plainly: models at the provider's price, the agent rate for what g1t runs around every model call (the gateway, secrets, routing, context and pass-through to your own provider, so your own keys too), everything else at cost plus 20%, your own runners free, no seats; Security and quality comes with the plan with no separate fee, and live activations end. Each agent has an effort setting, Auto to Max, with what a typical task has cost at each level, and Spend's Spend less, keep quality suggests a lower level only when the agent's own past work shows quality held, to apply or dismiss. The pricing, spend and agents guides say how.7839 "notes": "A repository's list includes its workspace's patterns, with `scope` `workspace`. `entitled` says whether they run here: always on a public repository, and on a private one when the workspace is on the g1t plan."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person7840 },
7841 "list_custom_patterns_for_workspace": {
7842 "params": {
7843 "workspace": "flagon-io"
7844 },
7845 "response": {
7846 "patterns": [
7847 {
7848 "id": "pat_01kq2p9f6g7h8j9k0m1n2p3q4r",
7849 "scope": "workspace",
7850 "workspace": "flagon-io",
7851 "repo": null,
7852 "name": "Acme API key",
7853 "pattern": "acme_[a-z0-9]{32}",
7854 "before": null,
7855 "after": null,
7856 "test_strings": [
7857 "ACME_KEY=acme_0123456789abcdef0123456789abcdef"
7858 ],
7859 "state": "published",
7860 "created_by": "syntaqx",
7861 "created_at": "2026-10-06T09:14:02.118Z",
7862 "updated_by": "syntaqx",
7863 "updated_at": "2026-10-06T09:14:02.118Z",
7864 "open_alerts": 0
7865 }
7866 ],
7867 "entitled": true
7868 }
7869 },
7870 "create_custom_pattern": {
7871 "params": {
7872 "owner": "flagon-io",
7873 "name": "hello"
7874 },
7875 "request": {
7876 "pattern_name": "Acme API key",
7877 "pattern": "acme_[a-z0-9]{32}",
7878 "test_strings": [
7879 "ACME_KEY=acme_0123456789abcdef0123456789abcdef"
7880 ],
7881 "publish": true
7882 },
7883 "response": {
7884 "pattern": {
7885 "id": "pat_01kq2p9f6g7h8j9k0m1n2p3q4r",
7886 "scope": "repository",
7887 "workspace": "flagon-io",
7888 "repo": "hello",
7889 "name": "Acme API key",
7890 "pattern": "acme_[a-z0-9]{32}",
7891 "before": null,
7892 "after": null,
7893 "test_strings": [
7894 "ACME_KEY=acme_0123456789abcdef0123456789abcdef"
7895 ],
7896 "state": "published",
7897 "created_by": "syntaqx",
7898 "created_at": "2026-10-06T09:14:02.118Z",
7899 "updated_by": "syntaqx",
7900 "updated_at": "2026-10-06T09:14:02.118Z",
7901 "open_alerts": 0
7902 },
7903 "tests": [
7904 [
7905 9,
7906 46
7907 ]
7908 ]
7909 },
7910 "notes": "`tests` gives, for each test string, where the pattern matched (start and end, in characters), or `null`. A pattern that does not compile, matches an empty string, or is too complex is refused with `422` and says why."
7911 },
7912 "create_custom_pattern_for_workspace": {
7913 "params": {
7914 "workspace": "flagon-io"
7915 },
7916 "request": {
7917 "pattern_name": "Acme API key",
7918 "pattern": "acme_[a-z0-9]{32}",
7919 "publish": false
7920 },
7921 "response": {
7922 "pattern": {
7923 "id": "pat_01kq2p9f6g7h8j9k0m1n2p3q4r",
7924 "scope": "workspace",
7925 "workspace": "flagon-io",
7926 "repo": null,
7927 "name": "Acme API key",
7928 "pattern": "acme_[a-z0-9]{32}",
7929 "before": null,
7930 "after": null,
7931 "test_strings": [],
7932 "state": "draft",
7933 "created_by": "syntaqx",
7934 "created_at": "2026-10-06T09:14:02.118Z",
7935 "updated_by": "syntaqx",
7936 "updated_at": "2026-10-06T09:14:02.118Z",
7937 "open_alerts": 0
7938 },
7939 "tests": []
7940 }
7941 },
7942 "update_custom_pattern": {
7943 "params": {
7944 "owner": "flagon-io",
7945 "name": "hello",
7946 "id": "pat_01kq2p9f6g7h8j9k0m1n2p3q4r"
7947 },
7948 "request": {
7949 "pattern_name": "Acme API key",
7950 "pattern": "acme_[a-z0-9]{32,40}",
7951 "publish": true
7952 },
7953 "response": {
7954 "pattern": {
7955 "id": "pat_01kq2p9f6g7h8j9k0m1n2p3q4r",
7956 "scope": "repository",
7957 "workspace": "flagon-io",
7958 "repo": "hello",
7959 "name": "Acme API key",
7960 "pattern": "acme_[a-z0-9]{32,40}",
7961 "before": null,
7962 "after": null,
7963 "test_strings": [
7964 "ACME_KEY=acme_0123456789abcdef0123456789abcdef"
7965 ],
7966 "state": "published",
7967 "created_by": "syntaqx",
7968 "created_at": "2026-10-06T09:14:02.118Z",
7969 "updated_by": "syntaqx",
7970 "updated_at": "2026-10-06T09:14:02.118Z",
7971 "open_alerts": 0
7972 },
7973 "tests": [
7974 [
7975 9,
7976 46
7977 ]
7978 ]
7979 }
7980 },
7981 "update_custom_pattern_for_workspace": {
7982 "params": {
7983 "workspace": "flagon-io",
7984 "id": "pat_01kq2p9f6g7h8j9k0m1n2p3q4r"
7985 },
7986 "request": {
7987 "pattern_name": "Acme API key",
7988 "pattern": "acme_[a-z0-9]{32}",
7989 "publish": true
7990 },
7991 "response": {
7992 "pattern": {
7993 "id": "pat_01kq2p9f6g7h8j9k0m1n2p3q4r",
7994 "scope": "workspace",
7995 "workspace": "flagon-io",
7996 "repo": null,
7997 "name": "Acme API key",
7998 "pattern": "acme_[a-z0-9]{32}",
7999 "before": null,
8000 "after": null,
8001 "test_strings": [
8002 "ACME_KEY=acme_0123456789abcdef0123456789abcdef"
8003 ],
8004 "state": "published",
8005 "created_by": "syntaqx",
8006 "created_at": "2026-10-06T09:14:02.118Z",
8007 "updated_by": "syntaqx",
8008 "updated_at": "2026-10-06T09:14:02.118Z",
8009 "open_alerts": 0
8010 },
8011 "tests": [
8012 [
8013 9,
8014 46
8015 ]
8016 ]
8017 }
8018 },
8019 "delete_custom_pattern": {
8020 "params": {
8021 "owner": "flagon-io",
8022 "name": "hello",
8023 "id": "pat_01kq2p9f6g7h8j9k0m1n2p3q4r"
8024 },
8025 "response": {
8026 "deleted": true
8027 }
8028 },
8029 "delete_custom_pattern_for_workspace": {
8030 "params": {
8031 "workspace": "flagon-io",
8032 "id": "pat_01kq2p9f6g7h8j9k0m1n2p3q4r"
8033 },
8034 "response": {
8035 "deleted": true
8036 }
8037 },
8038 "dry_run_custom_pattern": {
8039 "params": {
8040 "owner": "flagon-io",
8041 "name": "hello"
8042 },
8043 "request": {
8044 "pattern": "acme_[a-z0-9]{32}"
8045 },
8046 "response": {
8047 "repos": [
8048 {
8049 "name": "hello",
8050 "files_scanned": 214,
8051 "matches": [
8052 {
8053 "path": "config/dev.env",
8054 "line": 3,
8055 "preview": "ACME_KEY=acme_01••••••••••••••••••••••••"
8056 }
8057 ],
8058 "truncated": false,
8059 "commit": "4807077b296e6edbf410d55e72749d3e1170c291"
8060 }
8061 ]
8062 },
8063 "notes": "Reads up to 2,000 files and 20 MB of the default branch, skipping what secret scanning skips. Nothing is recorded."
8064 },
8065 "dry_run_custom_pattern_for_workspace": {
8066 "params": {
8067 "workspace": "flagon-io"
8068 },
8069 "request": {
8070 "pattern": "acme_[a-z0-9]{32}",
8071 "repos": [
8072 "hello"
8073 ]
8074 },
8075 "response": {
8076 "repos": [
8077 {
8078 "name": "hello",
8079 "files_scanned": 214,
8080 "matches": [],
8081 "truncated": false,
8082 "commit": "4807077b296e6edbf410d55e72749d3e1170c291"
8083 }
8084 ]
8085 }
8086 },
8087 "list_code_scanning_alerts": {
8088 "params": {
8089 "owner": "flagon-io",
8090 "name": "hello"
8091 },
8092 "query": {
8093 "state": "open",
8094 "severity": "high"
8095 },
8096 "response": [
8097 {
8098 "id": "cod_01kq2qag7h8j9k0m1n2p3q4r5s",
8099 "number": 4,
8100 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
8101 "tool": "Semgrep OSS",
8102 "category": "Semgrep OSS",
8103 "rule_id": "javascript.lang.security.detect-child-process.detect-child-process",
8104 "rule_name": "javascript.lang.security.detect-child-process.detect-child-process",
8105 "rule_description": "Detected calls to child_process from a function argument.",
8106 "help": null,
8107 "help_uri": "https://semgrep.dev/r/javascript.lang.security.detect-child-process.detect-child-process",
8108 "tags": [
8109 "security",
8110 "CWE-78"
8111 ],
8112 "level": "error",
8113 "security_severity": null,
8114 "severity": "high",
8115 "message": "Detected calls to child_process from a function argument `req`. This could lead to a command injection.",
8116 "path": "src/server.js",
8117 "start_line": 6,
8118 "end_line": 6,
8119 "start_column": 3,
8120 "end_column": 60,
8121 "state": "open",
8122 "fingerprint": "3f1c9a0e7b2d4c5e6f708192a3b4c5d6",
8123 "first_commit": "4807077b296e6edbf410d55e72749d3e1170c291",
8124 "last_commit": "4807077b296e6edbf410d55e72749d3e1170c291",
8125 "created_at": "2026-10-06T09:14:02.118Z",
8126 "updated_at": "2026-10-06T09:14:02.118Z",
8127 "fixed_at": null,
8128 "dismissed_by": null,
8129 "dismissed_reason": null,
8130 "dismissed_comment": null,
8131 "dismissed_at": null,
8132 "issue": null
8133 }
8134 ],
8135 "notes": "`severity` is the rule's security severity when it has one (from its `security-severity` score), else from the result's level: `error` high, `warning` medium, `note` low."
8136 },
8137 "list_code_scanning_alerts_for_workspace": {
8138 "params": {
8139 "workspace": "flagon-io"
8140 },
8141 "query": {
8142 "state": "open"
8143 },
8144 "response": [
8145 {
8146 "repo": "hello",
8147 "code": {
8148 "id": "cod_01kq2qag7h8j9k0m1n2p3q4r5s",
8149 "number": 4,
8150 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
8151 "tool": "Semgrep OSS",
8152 "category": "Semgrep OSS",
8153 "rule_id": "javascript.lang.security.detect-child-process.detect-child-process",
8154 "rule_name": "javascript.lang.security.detect-child-process.detect-child-process",
8155 "rule_description": "Detected calls to child_process from a function argument.",
8156 "help": null,
8157 "help_uri": "https://semgrep.dev/r/javascript.lang.security.detect-child-process.detect-child-process",
8158 "tags": [
8159 "security",
8160 "CWE-78"
8161 ],
8162 "level": "error",
8163 "security_severity": null,
8164 "severity": "high",
8165 "message": "Detected calls to child_process from a function argument `req`. This could lead to a command injection.",
8166 "path": "src/server.js",
8167 "start_line": 6,
8168 "end_line": 6,
8169 "start_column": 3,
8170 "end_column": 60,
8171 "state": "open",
8172 "fingerprint": "3f1c9a0e7b2d4c5e6f708192a3b4c5d6",
8173 "first_commit": "4807077b296e6edbf410d55e72749d3e1170c291",
8174 "last_commit": "4807077b296e6edbf410d55e72749d3e1170c291",
8175 "created_at": "2026-10-06T09:14:02.118Z",
8176 "updated_at": "2026-10-06T09:14:02.118Z",
8177 "fixed_at": null,
8178 "dismissed_by": null,
8179 "dismissed_reason": null,
8180 "dismissed_comment": null,
8181 "dismissed_at": null,
8182 "issue": null
8183 }
8184 }
8185 ]
8186 },
8187 "get_code_scanning_alert": {
8188 "params": {
8189 "owner": "flagon-io",
8190 "name": "hello",
8191 "number": 4
8192 },
8193 "response": {
8194 "alert": {
8195 "id": "cod_01kq2qag7h8j9k0m1n2p3q4r5s",
8196 "number": 4,
8197 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
8198 "tool": "Semgrep OSS",
8199 "category": "Semgrep OSS",
8200 "rule_id": "javascript.lang.security.detect-child-process.detect-child-process",
8201 "rule_name": "javascript.lang.security.detect-child-process.detect-child-process",
8202 "rule_description": "Detected calls to child_process from a function argument.",
8203 "help": null,
8204 "help_uri": "https://semgrep.dev/r/javascript.lang.security.detect-child-process.detect-child-process",
8205 "tags": [
8206 "security",
8207 "CWE-78"
8208 ],
8209 "level": "error",
8210 "security_severity": null,
8211 "severity": "high",
8212 "message": "Detected calls to child_process from a function argument `req`. This could lead to a command injection.",
8213 "path": "src/server.js",
8214 "start_line": 6,
8215 "end_line": 6,
8216 "start_column": 3,
8217 "end_column": 60,
8218 "state": "open",
8219 "fingerprint": "3f1c9a0e7b2d4c5e6f708192a3b4c5d6",
8220 "first_commit": "4807077b296e6edbf410d55e72749d3e1170c291",
8221 "last_commit": "4807077b296e6edbf410d55e72749d3e1170c291",
8222 "created_at": "2026-10-06T09:14:02.118Z",
8223 "updated_at": "2026-10-06T09:14:02.118Z",
8224 "fixed_at": null,
8225 "dismissed_by": null,
8226 "dismissed_reason": null,
8227 "dismissed_comment": null,
8228 "dismissed_at": null,
8229 "issue": null
8230 },
8231 "activity": [],
8232 "analyses": [
8233 {
8234 "id": "ana_01kq2rbh8j9k0m1n2p3q4r5s6t",
8235 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
8236 "sarif_id": "sar_01kq2scj9k0m1n2p3q4r5s6t7v",
8237 "tool": "Semgrep OSS",
8238 "tool_version": "1.140.0",
8239 "category": "Semgrep OSS",
8240 "commit_sha": "4807077b296e6edbf410d55e72749d3e1170c291",
8241 "git_ref": "refs/heads/main",
8242 "pull": null,
8243 "results": 7,
8244 "new_alerts": 2,
8245 "fixed_alerts": 1,
8246 "dropped": 0,
8247 "created_at": "2026-10-06T09:14:02.118Z"
8248 }
8249 ]
8250 }
8251 },
8252 "update_code_scanning_alert": {
8253 "params": {
8254 "owner": "flagon-io",
8255 "name": "hello",
8256 "number": 4
8257 },
8258 "request": {
8259 "state": "dismissed",
8260 "dismissed_reason": "false_positive",
8261 "dismissed_comment": "The argument is a constant."
8262 },
8263 "response": {
8264 "id": "cod_01kq2qag7h8j9k0m1n2p3q4r5s",
8265 "number": 4,
8266 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
8267 "tool": "Semgrep OSS",
8268 "category": "Semgrep OSS",
8269 "rule_id": "javascript.lang.security.detect-child-process.detect-child-process",
8270 "rule_name": "javascript.lang.security.detect-child-process.detect-child-process",
8271 "rule_description": "Detected calls to child_process from a function argument.",
8272 "help": null,
8273 "help_uri": "https://semgrep.dev/r/javascript.lang.security.detect-child-process.detect-child-process",
8274 "tags": [
8275 "security",
8276 "CWE-78"
8277 ],
8278 "level": "error",
8279 "security_severity": null,
8280 "severity": "high",
8281 "message": "Detected calls to child_process from a function argument `req`. This could lead to a command injection.",
8282 "path": "src/server.js",
8283 "start_line": 6,
8284 "end_line": 6,
8285 "start_column": 3,
8286 "end_column": 60,
8287 "state": "dismissed",
8288 "fingerprint": "3f1c9a0e7b2d4c5e6f708192a3b4c5d6",
8289 "first_commit": "4807077b296e6edbf410d55e72749d3e1170c291",
8290 "last_commit": "4807077b296e6edbf410d55e72749d3e1170c291",
8291 "created_at": "2026-10-06T09:14:02.118Z",
8292 "updated_at": "2026-10-06T09:14:02.118Z",
8293 "fixed_at": null,
8294 "dismissed_by": "syntaqx",
8295 "dismissed_reason": "false_positive",
8296 "dismissed_comment": "The argument is a constant.",
8297 "dismissed_at": "2026-10-06T09:20:41.502Z",
8298 "issue": null
8299 }
8300 },
8301 "list_code_scanning_analyses": {
8302 "params": {
8303 "owner": "flagon-io",
8304 "name": "hello"
8305 },
8306 "response": [
8307 {
8308 "id": "ana_01kq2rbh8j9k0m1n2p3q4r5s6t",
8309 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
8310 "sarif_id": "sar_01kq2scj9k0m1n2p3q4r5s6t7v",
8311 "tool": "Semgrep OSS",
8312 "tool_version": "1.140.0",
8313 "category": "Semgrep OSS",
8314 "commit_sha": "4807077b296e6edbf410d55e72749d3e1170c291",
8315 "git_ref": "refs/heads/main",
8316 "pull": null,
8317 "results": 7,
8318 "new_alerts": 2,
8319 "fixed_alerts": 1,
8320 "dropped": 0,
8321 "created_at": "2026-10-06T09:14:02.118Z"
8322 }
8323 ]
8324 },
8325 "upload_sarif": {
8326 "params": {
8327 "owner": "flagon-io",
8328 "name": "hello"
8329 },
8330 "request": {
8331 "commit_sha": "4807077b296e6edbf410d55e72749d3e1170c291",
8332 "ref": "refs/heads/main",
8333 "sarif": "H4sIAAAAAAAA…",
8334 "checkout_uri": "file:///home/runner/work/repo"
8335 },
8336 "response": {
8337 "id": "sar_01kq2scj9k0m1n2p3q4r5s6t7v",
8338 "processing_status": "complete",
8339 "analyses": [
8340 "ana_01kq2rbh8j9k0m1n2p3q4r5s6t"
8341 ],
8342 "errors": [],
8343 "commit_sha": "4807077b296e6edbf410d55e72749d3e1170c291",
8344 "git_ref": "refs/heads/main",
8345 "created_at": "2026-10-06T09:14:02.118Z"
8346 },
8347 "notes": "`sarif` is the SARIF 2.1.0 file gzipped, then base64-encoded: `gzip -c results.sarif | base64 -w0`. The upload is read at once: `processing_status` is `complete` or `failed`, with `errors` saying why. For `refs/pull/<number>/head`, the results become the pull request's `Code scanning` check instead of alerts."
8348 },
8349 "get_sarif_upload": {
8350 "params": {
8351 "owner": "flagon-io",
8352 "name": "hello",
8353 "id": "sar_01kq2scj9k0m1n2p3q4r5s6t7v"
8354 },
8355 "response": {
8356 "id": "sar_01kq2scj9k0m1n2p3q4r5s6t7v",
8357 "processing_status": "complete",
8358 "analyses": [
8359 "ana_01kq2rbh8j9k0m1n2p3q4r5s6t"
8360 ],
8361 "errors": [],
8362 "commit_sha": "4807077b296e6edbf410d55e72749d3e1170c291",
8363 "git_ref": "refs/heads/main",
8364 "created_at": "2026-10-06T09:14:02.118Z"
8365 }
8366 },
8367 "list_vulnerability_alerts": {
8368 "params": {
8369 "owner": "flagon-io",
8370 "name": "hello"
8371 },
8372 "query": {
8373 "state": "open"
8374 },
8375 "response": [
8376 {
8377 "id": "vul_01kp4b8c3d4e5f6g7h8j9k0m1n",
8378 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
8379 "ecosystem": "npm",
8380 "package": "lodash",
8381 "version": "4.17.20",
8382 "manifest": "package-lock.json",
8383 "advisory": "GHSA-35jh-r3h4-6jhm",
8384 "osv_id": "GHSA-35jh-r3h4-6jhm",
8385 "summary": "Command Injection in lodash",
8386 "severity": "high",
8387 "fixed_version": "4.17.21",
8388 "status": "open",
8389 "issue": null,
8390 "found_at": "2026-10-06T09:14:02.118Z",
8391 "fixed_at": null,
8392 "state": "open",
8393 "dismissed_by": null,
8394 "dismissed_reason": null,
8395 "dismissed_comment": null,
8396 "dismissed_at": null,
8397 "update": null
8398 }
8399 ]
8400 },
8401 "list_vulnerability_alerts_for_workspace": {
8402 "params": {
8403 "workspace": "flagon-io"
8404 },
8405 "query": {
8406 "severity": "critical"
8407 },
8408 "response": [
8409 {
8410 "repo": "hello",
8411 "vulnerability": {
8412 "id": "vul_01kp4b8c3d4e5f6g7h8j9k0m1n",
8413 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
8414 "ecosystem": "npm",
8415 "package": "lodash",
8416 "version": "4.17.20",
8417 "manifest": "package-lock.json",
8418 "advisory": "GHSA-35jh-r3h4-6jhm",
8419 "osv_id": "GHSA-35jh-r3h4-6jhm",
8420 "summary": "Command Injection in lodash",
8421 "severity": "high",
8422 "fixed_version": "4.17.21",
8423 "status": "open",
8424 "issue": null,
8425 "found_at": "2026-10-06T09:14:02.118Z",
8426 "fixed_at": null,
8427 "state": "open",
8428 "dismissed_by": null,
8429 "dismissed_reason": null,
8430 "dismissed_comment": null,
8431 "dismissed_at": null,
8432 "update": null
8433 }
8434 }
8435 ]
8436 },
8437 "get_vulnerability_alert": {
8438 "params": {
8439 "owner": "flagon-io",
8440 "name": "hello",
8441 "id": "vul_01kp4b8c3d4e5f6g7h8j9k0m1n"
8442 },
8443 "response": {
8444 "id": "vul_01kp4b8c3d4e5f6g7h8j9k0m1n",
8445 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
8446 "ecosystem": "npm",
8447 "package": "lodash",
8448 "version": "4.17.20",
8449 "manifest": "package-lock.json",
8450 "advisory": "GHSA-35jh-r3h4-6jhm",
8451 "osv_id": "GHSA-35jh-r3h4-6jhm",
8452 "summary": "Command Injection in lodash",
8453 "severity": "high",
8454 "fixed_version": "4.17.21",
8455 "status": "open",
8456 "issue": null,
8457 "found_at": "2026-10-06T09:14:02.118Z",
8458 "fixed_at": null,
8459 "state": "open",
8460 "dismissed_by": null,
8461 "dismissed_reason": null,
8462 "dismissed_comment": null,
8463 "dismissed_at": null,
8464 "update": null
8465 }
8466 },
8467 "update_vulnerability_alert": {
8468 "params": {
8469 "owner": "flagon-io",
8470 "name": "hello",
8471 "id": "vul_01kp4b8c3d4e5f6g7h8j9k0m1n"
8472 },
8473 "request": {
8474 "state": "dismissed",
8475 "reason": "tolerable_risk",
8476 "comment": "Only the build uses it."
8477 },
8478 "response": {
8479 "id": "vul_01kp4b8c3d4e5f6g7h8j9k0m1n",
8480 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
8481 "ecosystem": "npm",
8482 "package": "lodash",
8483 "version": "4.17.20",
8484 "manifest": "package-lock.json",
8485 "advisory": "GHSA-35jh-r3h4-6jhm",
8486 "osv_id": "GHSA-35jh-r3h4-6jhm",
8487 "summary": "Command Injection in lodash",
8488 "severity": "high",
8489 "fixed_version": "4.17.21",
8490 "status": "dismissed",
8491 "issue": null,
8492 "found_at": "2026-10-06T09:14:02.118Z",
8493 "fixed_at": null,
8494 "state": "dismissed",
8495 "dismissed_by": "syntaqx",
8496 "dismissed_reason": "tolerable_risk",
8497 "dismissed_comment": "Only the build uses it.",
8498 "dismissed_at": "2026-10-06T09:20:41.502Z",
8499 "update": null
8500 }
8501 },
8502 "get_dependency_graph": {
8503 "params": {
8504 "owner": "flagon-io",
8505 "name": "hello"
8506 },
8507 "response": {
8508 "commit": "4807077b296e6edbf410d55e72749d3e1170c291",
8509 "manifests": [
8510 {
8511 "path": "package-lock.json",
8512 "ecosystem": "npm",
8513 "dependencies": 2,
8514 "direct": 1
8515 }
8516 ],
8517 "dependencies": [
8518 {
8519 "ecosystem": "npm",
8520 "name": "lodash",
8521 "version": "4.17.20",
8522 "manifest": "package-lock.json",
8523 "relationship": "direct",
8524 "development": false,
8525 "license": "MIT",
8526 "purl": "pkg:npm/lodash@4.17.20",
8527 "vulnerabilities": 1
8528 },
8529 {
8530 "ecosystem": "npm",
8531 "name": "ms",
8532 "version": "2.1.3",
8533 "manifest": "package-lock.json",
8534 "relationship": "transitive",
8535 "development": false,
8536 "license": "MIT",
8537 "purl": "pkg:npm/ms@2.1.3",
8538 "vulnerabilities": 0
8539 }
8540 ]
8541 }
8542 },
8543 "get_sbom": {
8544 "params": {
8545 "owner": "flagon-io",
8546 "name": "hello"
8547 },
8548 "response": {
8549 "sbom": {
8550 "spdxVersion": "SPDX-2.3",
8551 "dataLicense": "CC0-1.0",
8552 "SPDXID": "SPDXRef-DOCUMENT",
8553 "name": "flagon-io/hello dependency graph",
8554 "documentNamespace": "https://g1t.sh/flagon-io/hello/sbom/sbom_01kq2tdk0m1n2p3q4r5s6t7v8w",
8555 "creationInfo": {
8556 "created": "2026-10-06T09:14:02Z",
8557 "creators": [
8558 "Tool: g1t",
8559 "Organization: g1t"
8560 ],
8561 "comment": "Read from the repository's lockfiles on its default branch."
8562 },
8563 "documentDescribes": [
8564 "SPDXRef-Repository-flagon-io-hello"
8565 ],
8566 "packages": [
8567 {
8568 "SPDXID": "SPDXRef-Repository-flagon-io-hello",
8569 "name": "flagon-io/hello",
8570 "versionInfo": "4807077b296e6edbf410d55e72749d3e1170c291",
8571 "downloadLocation": "git+https://g1t.sh/flagon-io/hello.git",
8572 "filesAnalyzed": false,
8573 "licenseConcluded": "NOASSERTION",
8574 "licenseDeclared": "NOASSERTION",
8575 "copyrightText": "NOASSERTION",
8576 "primaryPackagePurpose": "SOURCE",
8577 "externalRefs": []
8578 },
8579 {
8580 "SPDXID": "SPDXRef-Package-npm-lodash-4.17.20",
8581 "name": "lodash",
8582 "versionInfo": "4.17.20",
8583 "downloadLocation": "NOASSERTION",
8584 "filesAnalyzed": false,
8585 "licenseConcluded": "NOASSERTION",
8586 "licenseDeclared": "MIT",
8587 "copyrightText": "NOASSERTION",
8588 "primaryPackagePurpose": "LIBRARY",
8589 "comment": "Resolved by package-lock.json (direct dependency).",
8590 "externalRefs": [
8591 {
8592 "referenceCategory": "PACKAGE-MANAGER",
8593 "referenceType": "purl",
8594 "referenceLocator": "pkg:npm/lodash@4.17.20"
8595 }
8596 ]
8597 }
8598 ],
8599 "relationships": [
8600 {
8601 "spdxElementId": "SPDXRef-DOCUMENT",
8602 "relationshipType": "DESCRIBES",
8603 "relatedSpdxElement": "SPDXRef-Repository-flagon-io-hello"
8604 },
8605 {
8606 "spdxElementId": "SPDXRef-Repository-flagon-io-hello",
8607 "relationshipType": "DEPENDS_ON",
8608 "relatedSpdxElement": "SPDXRef-Package-npm-lodash-4.17.20"
8609 }
8610 ]
8611 }
8612 },
8613 "notes": "`sbom` is an SPDX 2.3 JSON document, sent as SPDX spells it. Save it with `jq .sbom`."
8614 },
8615 "compare_dependencies": {
8616 "params": {
8617 "owner": "flagon-io",
8618 "name": "hello",
8619 "basehead": "main...upgrade-deps"
8620 },
8621 "response": {
8622 "base": "main",
8623 "head": "upgrade-deps",
8624 "changes": [
8625 {
8626 "change_type": "added",
8627 "manifest": "package-lock.json",
8628 "ecosystem": "npm",
8629 "name": "lodash",
8630 "version": "4.17.20",
8631 "relationship": "direct",
8632 "development": false,
8633 "license": "MIT",
8634 "purl": "pkg:npm/lodash@4.17.20",
8635 "vulnerabilities": [
8636 {
8637 "advisory": "GHSA-35jh-r3h4-6jhm",
8638 "osv_id": "GHSA-35jh-r3h4-6jhm",
8639 "summary": "Command Injection in lodash",
8640 "severity": "high",
8641 "fixed_version": "4.17.21",
8642 "url": "https://osv.dev/vulnerability/GHSA-35jh-r3h4-6jhm"
8643 }
8644 ],
8645 "denied_license": false,
8646 "failing": true
8647 },
8648 {
8649 "change_type": "removed",
8650 "manifest": "package-lock.json",
8651 "ecosystem": "npm",
8652 "name": "lodash",
8653 "version": "4.17.21",
8654 "relationship": "direct",
8655 "development": false,
8656 "license": "MIT",
8657 "purl": "pkg:npm/lodash@4.17.21",
8658 "vulnerabilities": [],
8659 "denied_license": false,
8660 "failing": false
8661 }
8662 ],
8663 "passed": false,
8664 "headline": "Adds 1 vulnerable package",
8665 "fail_on": "high",
8666 "deny_licenses": []
8667 }
8668 },
8669 "get_security_settings": {
8670 "params": {
8671 "owner": "flagon-io",
8672 "name": "hello"
8673 },
8674 "response": {
8675 "settings": {
8676 "code_scanning_gate": "high",
8677 "dependency_review": true,
8678 "review_fail_on": "high",
8679 "review_deny_licenses": [
8680 "AGPL-3.0-only"
8681 ],
Merge remote-tracking branch 'origin/claude/cool-newton-7nm8r9' into claude/cool-newton-7nm8r98682 "review_comment": true,
8683 "history_alerts": true,
8684 "private_vulnerability_reporting": false
Merge Stripe Tax, the card fee on card payments, and one free workspace per person8685 },
8686 "workspace": {
8687 "delegated_bypass": true,
8688 "validity_checks": true
8689 },
8690 "private": true,
8691 "entitled": true,
8692 "upkeep": true
8693 }
8694 },
8695 "update_security_settings": {
8696 "params": {
8697 "owner": "flagon-io",
8698 "name": "hello"
8699 },
8700 "request": {
8701 "code_scanning_gate": "high",
8702 "review_deny_licenses": [
8703 "AGPL-3.0-only"
8704 ]
8705 },
8706 "response": {
8707 "settings": {
8708 "code_scanning_gate": "high",
8709 "dependency_review": true,
8710 "review_fail_on": "high",
8711 "review_deny_licenses": [
8712 "AGPL-3.0-only"
8713 ],
Merge remote-tracking branch 'origin/claude/cool-newton-7nm8r9' into claude/cool-newton-7nm8r98714 "review_comment": true,
8715 "history_alerts": true,
8716 "private_vulnerability_reporting": true
Merge Stripe Tax, the card fee on card payments, and one free workspace per person8717 },
8718 "workspace": {
8719 "delegated_bypass": true,
8720 "validity_checks": true
8721 },
8722 "private": true,
8723 "entitled": true,
8724 "upkeep": true
8725 },
8726 "notes": "Only what you send changes. The `Code scanning` and `Dependency review` checks gate merges once you require them in branch protection."
8727 },
8728 "get_workspace_security_settings": {
8729 "params": {
8730 "workspace": "flagon-io"
8731 },
8732 "response": {
8733 "settings": {
8734 "delegated_bypass": true,
8735 "validity_checks": true
8736 },
8737 "activated": true
8738 }
8739 },
8740 "update_workspace_security_settings": {
8741 "params": {
8742 "workspace": "flagon-io"
8743 },
8744 "request": {
8745 "delegated_bypass": true
8746 },
8747 "response": {
8748 "settings": {
8749 "delegated_bypass": true,
8750 "validity_checks": true
8751 },
8752 "activated": true
8753 }
8754 },
Merge remote-tracking branch 'origin/claude/cool-newton-7nm8r9' into claude/cool-newton-7nm8r98755 "list_security_advisories": {
8756 "params": {
8757 "owner": "flagon-io",
8758 "name": "hello"
8759 },
8760 "query": {
8761 "state": "published"
8762 },
8763 "response": [
8764 {
8765 "id": "adv_01kq2p9f6g7h8j9k0m1n2p3q4r",
8766 "g1tsa_id": "G1TSA-2026-h7kd-3mqw",
8767 "repo_id": "rep_01kq2p9f6g7h8j9k0m1n2p3q4r",
8768 "repo": "flagon-io/hello",
8769 "title": "Path traversal in the archive reader",
8770 "description": "A crafted archive could write outside the directory it is extracted to.\n\nUpgrade to 1.4.1.",
8771 "severity": "high",
8772 "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N",
8773 "cvss_score": 8.1,
8774 "cve_id": "CVE-2026-12345",
8775 "ecosystem": "npm",
8776 "package": "@flagon/hello",
8777 "affected_versions": ">= 1.2.0, < 1.4.1",
8778 "patched_versions": ">= 1.4.1",
8779 "state": "published",
8780 "credits": [
8781 "ana"
8782 ],
8783 "report_id": "vrp_01kq2p9f6g7h8j9k0m1n2p3q4r",
8784 "created_by": "syntaqx",
8785 "created_at": "2026-10-06T09:14:02.118Z",
8786 "updated_at": "2026-10-07T15:02:40.000Z",
8787 "published_at": "2026-10-07T15:02:40.000Z",
8788 "withdrawn_at": null
8789 }
8790 ],
8791 "notes": "Without a token, or with one that has no Write on the repository, only published advisories are listed. `state` filters to `draft`, `published` or `withdrawn`; drafts and withdrawn advisories are shown only to those who see the repository's findings."
8792 },
8793 "get_security_advisory": {
8794 "params": {
8795 "owner": "flagon-io",
8796 "name": "hello",
8797 "id": "G1TSA-2026-h7kd-3mqw"
8798 },
8799 "response": {
8800 "id": "adv_01kq2p9f6g7h8j9k0m1n2p3q4r",
8801 "g1tsa_id": "G1TSA-2026-h7kd-3mqw",
8802 "repo_id": "rep_01kq2p9f6g7h8j9k0m1n2p3q4r",
8803 "repo": "flagon-io/hello",
8804 "title": "Path traversal in the archive reader",
8805 "description": "A crafted archive could write outside the directory it is extracted to.\n\nUpgrade to 1.4.1.",
8806 "severity": "high",
8807 "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N",
8808 "cvss_score": 8.1,
8809 "cve_id": "CVE-2026-12345",
8810 "ecosystem": "npm",
8811 "package": "@flagon/hello",
8812 "affected_versions": ">= 1.2.0, < 1.4.1",
8813 "patched_versions": ">= 1.4.1",
8814 "state": "published",
8815 "credits": [
8816 "ana"
8817 ],
8818 "report_id": "vrp_01kq2p9f6g7h8j9k0m1n2p3q4r",
8819 "created_by": "syntaqx",
8820 "created_at": "2026-10-06T09:14:02.118Z",
8821 "updated_at": "2026-10-07T15:02:40.000Z",
8822 "published_at": "2026-10-07T15:02:40.000Z",
8823 "withdrawn_at": null
8824 },
8825 "notes": "`id` is the advisory's `adv_…` id or its `G1TSA-…` id. A draft or withdrawn advisory is `404` to anyone who does not see the repository's findings."
8826 },
8827 "create_security_advisory": {
8828 "params": {
8829 "owner": "flagon-io",
8830 "name": "hello"
8831 },
8832 "request": {
8833 "title": "Path traversal in the archive reader",
8834 "description": "A crafted archive could write outside the directory it is extracted to.",
8835 "severity": "high",
8836 "ecosystem": "npm",
8837 "package": "@flagon/hello",
8838 "affected_versions": ">= 1.2.0, < 1.4.1",
8839 "patched_versions": ">= 1.4.1",
8840 "credits": [
8841 "ana"
8842 ]
8843 },
8844 "response": {
8845 "id": "adv_01kq2p9f6g7h8j9k0m1n2p3q4r",
8846 "g1tsa_id": "G1TSA-2026-h7kd-3mqw",
8847 "repo_id": "rep_01kq2p9f6g7h8j9k0m1n2p3q4r",
8848 "repo": "flagon-io/hello",
8849 "title": "Path traversal in the archive reader",
8850 "description": "A crafted archive could write outside the directory it is extracted to.",
8851 "severity": "high",
8852 "cvss_vector": null,
8853 "cvss_score": null,
8854 "cve_id": null,
8855 "ecosystem": "npm",
8856 "package": "@flagon/hello",
8857 "affected_versions": ">= 1.2.0, < 1.4.1",
8858 "patched_versions": ">= 1.4.1",
8859 "state": "draft",
8860 "credits": [
8861 "ana"
8862 ],
8863 "report_id": null,
8864 "created_by": "syntaqx",
8865 "created_at": "2026-10-06T09:14:02.118Z",
8866 "updated_at": "2026-10-06T09:14:02.118Z",
8867 "published_at": null,
8868 "withdrawn_at": null
8869 },
8870 "notes": "The advisory starts as a draft nobody but the maintainers sees; publish it with `POST …/advisories/{id}/state`. Takes the Admin role, or a security manager of the workspace. A title or severity that is missing, or a `cve_id` that is not of the form `CVE-2026-12345`, is `422`."
8871 },
8872 "update_security_advisory": {
8873 "params": {
8874 "owner": "flagon-io",
8875 "name": "hello",
8876 "id": "adv_01kq2p9f6g7h8j9k0m1n2p3q4r"
8877 },
8878 "request": {
8879 "cve_id": "CVE-2026-12345",
8880 "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N",
8881 "cvss_score": 8.1
8882 },
8883 "response": {
8884 "id": "adv_01kq2p9f6g7h8j9k0m1n2p3q4r",
8885 "g1tsa_id": "G1TSA-2026-h7kd-3mqw",
8886 "repo_id": "rep_01kq2p9f6g7h8j9k0m1n2p3q4r",
8887 "repo": "flagon-io/hello",
8888 "title": "Path traversal in the archive reader",
8889 "description": "A crafted archive could write outside the directory it is extracted to.",
8890 "severity": "high",
8891 "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N",
8892 "cvss_score": 8.1,
8893 "cve_id": "CVE-2026-12345",
8894 "ecosystem": "npm",
8895 "package": "@flagon/hello",
8896 "affected_versions": ">= 1.2.0, < 1.4.1",
8897 "patched_versions": ">= 1.4.1",
8898 "state": "draft",
8899 "credits": [
8900 "ana"
8901 ],
8902 "report_id": null,
8903 "created_by": "syntaqx",
8904 "created_at": "2026-10-06T09:14:02.118Z",
8905 "updated_at": "2026-10-06T10:30:00.000Z",
8906 "published_at": null,
8907 "withdrawn_at": null
8908 },
8909 "notes": "What the request leaves out stays as it is. A published advisory may be changed; its page shows the change at once."
8910 },
8911 "set_security_advisory_state": {
8912 "params": {
8913 "owner": "flagon-io",
8914 "name": "hello",
8915 "id": "adv_01kq2p9f6g7h8j9k0m1n2p3q4r"
8916 },
8917 "request": {
8918 "state": "published"
8919 },
8920 "response": {
8921 "id": "adv_01kq2p9f6g7h8j9k0m1n2p3q4r",
8922 "g1tsa_id": "G1TSA-2026-h7kd-3mqw",
8923 "repo_id": "rep_01kq2p9f6g7h8j9k0m1n2p3q4r",
8924 "repo": "flagon-io/hello",
8925 "title": "Path traversal in the archive reader",
8926 "description": "A crafted archive could write outside the directory it is extracted to.",
8927 "severity": "high",
8928 "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N",
8929 "cvss_score": 8.1,
8930 "cve_id": "CVE-2026-12345",
8931 "ecosystem": "npm",
8932 "package": "@flagon/hello",
8933 "affected_versions": ">= 1.2.0, < 1.4.1",
8934 "patched_versions": ">= 1.4.1",
8935 "state": "published",
8936 "credits": [
8937 "ana"
8938 ],
8939 "report_id": null,
8940 "created_by": "syntaqx",
8941 "created_at": "2026-10-06T09:14:02.118Z",
8942 "updated_at": "2026-10-07T15:02:40.000Z",
8943 "published_at": "2026-10-07T15:02:40.000Z",
8944 "withdrawn_at": null
8945 },
8946 "notes": "Publishing a draft with no description is `422`. Publishing sends `security_advisory.published` to webhooks and tells the repository's watchers who chose security alerts; withdrawing (`state` `withdrawn`) sends `security_advisory.withdrawn`. A withdrawn advisory can be published again. Asking for the state it already has is `409`."
8947 },
8948 "list_vulnerability_reports": {
8949 "params": {
8950 "owner": "flagon-io",
8951 "name": "hello"
8952 },
8953 "query": {
8954 "state": "new"
8955 },
8956 "response": [
8957 {
8958 "id": "vrp_01kq2p9f6g7h8j9k0m1n2p3q4r",
8959 "repo_id": "rep_01kq2p9f6g7h8j9k0m1n2p3q4r",
8960 "repo": "flagon-io/hello",
8961 "reporter": null,
8962 "reporter_email": "finder@example.com",
8963 "title": "Path traversal in the archive reader",
8964 "description": "Extracting an archive with an entry named ../../etc/passwd writes outside the target directory. Steps: …",
8965 "severity": "high",
8966 "state": "new",
8967 "advisory_id": null,
8968 "created_at": "2026-10-06T08:40:11.000Z",
8969 "reviewed_by": null,
8970 "reviewed_at": null,
8971 "review_note": null
8972 }
8973 ],
8974 "notes": "New reports first. Those who see the repository's findings (Write, or a security manager) read them; a reporter never sees another's. `state` is `new`, `accepted` or `declined`."
8975 },
8976 "report_vulnerability": {
8977 "params": {
8978 "owner": "flagon-io",
8979 "name": "hello"
8980 },
8981 "request": {
8982 "title": "Path traversal in the archive reader",
8983 "description": "Extracting an archive with an entry named ../../etc/passwd writes outside the target directory. Steps: …",
8984 "severity": "high",
8985 "email": "finder@example.com"
8986 },
8987 "response": {
8988 "id": "vrp_01kq2p9f6g7h8j9k0m1n2p3q4r",
8989 "repo_id": "rep_01kq2p9f6g7h8j9k0m1n2p3q4r",
8990 "repo": "flagon-io/hello",
8991 "reporter": null,
8992 "reporter_email": "finder@example.com",
8993 "title": "Path traversal in the archive reader",
8994 "description": "Extracting an archive with an entry named ../../etc/passwd writes outside the target directory. Steps: …",
8995 "severity": "high",
8996 "state": "new",
8997 "advisory_id": null,
8998 "created_at": "2026-10-06T08:40:11.000Z",
8999 "reviewed_by": null,
9000 "reviewed_at": null,
9001 "review_note": null
9002 },
9003 "notes": "Needs private vulnerability reporting on for the repository (`409` otherwise). With a token, the report is yours by username; without one, on a public repository, give `email`, or the request is `422`. The workspace's owners and security managers are told at once. More than 5 reports a day from one reporter to one repository, or a repository with 50 new reports waiting, is refused."
9004 },
9005 "review_vulnerability_report": {
9006 "params": {
9007 "owner": "flagon-io",
9008 "name": "hello",
9009 "id": "vrp_01kq2p9f6g7h8j9k0m1n2p3q4r"
9010 },
9011 "request": {
9012 "decision": "accept",
9013 "note": "Confirmed on 1.4.0."
9014 },
9015 "response": {
9016 "report": {
9017 "id": "vrp_01kq2p9f6g7h8j9k0m1n2p3q4r",
9018 "repo_id": "rep_01kq2p9f6g7h8j9k0m1n2p3q4r",
9019 "repo": "flagon-io/hello",
9020 "reporter": null,
9021 "reporter_email": "finder@example.com",
9022 "title": "Path traversal in the archive reader",
9023 "description": "Extracting an archive with an entry named ../../etc/passwd writes outside the target directory. Steps: …",
9024 "severity": "high",
9025 "state": "accepted",
9026 "advisory_id": "adv_01kq2p9f6g7h8j9k0m1n2p3q4r",
9027 "created_at": "2026-10-06T08:40:11.000Z",
9028 "reviewed_by": "syntaqx",
9029 "reviewed_at": "2026-10-06T09:14:02.118Z",
9030 "review_note": "Confirmed on 1.4.0."
9031 },
9032 "advisory": {
9033 "id": "adv_01kq2p9f6g7h8j9k0m1n2p3q4r",
9034 "g1tsa_id": "G1TSA-2026-h7kd-3mqw",
9035 "repo_id": "rep_01kq2p9f6g7h8j9k0m1n2p3q4r",
9036 "repo": "flagon-io/hello",
9037 "title": "Path traversal in the archive reader",
9038 "description": "Extracting an archive with an entry named ../../etc/passwd writes outside the target directory. Steps: …",
9039 "severity": "high",
9040 "cvss_vector": null,
9041 "cvss_score": null,
9042 "cve_id": null,
9043 "ecosystem": null,
9044 "package": null,
9045 "affected_versions": null,
9046 "patched_versions": null,
9047 "state": "draft",
9048 "credits": [
9049 "finder@example.com"
9050 ],
9051 "report_id": "vrp_01kq2p9f6g7h8j9k0m1n2p3q4r",
9052 "created_by": "syntaqx",
9053 "created_at": "2026-10-06T09:14:02.118Z",
9054 "updated_at": "2026-10-06T09:14:02.118Z",
9055 "published_at": null,
9056 "withdrawn_at": null
9057 }
9058 },
9059 "notes": "`accept` makes a draft advisory from the report, in the report's words and crediting the reporter, for the maintainers to finish and publish; `advisory` is that draft. `decline` closes the report; `advisory` is null. A report that was reviewed already is `409`. Takes the Admin role, or a security manager of the workspace."
9060 },
Merge Stripe Tax, the card fee on card payments, and one free workspace per person9061 "get_security_overview": {
9062 "params": {
9063 "workspace": "flagon-io"
9064 },
9065 "query": {
9066 "days": "30"
9067 },
9068 "response": {
9069 "activated": true,
9070 "private_hidden": 0,
9071 "totals": [
9072 {
9073 "alert_type": "secret_scanning",
9074 "open": {
9075 "critical": 1,
9076 "high": 0,
9077 "medium": 0,
9078 "low": 0,
9079 "unknown": 0
9080 },
9081 "opened": 2,
9082 "closed": 1
9083 },
9084 {
9085 "alert_type": "code_scanning",
9086 "open": {
9087 "critical": 0,
9088 "high": 3,
9089 "medium": 4,
9090 "low": 0,
9091 "unknown": 0
9092 },
9093 "opened": 7,
9094 "closed": 2
9095 },
9096 {
9097 "alert_type": "vulnerability",
9098 "open": {
9099 "critical": 0,
9100 "high": 1,
9101 "medium": 2,
9102 "low": 1,
9103 "unknown": 0
9104 },
9105 "opened": 3,
9106 "closed": 5
9107 }
9108 ],
9109 "trend": [
9110 {
9111 "day": "2026-10-05",
9112 "secret_scanning": 1,
9113 "code_scanning": 8,
9114 "vulnerability": 6
9115 },
9116 {
9117 "day": "2026-10-06",
9118 "secret_scanning": 1,
9119 "code_scanning": 7,
9120 "vulnerability": 4
9121 }
9122 ],
9123 "repos": [
9124 {
9125 "repo_id": "rep_01kp0a1b2c3d4e5f6g7h8j9k0m",
9126 "name": "hello",
9127 "private": true,
9128 "custom_patterns": 1,
9129 "validity_checks": true,
9130 "code_scanning_at": "2026-10-06T09:14:02.118Z",
9131 "dependency_review": true,
9132 "security_updates": true,
9133 "lockfiles": 1,
9134 "secrets": {
9135 "critical": 1,
9136 "high": 0,
9137 "medium": 0,
9138 "low": 0,
9139 "unknown": 0
9140 },
9141 "code": {
9142 "critical": 0,
9143 "high": 3,
9144 "medium": 4,
9145 "low": 0,
9146 "unknown": 0
9147 },
9148 "vulnerabilities": {
9149 "critical": 0,
9150 "high": 1,
9151 "medium": 2,
9152 "low": 1,
9153 "unknown": 0
9154 }
9155 }
9156 ]
9157 }
9158 },
9159 "create_label": {
9160 "request": {
9161 "label": "area: cli",
9162 "color": "1d76db",
9163 "description": "The command-line tool"
9164 },
9165 "response": {
9166 "name": "area: cli",
9167 "color": "1d76db",
9168 "description": "The command-line tool",
9169 "issues": 0,
9170 "pulls": 0
9171 }
9172 },
9173 "update_label": {
9174 "params": {
9175 "label": "area: cli"
9176 },
9177 "request": {
9178 "new_name": "cli",
9179 "color": "0052cc"
9180 },
9181 "response": {
9182 "name": "cli",
9183 "color": "0052cc",
9184 "description": "The command-line tool",
9185 "issues": 3,
9186 "pulls": 1
9187 },
9188 "notes": "Renaming a label renames it on every issue and pull request that carries it."
9189 },
9190 "delete_label": {
9191 "params": {
9192 "label": "wontfix"
9193 },
9194 "response": true
9195 },
9196 "add_default_labels": {
9197 "response": [
9198 {
9199 "name": "bug",
9200 "color": "d73a4a",
9201 "description": "Something isn't working",
9202 "issues": 4,
9203 "pulls": 1
9204 },
9205 {
9206 "name": "documentation",
9207 "color": "0075ca",
9208 "description": "Improvements or additions to documentation",
9209 "issues": 0,
9210 "pulls": 0
9211 }
9212 ],
9213 "notes": "Every label the repository has afterwards, shortened here. Labels it already had are left as they were."
9214 },
9215 "list_issue_labels": {
9216 "response": [
9217 {
9218 "name": "bug",
9219 "color": "d73a4a",
9220 "description": "Something isn't working",
9221 "issues": 4,
9222 "pulls": 1
9223 },
9224 {
9225 "name": "help wanted",
9226 "color": "008672",
9227 "description": "Extra attention is needed",
9228 "issues": 1,
9229 "pulls": 0
9230 }
9231 ]
9232 },
9233 "add_issue_labels": {
9234 "request": {
9235 "labels": [
9236 "help wanted"
9237 ]
9238 },
9239 "response": [
9240 "bug",
9241 "help wanted"
9242 ],
9243 "notes": "Returns its labels now, by name."
9244 },
9245 "set_issue_labels": {
9246 "request": {
9247 "labels": [
9248 "bug"
9249 ]
9250 },
9251 "response": [
9252 "bug"
9253 ]
9254 },
9255 "remove_issue_labels": {
9256 "response": []
9257 },
9258 "remove_issue_label": {
9259 "params": {
9260 "label": "help wanted"
9261 },
9262 "response": [
9263 "bug"
9264 ]
9265 },
9266 "list_milestones": {
9267 "response": [
9268 {
9269 "number": 3,
9270 "title": "Launch",
9271 "description": "Everything that has to land before the launch on October 14.",
9272 "due_on": "2026-10-14",
9273 "state": "open",
9274 "open_items": 5,
9275 "closed_items": 12,
9276 "created_at": "2026-09-20T09:00:00.000Z",
9277 "updated_at": "2026-10-06T16:12:40.118Z",
9278 "closed_at": null
9279 }
9280 ],
9281 "notes": "Open milestones soonest due first, then closed ones. Progress is closed_items out of open_items plus closed_items."
9282 },
9283 "create_milestone": {
9284 "request": {
9285 "title": "Launch",
9286 "description": "Everything that has to land before the launch on October 14.",
9287 "due_on": "2026-10-14"
9288 },
9289 "response": {
9290 "number": 3,
9291 "title": "Launch",
9292 "description": "Everything that has to land before the launch on October 14.",
9293 "due_on": "2026-10-14",
9294 "state": "open",
9295 "open_items": 0,
9296 "closed_items": 0,
9297 "created_at": "2026-09-20T09:00:00.000Z",
9298 "updated_at": "2026-09-20T09:00:00.000Z",
9299 "closed_at": null
9300 }
9301 },
9302 "update_milestone": {
9303 "params": {
9304 "milestone": 3
9305 },
9306 "request": {
9307 "state": "closed"
9308 },
9309 "response": {
9310 "number": 3,
9311 "title": "Launch",
9312 "description": "Everything that has to land before the launch on October 14.",
9313 "due_on": "2026-10-14",
9314 "state": "closed",
9315 "open_items": 0,
9316 "closed_items": 17,
9317 "created_at": "2026-09-20T09:00:00.000Z",
9318 "updated_at": "2026-10-14T18:00:00.000Z",
9319 "closed_at": "2026-10-14T18:00:00.000Z"
9320 }
9321 },
9322 "delete_milestone": {
9323 "params": {
9324 "milestone": 3
9325 },
9326 "response": true
9327 },
9328 "get_milestone": {
9329 "params": {
9330 "milestone": 3
9331 },
9332 "response": {
9333 "milestone": {
9334 "number": 3,
9335 "title": "Launch",
9336 "description": "Everything that has to land before the launch on October 14.",
9337 "due_on": "2026-10-14",
9338 "state": "open",
9339 "open_items": 5,
9340 "closed_items": 12,
9341 "created_at": "2026-09-20T09:00:00.000Z",
9342 "updated_at": "2026-10-06T16:12:40.118Z",
9343 "closed_at": null
9344 },
9345 "issues": [
9346 {
9347 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
9348 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
9349 "number": 12,
9350 "title": "Greeting should name the caller",
9351 "body": "Take a name from the first argument; fall back to world.",
9352 "labels": [
9353 "feature",
9354 "good first issue"
9355 ],
9356 "state": "open",
9357 "reason": null,
9358 "resolved_by": null,
9359 "author": {
9360 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
9361 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar9362 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person9363 "kind": "user",
9364 "verified": false,
9365 "workspaces": []
9366 },
9367 "requested_by": null,
9368 "created_at": "2026-10-01T18:04:11.482Z",
9369 "updated_at": "2026-10-01T18:09:47.305Z",
9370 "closed_at": null,
9371 "pull_count": 0,
9372 "comment_count": 0,
9373 "assignees": [
9374 "syntaqx"
9375 ],
9376 "blocked_by": [],
9377 "queued": false,
9378 "agent": null,
9379 "milestone": {
9380 "number": 3,
9381 "title": "Launch"
9382 }
9383 }
9384 ],
9385 "pulls": [
9386 {
9387 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
9388 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
9389 "number": 14,
9390 "issue": 12,
9391 "title": "Greeting should name the caller",
9392 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
9393 "agent": "claude-code",
9394 "runtime": "external",
9395 "status": "open",
9396 "fork": {
9397 "namespace": "pulls",
9398 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
9399 },
9400 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
9401 "branch": null,
9402 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
9403 "merge_base": null,
9404 "merged_by": null,
9405 "merged_at": null,
9406 "superseded_by": null,
9407 "check_status": "passed",
9408 "files": [
9409 {
9410 "path": "src/main.rs",
9411 "additions": 6,
9412 "deletions": 2
9413 }
9414 ],
9415 "assignees": [],
9416 "reviewers": [
9417 "ana"
9418 ],
9419 "labels": [],
9420 "milestone": {
9421 "number": 3,
9422 "title": "Launch"
9423 },
9424 "base": "main",
9425 "author": {
9426 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
9427 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar9428 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person9429 "kind": "user",
9430 "verified": false,
9431 "workspaces": []
9432 },
9433 "requested_by": null,
9434 "created_at": "2026-10-01T18:20:02.117Z",
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.9435 "updated_at": "2026-10-01T18:35:44.902Z"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person9436 }
9437 ]
9438 }
9439 },
9440 "update_pull_request": {
9441 "request": {
9442 "base": "release/1.x",
9443 "labels": [
9444 "bug"
9445 ]
9446 },
9447 "response": {
9448 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
9449 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
9450 "number": 14,
9451 "issue": 12,
9452 "title": "Greeting should name the caller",
9453 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
9454 "agent": "claude-code",
9455 "runtime": "external",
9456 "status": "open",
9457 "fork": {
9458 "namespace": "pulls",
9459 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
9460 },
9461 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
9462 "branch": null,
9463 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
9464 "merge_base": null,
9465 "merged_by": null,
9466 "merged_at": null,
9467 "superseded_by": null,
9468 "check_status": "passed",
9469 "files": [
9470 {
9471 "path": "src/main.rs",
9472 "additions": 6,
9473 "deletions": 2
9474 }
9475 ],
9476 "assignees": [],
9477 "reviewers": [
9478 "ana"
9479 ],
9480 "labels": [
9481 "bug"
9482 ],
9483 "milestone": null,
9484 "base": "release/1.x",
9485 "author": {
9486 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
9487 "username": "syntaqx",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar9488 "display_username": "syntaqx",
Merge Stripe Tax, the card fee on card payments, and one free workspace per person9489 "kind": "user",
9490 "verified": false,
9491 "workspaces": []
9492 },
9493 "requested_by": null,
9494 "created_at": "2026-10-01T18:20:02.117Z",
The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.9495 "updated_at": "2026-10-01T18:35:44.902Z"
Merge Stripe Tax, the card fee on card payments, and one free workspace per person9496 },
9497 "notes": "A new base takes it out of the merge queue, and whether it is behind, merges cleanly and has the checks it needs is worked out against the new base."
Merge rulesets: branch and tag rules, agent-first, enforced on push and merge9498 },
9499 "list_repo_rulesets": {
9500 "params": {
9501 "owner": "flagon-io",
9502 "name": "hello"
9503 },
9504 "query": {
9505 "include_parents": "true"
9506 },
9507 "response": [
9508 {
9509 "id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
9510 "level": "repository",
9511 "workspace": "flagon-io",
9512 "repo_id": "rep_01kq0f3a7b8c9d0e1f2g3h4j5k",
9513 "repository": "flagon-io/hello",
9514 "name": "Protect main",
9515 "enforcement": "active",
9516 "target": "branch",
9517 "conditions": {
9518 "ref_name": {
9519 "include": [
9520 "~DEFAULT_BRANCH"
9521 ],
9522 "exclude": []
9523 }
9524 },
9525 "bypass_actors": [
9526 {
9527 "kind": "role",
9528 "value": "admin",
9529 "mode": "pull_requests"
9530 }
9531 ],
9532 "rules": [
9533 {
9534 "type": "deletion",
9535 "parameters": {},
9536 "applies_to": "everyone"
9537 },
9538 {
9539 "type": "non_fast_forward",
9540 "parameters": {},
9541 "applies_to": "everyone"
9542 },
9543 {
9544 "type": "pull_request",
9545 "parameters": {
9546 "required_approvals": 1,
9547 "count_agent_approvals": true,
9548 "dismiss_stale_reviews_on_push": true,
9549 "require_code_owner_review": true,
9550 "require_last_push_approval": false,
9551 "allowed_merge_methods": []
9552 },
9553 "applies_to": "everyone"
9554 },
9555 {
9556 "type": "required_status_checks",
9557 "parameters": {
9558 "checks": [
9559 {
9560 "context": "CI",
9561 "integration": "actions"
9562 }
9563 ],
9564 "strict": true,
9565 "paths": [],
9566 "allow_bypass_on_merge": false
9567 },
9568 "applies_to": "everyone"
9569 },
9570 {
9571 "type": "pull_request",
9572 "parameters": {
9573 "required_approvals": 1,
9574 "count_agent_approvals": false,
9575 "dismiss_stale_reviews_on_push": false,
9576 "require_code_owner_review": false,
9577 "require_last_push_approval": false,
9578 "allowed_merge_methods": []
9579 },
9580 "applies_to": "agents"
9581 },
9582 {
9583 "type": "file_path_restriction",
9584 "parameters": {
9585 "restricted_file_paths": [
9586 ".g1t/workflows/**",
9587 "CODEOWNERS"
9588 ]
9589 },
9590 "applies_to": "agents"
9591 }
9592 ],
9593 "created_by": "syntaqx",
9594 "created_at": "2026-10-07T14:02:11.318Z",
9595 "updated_by": "syntaqx",
9596 "updated_at": "2026-10-07T14:02:11.318Z"
9597 },
9598 {
9599 "id": "rs_01kq3b2c3d4e5f6g7h8j9k0m1n",
9600 "level": "workspace",
9601 "workspace": "flagon-io",
9602 "name": "Release freeze",
9603 "enforcement": "evaluate",
9604 "target": "branch",
9605 "conditions": {
9606 "ref_name": {
9607 "include": [
9608 "~DEFAULT_BRANCH",
9609 "release/**"
9610 ],
9611 "exclude": []
9612 },
9613 "repository": {
9614 "include": [
9615 "~ALL"
9616 ],
9617 "exclude": [
9618 "sandbox-*"
9619 ],
9620 "visibility": "any",
9621 "topics": []
9622 }
9623 },
9624 "bypass_actors": [
9625 {
9626 "kind": "team",
9627 "value": "flagon-io/release",
9628 "mode": "always"
9629 }
9630 ],
9631 "rules": [
9632 {
9633 "type": "merge_window",
9634 "parameters": {
9635 "time_zone": "-05:00",
9636 "windows": [
9637 {
9638 "days": [
9639 "mon",
9640 "tue",
9641 "wed",
9642 "thu"
9643 ],
9644 "start": "09:00",
9645 "end": "17:00"
9646 }
9647 ],
9648 "freezes": [
9649 {
9650 "start": "2026-12-20T00:00:00Z",
9651 "end": "2027-01-04T00:00:00Z",
9652 "reason": "Holidays"
9653 }
9654 ],
9655 "exceptions": []
9656 },
9657 "applies_to": "everyone"
9658 }
9659 ],
9660 "created_by": "syntaqx",
9661 "created_at": "2026-10-07T14:02:11.318Z",
9662 "updated_by": "syntaqx",
9663 "updated_at": "2026-10-07T14:02:11.318Z"
9664 }
9665 ],
9666 "notes": "With `include_parents`, the workspace's rulesets that hold in the repository come too, with `level` `workspace`. The ruleset made from the repository's branch protection settings has `source` `branch_protection`."
9667 },
9668 "get_repo_ruleset": {
9669 "params": {
9670 "owner": "flagon-io",
9671 "name": "hello",
9672 "id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m"
9673 },
9674 "response": {
9675 "id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
9676 "level": "repository",
9677 "workspace": "flagon-io",
9678 "repo_id": "rep_01kq0f3a7b8c9d0e1f2g3h4j5k",
9679 "repository": "flagon-io/hello",
9680 "name": "Protect main",
9681 "enforcement": "active",
9682 "target": "branch",
9683 "conditions": {
9684 "ref_name": {
9685 "include": [
9686 "~DEFAULT_BRANCH"
9687 ],
9688 "exclude": []
9689 }
9690 },
9691 "bypass_actors": [
9692 {
9693 "kind": "role",
9694 "value": "admin",
9695 "mode": "pull_requests"
9696 }
9697 ],
9698 "rules": [
9699 {
9700 "type": "deletion",
9701 "parameters": {},
9702 "applies_to": "everyone"
9703 },
9704 {
9705 "type": "non_fast_forward",
9706 "parameters": {},
9707 "applies_to": "everyone"
9708 },
9709 {
9710 "type": "pull_request",
9711 "parameters": {
9712 "required_approvals": 1,
9713 "count_agent_approvals": true,
9714 "dismiss_stale_reviews_on_push": true,
9715 "require_code_owner_review": true,
9716 "require_last_push_approval": false,
9717 "allowed_merge_methods": []
9718 },
9719 "applies_to": "everyone"
9720 },
9721 {
9722 "type": "required_status_checks",
9723 "parameters": {
9724 "checks": [
9725 {
9726 "context": "CI",
9727 "integration": "actions"
9728 }
9729 ],
9730 "strict": true,
9731 "paths": [],
9732 "allow_bypass_on_merge": false
9733 },
9734 "applies_to": "everyone"
9735 },
9736 {
9737 "type": "pull_request",
9738 "parameters": {
9739 "required_approvals": 1,
9740 "count_agent_approvals": false,
9741 "dismiss_stale_reviews_on_push": false,
9742 "require_code_owner_review": false,
9743 "require_last_push_approval": false,
9744 "allowed_merge_methods": []
9745 },
9746 "applies_to": "agents"
9747 },
9748 {
9749 "type": "file_path_restriction",
9750 "parameters": {
9751 "restricted_file_paths": [
9752 ".g1t/workflows/**",
9753 "CODEOWNERS"
9754 ]
9755 },
9756 "applies_to": "agents"
9757 }
9758 ],
9759 "created_by": "syntaqx",
9760 "created_at": "2026-10-07T14:02:11.318Z",
9761 "updated_by": "syntaqx",
9762 "updated_at": "2026-10-07T14:02:11.318Z"
9763 }
9764 },
9765 "create_repo_ruleset": {
9766 "params": {
9767 "owner": "flagon-io",
9768 "name": "hello"
9769 },
9770 "request": {
9771 "ruleset_name": "Protect main",
9772 "enforcement": "active",
9773 "target": "branch",
9774 "conditions": {
9775 "ref_name": {
9776 "include": [
9777 "~DEFAULT_BRANCH"
9778 ],
9779 "exclude": []
9780 }
9781 },
9782 "bypass_actors": [
9783 {
9784 "kind": "role",
9785 "value": "admin",
9786 "mode": "pull_requests"
9787 }
9788 ],
9789 "rules": [
9790 {
9791 "type": "deletion",
9792 "parameters": {},
9793 "applies_to": "everyone"
9794 },
9795 {
9796 "type": "non_fast_forward",
9797 "parameters": {},
9798 "applies_to": "everyone"
9799 },
9800 {
9801 "type": "pull_request",
9802 "parameters": {
9803 "required_approvals": 1,
9804 "count_agent_approvals": true,
9805 "dismiss_stale_reviews_on_push": true,
9806 "require_code_owner_review": true,
9807 "require_last_push_approval": false,
9808 "allowed_merge_methods": []
9809 },
9810 "applies_to": "everyone"
9811 },
9812 {
9813 "type": "required_status_checks",
9814 "parameters": {
9815 "checks": [
9816 {
9817 "context": "CI",
9818 "integration": "actions"
9819 }
9820 ],
9821 "strict": true,
9822 "paths": [],
9823 "allow_bypass_on_merge": false
9824 },
9825 "applies_to": "everyone"
9826 },
9827 {
9828 "type": "pull_request",
9829 "parameters": {
9830 "required_approvals": 1,
9831 "count_agent_approvals": false,
9832 "dismiss_stale_reviews_on_push": false,
9833 "require_code_owner_review": false,
9834 "require_last_push_approval": false,
9835 "allowed_merge_methods": []
9836 },
9837 "applies_to": "agents"
9838 },
9839 {
9840 "type": "file_path_restriction",
9841 "parameters": {
9842 "restricted_file_paths": [
9843 ".g1t/workflows/**",
9844 "CODEOWNERS"
9845 ]
9846 },
9847 "applies_to": "agents"
9848 }
9849 ]
9850 },
9851 "response": {
9852 "id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
9853 "level": "repository",
9854 "workspace": "flagon-io",
9855 "repo_id": "rep_01kq0f3a7b8c9d0e1f2g3h4j5k",
9856 "repository": "flagon-io/hello",
9857 "name": "Protect main",
9858 "enforcement": "active",
9859 "target": "branch",
9860 "conditions": {
9861 "ref_name": {
9862 "include": [
9863 "~DEFAULT_BRANCH"
9864 ],
9865 "exclude": []
9866 }
9867 },
9868 "bypass_actors": [
9869 {
9870 "kind": "role",
9871 "value": "admin",
9872 "mode": "pull_requests"
9873 }
9874 ],
9875 "rules": [
9876 {
9877 "type": "deletion",
9878 "parameters": {},
9879 "applies_to": "everyone"
9880 },
9881 {
9882 "type": "non_fast_forward",
9883 "parameters": {},
9884 "applies_to": "everyone"
9885 },
9886 {
9887 "type": "pull_request",
9888 "parameters": {
9889 "required_approvals": 1,
9890 "count_agent_approvals": true,
9891 "dismiss_stale_reviews_on_push": true,
9892 "require_code_owner_review": true,
9893 "require_last_push_approval": false,
9894 "allowed_merge_methods": []
9895 },
9896 "applies_to": "everyone"
9897 },
9898 {
9899 "type": "required_status_checks",
9900 "parameters": {
9901 "checks": [
9902 {
9903 "context": "CI",
9904 "integration": "actions"
9905 }
9906 ],
9907 "strict": true,
9908 "paths": [],
9909 "allow_bypass_on_merge": false
9910 },
9911 "applies_to": "everyone"
9912 },
9913 {
9914 "type": "pull_request",
9915 "parameters": {
9916 "required_approvals": 1,
9917 "count_agent_approvals": false,
9918 "dismiss_stale_reviews_on_push": false,
9919 "require_code_owner_review": false,
9920 "require_last_push_approval": false,
9921 "allowed_merge_methods": []
9922 },
9923 "applies_to": "agents"
9924 },
9925 {
9926 "type": "file_path_restriction",
9927 "parameters": {
9928 "restricted_file_paths": [
9929 ".g1t/workflows/**",
9930 "CODEOWNERS"
9931 ]
9932 },
9933 "applies_to": "agents"
9934 }
9935 ],
9936 "created_by": "syntaqx",
9937 "created_at": "2026-10-07T14:02:11.318Z",
9938 "updated_by": "syntaqx",
9939 "updated_at": "2026-10-07T14:02:11.318Z"
9940 },
9941 "notes": "Parameters left out take their defaults, and the ruleset comes back as saved: patterns trimmed, roles and teams lowercased. A pattern that does not compile, or a rule the target cannot hold (a pull request rule on tags), is refused with `invalid` and says why."
9942 },
9943 "update_repo_ruleset": {
9944 "params": {
9945 "owner": "flagon-io",
9946 "name": "hello",
9947 "id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m"
9948 },
9949 "request": {
9950 "enforcement": "evaluate"
9951 },
9952 "response": {
9953 "id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
9954 "level": "repository",
9955 "workspace": "flagon-io",
9956 "repo_id": "rep_01kq0f3a7b8c9d0e1f2g3h4j5k",
9957 "repository": "flagon-io/hello",
9958 "name": "Protect main",
9959 "enforcement": "evaluate",
9960 "target": "branch",
9961 "conditions": {
9962 "ref_name": {
9963 "include": [
9964 "~DEFAULT_BRANCH"
9965 ],
9966 "exclude": []
9967 }
9968 },
9969 "bypass_actors": [
9970 {
9971 "kind": "role",
9972 "value": "admin",
9973 "mode": "pull_requests"
9974 }
9975 ],
9976 "rules": [
9977 {
9978 "type": "deletion",
9979 "parameters": {},
9980 "applies_to": "everyone"
9981 },
9982 {
9983 "type": "non_fast_forward",
9984 "parameters": {},
9985 "applies_to": "everyone"
9986 },
9987 {
9988 "type": "pull_request",
9989 "parameters": {
9990 "required_approvals": 1,
9991 "count_agent_approvals": true,
9992 "dismiss_stale_reviews_on_push": true,
9993 "require_code_owner_review": true,
9994 "require_last_push_approval": false,
9995 "allowed_merge_methods": []
9996 },
9997 "applies_to": "everyone"
9998 },
9999 {
10000 "type": "required_status_checks",
10001 "parameters": {
10002 "checks": [
10003 {
10004 "context": "CI",
10005 "integration": "actions"
10006 }
10007 ],
10008 "strict": true,
10009 "paths": [],
10010 "allow_bypass_on_merge": false
10011 },
10012 "applies_to": "everyone"
10013 },
10014 {
10015 "type": "pull_request",
10016 "parameters": {
10017 "required_approvals": 1,
10018 "count_agent_approvals": false,
10019 "dismiss_stale_reviews_on_push": false,
10020 "require_code_owner_review": false,
10021 "require_last_push_approval": false,
10022 "allowed_merge_methods": []
10023 },
10024 "applies_to": "agents"
10025 },
10026 {
10027 "type": "file_path_restriction",
10028 "parameters": {
10029 "restricted_file_paths": [
10030 ".g1t/workflows/**",
10031 "CODEOWNERS"
10032 ]
10033 },
10034 "applies_to": "agents"
10035 }
10036 ],
10037 "created_by": "syntaqx",
10038 "created_at": "2026-10-07T14:02:11.318Z",
10039 "updated_by": "syntaqx",
10040 "updated_at": "2026-10-07T14:02:11.318Z"
10041 },
10042 "notes": "Fields left out stay as they are. `rules` and `bypass_actors`, when given, replace the whole list."
10043 },
10044 "delete_repo_ruleset": {
10045 "params": {
10046 "owner": "flagon-io",
10047 "name": "hello",
10048 "id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m"
10049 },
10050 "response": {
10051 "deleted": true
10052 }
10053 },
10054 "get_branch_rules": {
10055 "params": {
10056 "owner": "flagon-io",
10057 "name": "hello",
10058 "branch": "main"
10059 },
10060 "response": {
10061 "name": "main",
10062 "target": "branch",
10063 "default_branch": true,
10064 "rules": [
10065 {
10066 "type": "deletion",
10067 "parameters": {},
10068 "applies_to": "everyone",
10069 "ruleset_id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
10070 "ruleset_name": "Protect main",
10071 "level": "repository",
10072 "enforcement": "active"
10073 },
10074 {
10075 "type": "non_fast_forward",
10076 "parameters": {},
10077 "applies_to": "everyone",
10078 "ruleset_id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
10079 "ruleset_name": "Protect main",
10080 "level": "repository",
10081 "enforcement": "active"
10082 },
10083 {
10084 "type": "pull_request",
10085 "parameters": {
10086 "required_approvals": 1,
10087 "count_agent_approvals": true,
10088 "dismiss_stale_reviews_on_push": true,
10089 "require_code_owner_review": true,
10090 "require_last_push_approval": false,
10091 "allowed_merge_methods": []
10092 },
10093 "applies_to": "everyone",
10094 "ruleset_id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
10095 "ruleset_name": "Protect main",
10096 "level": "repository",
10097 "enforcement": "active"
10098 },
10099 {
10100 "type": "required_status_checks",
10101 "parameters": {
10102 "checks": [
10103 {
10104 "context": "CI",
10105 "integration": "actions"
10106 }
10107 ],
10108 "strict": true,
10109 "paths": [],
10110 "allow_bypass_on_merge": false
10111 },
10112 "applies_to": "everyone",
10113 "ruleset_id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
10114 "ruleset_name": "Protect main",
10115 "level": "repository",
10116 "enforcement": "active"
10117 },
10118 {
10119 "type": "merge_window",
10120 "parameters": {
10121 "time_zone": "-05:00",
10122 "windows": [
10123 {
10124 "days": [
10125 "mon",
10126 "tue",
10127 "wed",
10128 "thu"
10129 ],
10130 "start": "09:00",
10131 "end": "17:00"
10132 }
10133 ],
10134 "freezes": [
10135 {
10136 "start": "2026-12-20T00:00:00Z",
10137 "end": "2027-01-04T00:00:00Z",
10138 "reason": "Holidays"
10139 }
10140 ],
10141 "exceptions": []
10142 },
10143 "applies_to": "everyone",
10144 "ruleset_id": "rs_01kq3b2c3d4e5f6g7h8j9k0m1n",
10145 "ruleset_name": "Release freeze",
10146 "level": "workspace",
10147 "enforcement": "evaluate"
10148 }
10149 ],
10150 "rulesets": [
10151 {
10152 "id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
10153 "name": "Protect main",
10154 "level": "repository",
10155 "enforcement": "active",
10156 "bypass_actors": [
10157 {
10158 "kind": "role",
10159 "value": "admin",
10160 "mode": "pull_requests"
10161 }
10162 ]
10163 },
10164 {
10165 "id": "rs_01kq3b2c3d4e5f6g7h8j9k0m1n",
10166 "name": "Release freeze",
10167 "level": "workspace",
10168 "enforcement": "evaluate",
10169 "bypass_actors": [
10170 {
10171 "kind": "team",
10172 "value": "flagon-io/release",
10173 "mode": "always"
10174 }
10175 ]
10176 }
10177 ]
10178 },
10179 "notes": "A branch with slashes in its name is URL-encoded as one segment: `/rules/branches/release%2F1.x`. Add `?target=tag` for a tag."
10180 },
10181 "list_rule_evaluations": {
10182 "params": {
10183 "owner": "flagon-io",
10184 "name": "hello"
10185 },
10186 "query": {
10187 "problems_only": "true"
10188 },
10189 "response": {
10190 "evaluations": [
10191 {
10192 "id": "rev_01kq3c4d5e6f7g8h9j0k1m2n3p",
10193 "repo_id": "rep_01kq0f3a7b8c9d0e1f2g3h4j5k",
10194 "workspace": "flagon-io",
10195 "ruleset_id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
10196 "ruleset_name": "Protect main",
10197 "enforcement": "active",
10198 "action": "push",
10199 "git_ref": "refs/heads/main",
10200 "actor": "g1t",
10201 "actor_kind": "agent",
10202 "verdict": "fail",
10203 "violations": [
10204 {
10205 "rule": "pull_request",
10206 "ruleset_id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
10207 "ruleset_name": "Protect main",
10208 "enforcement": "active",
10209 "message": "Changes to main must be made through a pull request.",
10210 "remedy": "Push a branch, open a pull request into main, and merge it."
10211 }
10212 ],
10213 "number": null,
10214 "sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e",
10215 "repository": "flagon-io/hello",
10216 "created_at": "2026-10-07T14:02:11.318Z"
10217 }
10218 ],
10219 "next": null,
10220 "insights": {
10221 "days": 30,
10222 "total": 214,
10223 "passed": 198,
10224 "blocked": 9,
10225 "would_block": 5,
10226 "bypassed": 2,
10227 "by_ruleset": [
10228 {
10229 "ruleset_id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
10230 "ruleset_name": "Protect main",
10231 "enforcement": "active",
10232 "total": 120,
10233 "blocked": 9,
10234 "would_block": 0,
10235 "bypassed": 2
10236 }
10237 ],
10238 "by_rule": [
10239 {
10240 "rule": "pull_request",
10241 "count": 7
10242 },
10243 {
10244 "rule": "non_fast_forward",
10245 "count": 2
10246 }
10247 ]
10248 }
10249 },
10250 "notes": "A `fail` of a ruleset in `evaluate` is what it would have refused. Pass `next` as `before` for the next page. `insights` counts the last 30 days."
10251 },
10252 "list_workspace_rulesets": {
10253 "params": {
10254 "workspace": "flagon-io"
10255 },
10256 "response": [
10257 {
10258 "id": "rs_01kq3b2c3d4e5f6g7h8j9k0m1n",
10259 "level": "workspace",
10260 "workspace": "flagon-io",
10261 "name": "Release freeze",
10262 "enforcement": "evaluate",
10263 "target": "branch",
10264 "conditions": {
10265 "ref_name": {
10266 "include": [
10267 "~DEFAULT_BRANCH",
10268 "release/**"
10269 ],
10270 "exclude": []
10271 },
10272 "repository": {
10273 "include": [
10274 "~ALL"
10275 ],
10276 "exclude": [
10277 "sandbox-*"
10278 ],
10279 "visibility": "any",
10280 "topics": []
10281 }
10282 },
10283 "bypass_actors": [
10284 {
10285 "kind": "team",
10286 "value": "flagon-io/release",
10287 "mode": "always"
10288 }
10289 ],
10290 "rules": [
10291 {
10292 "type": "merge_window",
10293 "parameters": {
10294 "time_zone": "-05:00",
10295 "windows": [
10296 {
10297 "days": [
10298 "mon",
10299 "tue",
10300 "wed",
10301 "thu"
10302 ],
10303 "start": "09:00",
10304 "end": "17:00"
10305 }
10306 ],
10307 "freezes": [
10308 {
10309 "start": "2026-12-20T00:00:00Z",
10310 "end": "2027-01-04T00:00:00Z",
10311 "reason": "Holidays"
10312 }
10313 ],
10314 "exceptions": []
10315 },
10316 "applies_to": "everyone"
10317 }
10318 ],
10319 "created_by": "syntaqx",
10320 "created_at": "2026-10-07T14:02:11.318Z",
10321 "updated_by": "syntaqx",
10322 "updated_at": "2026-10-07T14:02:11.318Z"
10323 }
10324 ]
10325 },
10326 "get_workspace_ruleset": {
10327 "params": {
10328 "workspace": "flagon-io",
10329 "id": "rs_01kq3b2c3d4e5f6g7h8j9k0m1n"
10330 },
10331 "response": {
10332 "id": "rs_01kq3b2c3d4e5f6g7h8j9k0m1n",
10333 "level": "workspace",
10334 "workspace": "flagon-io",
10335 "name": "Release freeze",
10336 "enforcement": "evaluate",
10337 "target": "branch",
10338 "conditions": {
10339 "ref_name": {
10340 "include": [
10341 "~DEFAULT_BRANCH",
10342 "release/**"
10343 ],
10344 "exclude": []
10345 },
10346 "repository": {
10347 "include": [
10348 "~ALL"
10349 ],
10350 "exclude": [
10351 "sandbox-*"
10352 ],
10353 "visibility": "any",
10354 "topics": []
10355 }
10356 },
10357 "bypass_actors": [
10358 {
10359 "kind": "team",
10360 "value": "flagon-io/release",
10361 "mode": "always"
10362 }
10363 ],
10364 "rules": [
10365 {
10366 "type": "merge_window",
10367 "parameters": {
10368 "time_zone": "-05:00",
10369 "windows": [
10370 {
10371 "days": [
10372 "mon",
10373 "tue",
10374 "wed",
10375 "thu"
10376 ],
10377 "start": "09:00",
10378 "end": "17:00"
10379 }
10380 ],
10381 "freezes": [
10382 {
10383 "start": "2026-12-20T00:00:00Z",
10384 "end": "2027-01-04T00:00:00Z",
10385 "reason": "Holidays"
10386 }
10387 ],
10388 "exceptions": []
10389 },
10390 "applies_to": "everyone"
10391 }
10392 ],
10393 "created_by": "syntaqx",
10394 "created_at": "2026-10-07T14:02:11.318Z",
10395 "updated_by": "syntaqx",
10396 "updated_at": "2026-10-07T14:02:11.318Z"
10397 }
10398 },
10399 "create_workspace_ruleset": {
10400 "params": {
10401 "workspace": "flagon-io"
10402 },
10403 "request": {
10404 "ruleset_name": "Release freeze",
10405 "enforcement": "evaluate",
10406 "target": "branch",
10407 "conditions": {
10408 "ref_name": {
10409 "include": [
10410 "~DEFAULT_BRANCH",
10411 "release/**"
10412 ],
10413 "exclude": []
10414 },
10415 "repository": {
10416 "include": [
10417 "~ALL"
10418 ],
10419 "exclude": [
10420 "sandbox-*"
10421 ],
10422 "visibility": "any",
10423 "topics": []
10424 }
10425 },
10426 "bypass_actors": [
10427 {
10428 "kind": "team",
10429 "value": "flagon-io/release",
10430 "mode": "always"
10431 }
10432 ],
10433 "rules": [
10434 {
10435 "type": "merge_window",
10436 "parameters": {
10437 "time_zone": "-05:00",
10438 "windows": [
10439 {
10440 "days": [
10441 "mon",
10442 "tue",
10443 "wed",
10444 "thu"
10445 ],
10446 "start": "09:00",
10447 "end": "17:00"
10448 }
10449 ],
10450 "freezes": [
10451 {
10452 "start": "2026-12-20T00:00:00Z",
10453 "end": "2027-01-04T00:00:00Z",
10454 "reason": "Holidays"
10455 }
10456 ],
10457 "exceptions": []
10458 },
10459 "applies_to": "everyone"
10460 }
10461 ]
10462 },
10463 "response": {
10464 "id": "rs_01kq3b2c3d4e5f6g7h8j9k0m1n",
10465 "level": "workspace",
10466 "workspace": "flagon-io",
10467 "name": "Release freeze",
10468 "enforcement": "evaluate",
10469 "target": "branch",
10470 "conditions": {
10471 "ref_name": {
10472 "include": [
10473 "~DEFAULT_BRANCH",
10474 "release/**"
10475 ],
10476 "exclude": []
10477 },
10478 "repository": {
10479 "include": [
10480 "~ALL"
10481 ],
10482 "exclude": [
10483 "sandbox-*"
10484 ],
10485 "visibility": "any",
10486 "topics": []
10487 }
10488 },
10489 "bypass_actors": [
10490 {
10491 "kind": "team",
10492 "value": "flagon-io/release",
10493 "mode": "always"
10494 }
10495 ],
10496 "rules": [
10497 {
10498 "type": "merge_window",
10499 "parameters": {
10500 "time_zone": "-05:00",
10501 "windows": [
10502 {
10503 "days": [
10504 "mon",
10505 "tue",
10506 "wed",
10507 "thu"
10508 ],
10509 "start": "09:00",
10510 "end": "17:00"
10511 }
10512 ],
10513 "freezes": [
10514 {
10515 "start": "2026-12-20T00:00:00Z",
10516 "end": "2027-01-04T00:00:00Z",
10517 "reason": "Holidays"
10518 }
10519 ],
10520 "exceptions": []
10521 },
10522 "applies_to": "everyone"
10523 }
10524 ],
10525 "created_by": "syntaqx",
10526 "created_at": "2026-10-07T14:02:11.318Z",
10527 "updated_by": "syntaqx",
10528 "updated_at": "2026-10-07T14:02:11.318Z"
10529 },
10530 "notes": "`conditions.repository` chooses the repositories it holds in; left out, every repository of the workspace."
10531 },
10532 "update_workspace_ruleset": {
10533 "params": {
10534 "workspace": "flagon-io",
10535 "id": "rs_01kq3b2c3d4e5f6g7h8j9k0m1n"
10536 },
10537 "request": {
10538 "enforcement": "active"
10539 },
10540 "response": {
10541 "id": "rs_01kq3b2c3d4e5f6g7h8j9k0m1n",
10542 "level": "workspace",
10543 "workspace": "flagon-io",
10544 "name": "Release freeze",
10545 "enforcement": "active",
10546 "target": "branch",
10547 "conditions": {
10548 "ref_name": {
10549 "include": [
10550 "~DEFAULT_BRANCH",
10551 "release/**"
10552 ],
10553 "exclude": []
10554 },
10555 "repository": {
10556 "include": [
10557 "~ALL"
10558 ],
10559 "exclude": [
10560 "sandbox-*"
10561 ],
10562 "visibility": "any",
10563 "topics": []
10564 }
10565 },
10566 "bypass_actors": [
10567 {
10568 "kind": "team",
10569 "value": "flagon-io/release",
10570 "mode": "always"
10571 }
10572 ],
10573 "rules": [
10574 {
10575 "type": "merge_window",
10576 "parameters": {
10577 "time_zone": "-05:00",
10578 "windows": [
10579 {
10580 "days": [
10581 "mon",
10582 "tue",
10583 "wed",
10584 "thu"
10585 ],
10586 "start": "09:00",
10587 "end": "17:00"
10588 }
10589 ],
10590 "freezes": [
10591 {
10592 "start": "2026-12-20T00:00:00Z",
10593 "end": "2027-01-04T00:00:00Z",
10594 "reason": "Holidays"
10595 }
10596 ],
10597 "exceptions": []
10598 },
10599 "applies_to": "everyone"
10600 }
10601 ],
10602 "created_by": "syntaqx",
10603 "created_at": "2026-10-07T14:02:11.318Z",
10604 "updated_by": "syntaqx",
10605 "updated_at": "2026-10-07T14:02:11.318Z"
10606 }
10607 },
10608 "delete_workspace_ruleset": {
10609 "params": {
10610 "workspace": "flagon-io",
10611 "id": "rs_01kq3b2c3d4e5f6g7h8j9k0m1n"
10612 },
10613 "response": {
10614 "deleted": true
10615 }
10616 },
10617 "list_workspace_rule_evaluations": {
10618 "params": {
10619 "workspace": "flagon-io"
10620 },
10621 "response": {
10622 "evaluations": [
10623 {
10624 "id": "rev_01kq3c4d5e6f7g8h9j0k1m2n3p",
10625 "repo_id": "rep_01kq0f3a7b8c9d0e1f2g3h4j5k",
10626 "workspace": "flagon-io",
10627 "ruleset_id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
10628 "ruleset_name": "Protect main",
10629 "enforcement": "active",
10630 "action": "push",
10631 "git_ref": "refs/heads/main",
10632 "actor": "g1t",
10633 "actor_kind": "agent",
10634 "verdict": "fail",
10635 "violations": [
10636 {
10637 "rule": "pull_request",
10638 "ruleset_id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
10639 "ruleset_name": "Protect main",
10640 "enforcement": "active",
10641 "message": "Changes to main must be made through a pull request.",
10642 "remedy": "Push a branch, open a pull request into main, and merge it."
10643 }
10644 ],
10645 "number": null,
10646 "sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e",
10647 "repository": "flagon-io/hello",
10648 "created_at": "2026-10-07T14:02:11.318Z"
10649 }
10650 ],
10651 "next": null,
10652 "insights": {
10653 "days": 30,
10654 "total": 214,
10655 "passed": 198,
10656 "blocked": 9,
10657 "would_block": 5,
10658 "bypassed": 2,
10659 "by_ruleset": [
10660 {
10661 "ruleset_id": "rs_01kq3a8b9c0d1e2f3g4h5j6k7m",
10662 "ruleset_name": "Protect main",
10663 "enforcement": "active",
10664 "total": 120,
10665 "blocked": 9,
10666 "would_block": 0,
10667 "bypassed": 2
10668 }
10669 ],
10670 "by_rule": [
10671 {
10672 "rule": "pull_request",
10673 "count": 7
10674 },
10675 {
10676 "rule": "non_fast_forward",
10677 "count": 2
10678 }
10679 ]
10680 }
10681 }
Merge branch 'main' into worktree-agent-a69aeabc4b0deeb9710682 },
10683 "list_deployments": {
10684 "params": {
10685 "owner": "flagon-io",
10686 "name": "g1t"
10687 },
10688 "query": {
10689 "environment": "production",
10690 "per_page": "2"
10691 },
10692 "response": {
10693 "deployments": [
10694 {
10695 "id": "dep_01kq8m3t5v7x9z1b3d5f7h9k2m",
10696 "environment": "production",
10697 "ref": "main",
10698 "sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
10699 "task": "deploy",
10700 "description": "Deploy",
10701 "payload": {},
10702 "transient_environment": false,
10703 "production_environment": true,
10704 "state": "success",
10705 "environment_url": "https://g1t.sh",
10706 "log_url": "https://g1t.sh/flagon-io/g1t/actions/runs/run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10707 "creator": "syntaqx",
10708 "source": "actions",
10709 "run_id": "run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10710 "run_url": "https://g1t.sh/flagon-io/g1t/actions/runs/run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10711 "project": null,
10712 "number": null,
10713 "created_at": "2026-10-07T18:02:11.204Z",
10714 "updated_at": "2026-10-07T18:19:47.881Z"
10715 }
10716 ],
10717 "total_count": 304,
10718 "page": 1,
10719 "per_page": 2
10720 },
10721 "notes": "Every deployment of the repository in one list, wherever it ran: `source` is `api` for those reported with [`POST /repos/{owner}/{name}/deployments`](/reference/api/deployments/create-deployment/), `actions` for those a g1t Actions job with an `environment:` made, and `g1t_page` for [g1t.page](/guides/deployments/) builds, whose ids start `dpl_`. `state` is the latest status's. See [Deployments API](/guides/deployments-api/)."
10722 },
10723 "create_deployment": {
10724 "params": {
10725 "owner": "flagon-io",
10726 "name": "g1t"
10727 },
10728 "request": {
10729 "ref": "main",
10730 "environment": "staging",
10731 "description": "Deployed by the release pipeline",
10732 "payload": {
10733 "pipeline": 4182,
10734 "region": "us-east"
10735 },
10736 "state": "in_progress",
10737 "log_url": "https://ci.example.com/pipelines/4182"
10738 },
10739 "response": {
10740 "id": "dep_01kq7z9a1c3e5g7j9m1p3r5t7v",
10741 "environment": "staging",
10742 "ref": "main",
10743 "sha": "4b8d0f2a6c1e3579bd02468ace13579bdf02468a",
10744 "task": "deploy",
10745 "description": "Deployed by the release pipeline",
10746 "payload": {
10747 "pipeline": 4182,
10748 "region": "us-east"
10749 },
10750 "transient_environment": false,
10751 "production_environment": false,
10752 "state": "in_progress",
10753 "environment_url": null,
10754 "log_url": "https://ci.example.com/pipelines/4182",
10755 "creator": "flagon-io",
10756 "source": "api",
10757 "run_id": null,
10758 "run_url": null,
10759 "project": null,
10760 "number": null,
10761 "created_at": "2026-10-06T21:40:03.512Z",
10762 "updated_at": "2026-10-06T21:40:03.512Z",
10763 "statuses": [
10764 {
10765 "id": "dst_01kq7z9a1d4f6h8k0m2p4r6t8v",
10766 "deployment_id": "dep_01kq7z9a1c3e5g7j9m1p3r5t7v",
10767 "state": "in_progress",
10768 "description": "Deployed by the release pipeline",
10769 "environment_url": null,
10770 "log_url": "https://ci.example.com/pipelines/4182",
10771 "creator": "flagon-io",
10772 "created_at": "2026-10-06T21:40:03.512Z"
10773 }
10774 ]
10775 },
10776 "notes": "Report from any CI with an access token that has `deployments:write` (the CI preset has it) and the Write role. Then report each step with [`POST …/deployments/{id}/statuses`](/reference/api/deployments/create-deployment-status/). Each status sets the check `deploy / <environment>` on the commit. A g1t Actions job with an `environment:` does all of this itself. See [Deployments API](/guides/deployments-api/)."
10777 },
10778 "get_deployment": {
10779 "params": {
10780 "owner": "flagon-io",
10781 "name": "g1t",
10782 "id": "dep_01kq8m3t5v7x9z1b3d5f7h9k2m"
10783 },
10784 "response": {
10785 "id": "dep_01kq8m3t5v7x9z1b3d5f7h9k2m",
10786 "environment": "production",
10787 "ref": "main",
10788 "sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
10789 "task": "deploy",
10790 "description": "Deploy",
10791 "payload": {},
10792 "transient_environment": false,
10793 "production_environment": true,
10794 "state": "success",
10795 "environment_url": "https://g1t.sh",
10796 "log_url": "https://g1t.sh/flagon-io/g1t/actions/runs/run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10797 "creator": "syntaqx",
10798 "source": "actions",
10799 "run_id": "run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10800 "run_url": "https://g1t.sh/flagon-io/g1t/actions/runs/run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10801 "project": null,
10802 "number": null,
10803 "created_at": "2026-10-07T18:02:11.204Z",
10804 "updated_at": "2026-10-07T18:19:47.881Z",
10805 "statuses": [
10806 {
10807 "id": "dst_01kq8m3t5w0a2c4e6g8j0m2p4r",
10808 "deployment_id": "dep_01kq8m3t5v7x9z1b3d5f7h9k2m",
10809 "state": "in_progress",
10810 "description": "Deploy is deploying",
10811 "environment_url": "https://g1t.sh",
10812 "log_url": "https://g1t.sh/flagon-io/g1t/actions/runs/run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10813 "creator": "syntaqx",
10814 "created_at": "2026-10-07T18:02:11.204Z"
10815 },
10816 {
10817 "id": "dst_01kq8n4v6x8z0b2d4f6h8k0m2p",
10818 "deployment_id": "dep_01kq8m3t5v7x9z1b3d5f7h9k2m",
10819 "state": "success",
10820 "description": "Deploy deployed",
10821 "environment_url": "https://g1t.sh",
10822 "log_url": "https://g1t.sh/flagon-io/g1t/actions/runs/run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10823 "creator": "syntaqx",
10824 "created_at": "2026-10-07T18:19:47.881Z"
10825 }
10826 ]
10827 },
10828 "notes": "`statuses` are oldest first. A g1t.page build's (`dpl_…`) are read from the build: queued, building, how it ended, and `inactive` once a newer build replaced it or it was taken down."
10829 },
10830 "list_deployment_statuses": {
10831 "params": {
10832 "owner": "flagon-io",
10833 "name": "g1t",
10834 "id": "dep_01kq8m3t5v7x9z1b3d5f7h9k2m"
10835 },
10836 "response": [
10837 {
10838 "id": "dst_01kq8n4v6x8z0b2d4f6h8k0m2p",
10839 "deployment_id": "dep_01kq8m3t5v7x9z1b3d5f7h9k2m",
10840 "state": "success",
10841 "description": "Deploy deployed",
10842 "environment_url": "https://g1t.sh",
10843 "log_url": "https://g1t.sh/flagon-io/g1t/actions/runs/run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10844 "creator": "syntaqx",
10845 "created_at": "2026-10-07T18:19:47.881Z"
10846 },
10847 {
10848 "id": "dst_01kq8m3t5w0a2c4e6g8j0m2p4r",
10849 "deployment_id": "dep_01kq8m3t5v7x9z1b3d5f7h9k2m",
10850 "state": "in_progress",
10851 "description": "Deploy is deploying",
10852 "environment_url": "https://g1t.sh",
10853 "log_url": "https://g1t.sh/flagon-io/g1t/actions/runs/run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10854 "creator": "syntaqx",
10855 "created_at": "2026-10-07T18:02:11.204Z"
10856 }
10857 ]
10858 },
10859 "create_deployment_status": {
10860 "params": {
10861 "owner": "flagon-io",
10862 "name": "g1t",
10863 "id": "dep_01kq7z9a1c3e5g7j9m1p3r5t7v"
10864 },
10865 "request": {
10866 "state": "failure",
10867 "description": "Smoke tests failed",
10868 "log_url": "https://ci.example.com/pipelines/4182"
10869 },
10870 "response": {
10871 "id": "dst_01kq7zc2e4g6j8m0p2r4t6v8x0",
10872 "deployment_id": "dep_01kq7z9a1c3e5g7j9m1p3r5t7v",
10873 "state": "failure",
10874 "description": "Smoke tests failed",
10875 "environment_url": null,
10876 "log_url": "https://ci.example.com/pipelines/4182",
10877 "creator": "flagon-io",
10878 "created_at": "2026-10-06T21:44:58.020Z"
10879 },
10880 "notes": "`queued` and `in_progress` set the commit's `deploy / <environment>` check pending; `success`, `failure` and `error` settle it; `inactive` leaves it. A success makes the environment's older successful deployments `inactive` unless `auto_inactive` is false. A g1t.page build (`dpl_…`) answers `409`: its statuses come from the build."
10881 },
10882 "list_environments": {
10883 "params": {
10884 "owner": "flagon-io",
10885 "name": "g1t"
10886 },
10887 "response": {
10888 "total_count": 304,
10889 "environments": [
10890 {
10891 "name": "production",
10892 "url": "https://g1t.sh",
10893 "production_environment": true,
10894 "transient_environment": false,
10895 "deployments_count": 281,
10896 "latest": {
10897 "id": "dep_01kq8m3t5v7x9z1b3d5f7h9k2m",
10898 "environment": "production",
10899 "ref": "main",
10900 "sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
10901 "task": "deploy",
10902 "description": "Deploy",
10903 "payload": {},
10904 "transient_environment": false,
10905 "production_environment": true,
10906 "state": "success",
10907 "environment_url": "https://g1t.sh",
10908 "log_url": "https://g1t.sh/flagon-io/g1t/actions/runs/run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10909 "creator": "syntaqx",
10910 "source": "actions",
10911 "run_id": "run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10912 "run_url": "https://g1t.sh/flagon-io/g1t/actions/runs/run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10913 "project": null,
10914 "number": null,
10915 "created_at": "2026-10-07T18:02:11.204Z",
10916 "updated_at": "2026-10-07T18:19:47.881Z"
10917 },
10918 "current": {
10919 "id": "dep_01kq8m3t5v7x9z1b3d5f7h9k2m",
10920 "environment": "production",
10921 "ref": "main",
10922 "sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
10923 "task": "deploy",
10924 "description": "Deploy",
10925 "payload": {},
10926 "transient_environment": false,
10927 "production_environment": true,
10928 "state": "success",
10929 "environment_url": "https://g1t.sh",
10930 "log_url": "https://g1t.sh/flagon-io/g1t/actions/runs/run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10931 "creator": "syntaqx",
10932 "source": "actions",
10933 "run_id": "run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10934 "run_url": "https://g1t.sh/flagon-io/g1t/actions/runs/run_01kq8m2r4t6v8x0z2b4d6f8h0k",
10935 "project": null,
10936 "number": null,
10937 "created_at": "2026-10-07T18:02:11.204Z",
10938 "updated_at": "2026-10-07T18:19:47.881Z"
10939 },
10940 "updated_at": "2026-10-07T18:19:47.881Z"
10941 },
10942 {
10943 "name": "staging",
10944 "url": null,
10945 "production_environment": false,
10946 "transient_environment": false,
10947 "deployments_count": 19,
10948 "latest": {
10949 "id": "dep_01kq7z9a1c3e5g7j9m1p3r5t7v",
10950 "environment": "staging",
10951 "ref": "main",
10952 "sha": "4b8d0f2a6c1e3579bd02468ace13579bdf02468a",
10953 "task": "deploy",
10954 "description": "Deployed by the release pipeline",
10955 "payload": {
10956 "pipeline": 4182,
10957 "region": "us-east"
10958 },
10959 "transient_environment": false,
10960 "production_environment": false,
10961 "state": "failure",
10962 "environment_url": null,
10963 "log_url": "https://ci.example.com/pipelines/4182",
10964 "creator": "flagon-io",
10965 "source": "api",
10966 "run_id": null,
10967 "run_url": null,
10968 "project": null,
10969 "number": null,
10970 "created_at": "2026-10-06T21:40:03.512Z",
10971 "updated_at": "2026-10-06T21:44:58.020Z"
10972 },
10973 "current": null,
10974 "updated_at": "2026-10-06T21:44:58.020Z"
10975 }
10976 ]
10977 },
10978 "notes": "Production comes first, then the most recently deployed. `latest` is the newest deployment whatever its state; `current` is the newest that succeeded and is still active, and `url` is where it is served."
10979 },
Merge branch 'worktree-agent-a4d35ee70c50683d0' into claude/cool-newton-7nm8r910980 "start_deployment_build": {
10981 "params": {
10982 "owner": "flagon-io",
10983 "name": "hello"
10984 },
10985 "request": {
10986 "project": "hello"
10987 },
10988 "response": {
10989 "deploy_id": "dpl_01kq9c4e6g8j0m2p4r6t8v0x2z",
10990 "token": "…",
10991 "kind": "preview",
10992 "project": "hello",
10993 "branch": "new-header",
10994 "number": 42,
10995 "commit": "9f2c4e6a8b0d1f3e5a7c9b1d3f5e7a9c0b2d4f6e",
10996 "url": "https://hello-git-new-header-flagonio.g1t.page",
10997 "trusted": true,
10998 "root_dir": "",
10999 "build_command": null,
11000 "output_dir": null,
Merge GitHub pull request #8 (claude/cool-newton-7nm8r9): Docker deployments on g1t.page behind a switch that stays off until Cloudflare's container APIs are checked live, workflows a workspace manages in its repositories, tarball and zipball downloads, refs/pull/* kept to g1t alone, framework detection for g1t.page builds, and a workflow's event payload matching GitHub's.11001 "build_as": "auto",
11002 "dockerfile": null,
Merge branch 'worktree-agent-a4d35ee70c50683d0' into claude/cool-newton-7nm8r911003 "build_env": {
11004 "PUBLIC_API_URL": "https://api.example.com"
11005 },
11006 "build_secrets": {
11007 "SENTRY_AUTH_TOKEN": "…"
11008 }
11009 },
11010 "notes": "Called from a workflow step with the job's own token, `${{ github.token }}`, in a job with `permissions: deployments: write`; the [`g1t/deploy`](/guides/deployments/#deploying-from-a-workflow) action calls it, masks the token and the secrets, and runs `g1t-runner deploy` with them. Any other token is refused. This is a pull request's run, so it builds the pull request's preview; the same workflow on the production branch builds production. See [Deploying from a workflow](/guides/deployments/#deploying-from-a-workflow)."
11011 },
Merge branch 'main' into worktree-agent-a69aeabc4b0deeb9711012 "get_environment": {
11013 "params": {
11014 "owner": "flagon-io",
11015 "name": "docs",
11016 "environment": "preview"
11017 },
11018 "response": {
11019 "name": "preview",
11020 "url": "https://docs-git-docs-deployments-flagon-io.g1t.page",
11021 "production_environment": false,
11022 "transient_environment": true,
11023 "deployments_count": 87,
11024 "latest": {
11025 "id": "dpl_01kq8p2b4d6f8h0k2m4p6r8t0v",
11026 "environment": "preview",
11027 "ref": "docs-deployments",
11028 "sha": "e2f4a6c8b0d1e3f5a7c9b1d3e5f7a9c1b3d5e7f9",
11029 "task": "deploy",
11030 "description": "Preview of docs-deployments on g1t.page",
11031 "payload": {},
11032 "transient_environment": true,
11033 "production_environment": false,
11034 "state": "success",
11035 "environment_url": "https://docs-git-docs-deployments-flagon-io.g1t.page",
11036 "log_url": "https://g1t.sh/flagon-io/docs/deployments/dpl_01kq8p2b4d6f8h0k2m4p6r8t0v",
11037 "creator": "syntaqx",
11038 "source": "g1t_page",
11039 "run_id": null,
11040 "run_url": null,
11041 "project": "docs",
11042 "number": 412,
11043 "created_at": "2026-10-08T01:12:44.630Z",
11044 "updated_at": "2026-10-08T01:13:52.101Z"
11045 },
11046 "current": {
11047 "id": "dpl_01kq8p2b4d6f8h0k2m4p6r8t0v",
11048 "environment": "preview",
11049 "ref": "docs-deployments",
11050 "sha": "e2f4a6c8b0d1e3f5a7c9b1d3e5f7a9c1b3d5e7f9",
11051 "task": "deploy",
11052 "description": "Preview of docs-deployments on g1t.page",
11053 "payload": {},
11054 "transient_environment": true,
11055 "production_environment": false,
11056 "state": "success",
11057 "environment_url": "https://docs-git-docs-deployments-flagon-io.g1t.page",
11058 "log_url": "https://g1t.sh/flagon-io/docs/deployments/dpl_01kq8p2b4d6f8h0k2m4p6r8t0v",
11059 "creator": "syntaqx",
11060 "source": "g1t_page",
11061 "run_id": null,
11062 "run_url": null,
11063 "project": "docs",
11064 "number": 412,
11065 "created_at": "2026-10-08T01:12:44.630Z",
11066 "updated_at": "2026-10-08T01:13:52.101Z"
11067 },
11068 "updated_at": "2026-10-08T01:13:52.101Z"
11069 }
11070 },
Merge branch 'worktree-agent-a3abfcce648e87dca'11071 "update_environment": {
11072 "params": {
11073 "owner": "flagon-io",
11074 "name": "g1t",
11075 "environment": "production"
11076 },
11077 "request": {
11078 "wait_timer": 10,
11079 "prevent_self_review": true,
11080 "reviewers": [
11081 {
11082 "type": "User",
11083 "name": "syntaqx"
11084 },
11085 {
11086 "type": "Team",
11087 "name": "deployers"
11088 }
11089 ],
11090 "deployment_branch_policy": {
11091 "protected_branches": true,
11092 "custom_branch_policies": false
11093 }
11094 },
11095 "response": {
11096 "name": "production",
11097 "protection_rules": [
11098 {
11099 "type": "required_reviewers",
11100 "prevent_self_review": true,
11101 "reviewers": [
11102 {
11103 "type": "User",
11104 "reviewer": {
11105 "login": "syntaqx"
11106 }
11107 },
11108 {
11109 "type": "Team",
11110 "reviewer": {
11111 "slug": "deployers"
11112 }
11113 }
11114 ]
11115 },
11116 {
11117 "type": "wait_timer",
11118 "wait_timer": 10
11119 },
11120 {
11121 "type": "branch_policy"
11122 }
11123 ],
11124 "deployment_branch_policy": {
11125 "protected_branches": true,
11126 "custom_branch_policies": false
11127 },
11128 "branch_policies": [],
11129 "can_admins_bypass": true,
11130 "protected": true,
11131 "updated_at": "2026-10-08T09:12:44.103Z",
11132 "updated_by": "syntaqx"
11133 },
11134 "notes": "Fields left out stay as they are. A job with `environment: production` now waits for syntaqx or someone in deployers to approve it, then ten minutes, and runs only on a protected branch."
11135 },
11136 "delete_environment": {
11137 "params": {
11138 "owner": "flagon-io",
11139 "name": "g1t",
11140 "environment": "staging"
11141 },
11142 "response": {
11143 "deleted": true
11144 }
11145 },
11146 "get_pending_deployments": {
11147 "params": {
11148 "owner": "flagon-io",
11149 "name": "g1t",
11150 "id": "run_01kq9b3d5f7h9k1n3q5s7u9w1y"
11151 },
11152 "response": [
11153 {
11154 "environment": {
11155 "name": "production"
11156 },
11157 "state": "waiting",
11158 "needs_review": true,
11159 "wait_until": "2026-10-08T09:31:02.551Z",
11160 "current_user_can_approve": true,
11161 "reviewers": [
11162 {
11163 "type": "User",
11164 "reviewer": {
11165 "login": "syntaqx"
11166 }
11167 },
11168 {
11169 "type": "Team",
11170 "reviewer": {
11171 "slug": "deployers"
11172 }
11173 }
11174 ],
11175 "jobs": [
11176 "Deploy the core services"
11177 ],
11178 "reviewed_by": null,
11179 "comment": null,
11180 "reviewed_at": null
11181 }
11182 ]
11183 },
11184 "review_pending_deployments": {
11185 "params": {
11186 "owner": "flagon-io",
11187 "name": "g1t",
11188 "id": "run_01kq9b3d5f7h9k1n3q5s7u9w1y"
11189 },
11190 "request": {
11191 "environment_names": [
11192 "production"
11193 ],
11194 "state": "approved",
11195 "comment": "Release notes checked."
11196 },
11197 "response": [
11198 {
11199 "environment": {
11200 "name": "production"
11201 },
11202 "state": "approved",
11203 "needs_review": true,
11204 "wait_until": "2026-10-08T09:31:02.551Z",
11205 "current_user_can_approve": false,
11206 "reviewers": [
11207 {
11208 "type": "User",
11209 "reviewer": {
11210 "login": "syntaqx"
11211 }
11212 },
11213 {
11214 "type": "Team",
11215 "reviewer": {
11216 "slug": "deployers"
11217 }
11218 }
11219 ],
11220 "jobs": [
11221 "Deploy the core services"
11222 ],
11223 "reviewed_by": "syntaqx",
11224 "comment": "Release notes checked.",
11225 "reviewed_at": "2026-10-08T09:22:15.871Z"
11226 }
11227 ],
11228 "notes": "The jobs still wait for the wait timer, until `wait_until`, unless an admin approved past the rules."
11229 },
11230 "approve_workflow_run": {
11231 "params": {
11232 "owner": "flagon-io",
11233 "name": "g1t",
11234 "id": "run_01kq9a2c4e6g8j0m2p4r6t8v0x"
11235 },
11236 "response": {
11237 "id": "run_01kq9a2c4e6g8j0m2p4r6t8v0x",
11238 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
11239 "path": ".g1t/workflows/ci.yml",
11240 "name": "CI",
11241 "title": "Fix a typo in the README",
11242 "number": 41,
11243 "attempt": 1,
11244 "event": "pull_request",
11245 "ref": "refs/pull/88/merge",
11246 "sha": "4c1e7a9b2d5f8e0a3c6b9d2f5a8c1e4b7d0f3a6c",
11247 "pull": 88,
11248 "status": "queued",
11249 "conclusion": null,
11250 "error": null,
11251 "actor": "octo-fan",
11252 "created_at": "2026-10-08T08:02:11.004Z",
11253 "started_at": null,
11254 "finished_at": null
11255 }
11256 },
11257 "get_workflow_permissions": {
11258 "params": {
11259 "owner": "flagon-io",
11260 "name": "g1t"
11261 },
11262 "response": {
11263 "default_workflow_permissions": "read",
11264 "default_chosen": true,
11265 "max_workflow_permissions": "write",
11266 "can_approve_pull_request_reviews": false
11267 }
11268 },
11269 "set_workflow_permissions": {
11270 "params": {
11271 "owner": "flagon-io",
11272 "name": "g1t"
11273 },
11274 "request": {
11275 "default_workflow_permissions": "write"
11276 },
11277 "response": {
11278 "default_workflow_permissions": "write",
11279 "default_chosen": true,
11280 "max_workflow_permissions": "write",
11281 "can_approve_pull_request_reviews": false
11282 }
11283 },
11284 "get_fork_pr_approval": {
11285 "params": {
11286 "owner": "flagon-io",
11287 "name": "g1t"
11288 },
11289 "response": {
11290 "approval_policy": "outside_contributors"
11291 }
11292 },
11293 "set_fork_pr_approval": {
11294 "params": {
11295 "owner": "flagon-io",
11296 "name": "g1t"
11297 },
11298 "request": {
11299 "approval_policy": "all_external_contributors"
11300 },
11301 "response": {
11302 "approval_policy": "all_external_contributors"
11303 }
11304 },
Merge Actions: cross-repo workflows and actions, release and deployment triggers, step timeouts11305 "get_actions_access": {
11306 "params": {
11307 "owner": "flagon-io",
11308 "name": "shared-workflows"
11309 },
11310 "response": {
11311 "access_level": "none"
11312 }
11313 },
11314 "set_actions_access": {
11315 "params": {
11316 "owner": "flagon-io",
11317 "name": "shared-workflows"
11318 },
11319 "request": {
11320 "access_level": "organization"
11321 },
11322 "response": {
11323 "access_level": "organization"
11324 }
11325 },
Merge branch 'worktree-agent-a3abfcce648e87dca'11326 "create_repository_dispatch": {
11327 "params": {
11328 "owner": "flagon-io",
11329 "name": "g1t"
11330 },
11331 "request": {
11332 "event_type": "docs-published",
11333 "client_payload": {
11334 "version": "2026.10.08"
11335 }
11336 },
11337 "response": {
11338 "runs": 1
11339 }
11340 },
11341 "get_workspace_workflow_permissions": {
11342 "params": {
11343 "workspace": "flagon-io"
11344 },
11345 "response": {
11346 "default_workflow_permissions": "read",
11347 "max_workflow_permissions": "write",
11348 "can_approve_pull_request_reviews": false
11349 }
11350 },
11351 "set_workspace_workflow_permissions": {
11352 "params": {
11353 "workspace": "flagon-io"
11354 },
11355 "request": {
11356 "max_workflow_permissions": "read"
11357 },
11358 "response": {
11359 "default_workflow_permissions": "read",
11360 "max_workflow_permissions": "read",
11361 "can_approve_pull_request_reviews": false
11362 },
11363 "notes": "A maximum of read holds every repository's default to read-only, and makes the workspace's default read too."
11364 },
Merge GitHub pull request #8 (claude/cool-newton-7nm8r9): Docker deployments on g1t.page behind a switch that stays off until Cloudflare's container APIs are checked live, workflows a workspace manages in its repositories, tarball and zipball downloads, refs/pull/* kept to g1t alone, framework detection for g1t.page builds, and a workflow's event payload matching GitHub's.11365 "list_workspace_managed_workflows": {
11366 "params": {
11367 "workspace": "flagon-io"
11368 },
11369 "response": {
11370 "total_count": 1,
11371 "managed_workflows": [
11372 {
11373 "name": "security-scan",
11374 "path": "managed/security-scan.yml",
11375 "workflow_name": "Security scan",
11376 "source": "flagon-io/policies/.g1t/workflows/security-scan.yml@main",
11377 "source_sha": "4f1c2a9e0b7d3c5a8e6f1b2d4c7a9e0f3b5d8c1a",
11378 "source_private": false,
11379 "mode": "required",
11380 "repositories": [
11381 "*",
11382 "!sandbox-*"
11383 ],
11384 "visibility": "all",
11385 "content": "name: Security scan\non: [push, pull_request]\njobs:\n scan:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - run: ./scripts/scan.sh\n",
11386 "created_at": "2026-10-12T09:30:00Z",
11387 "updated_at": "2026-10-12T09:30:00Z",
11388 "updated_by": "ada"
11389 }
11390 ]
11391 }
11392 },
11393 "create_workspace_managed_workflow": {
11394 "params": {
11395 "workspace": "flagon-io"
11396 },
11397 "request": {
11398 "name": "security-scan",
11399 "source": "flagon-io/policies/.g1t/workflows/security-scan.yml@main",
11400 "mode": "required",
11401 "repositories": [
11402 "*",
11403 "!sandbox-*"
11404 ]
11405 },
11406 "response": {
11407 "name": "security-scan",
11408 "path": "managed/security-scan.yml",
11409 "workflow_name": "Security scan",
11410 "source": "flagon-io/policies/.g1t/workflows/security-scan.yml@main",
11411 "source_sha": "4f1c2a9e0b7d3c5a8e6f1b2d4c7a9e0f3b5d8c1a",
11412 "source_private": false,
11413 "mode": "required",
11414 "repositories": [
11415 "*",
11416 "!sandbox-*"
11417 ],
11418 "visibility": "all",
11419 "content": "name: Security scan\non: [push, pull_request]\njobs:\n scan:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - run: ./scripts/scan.sh\n",
11420 "created_at": "2026-10-12T09:30:00Z",
11421 "updated_at": "2026-10-12T09:30:00Z",
11422 "updated_by": "ada"
11423 },
11424 "notes": "g1t copies the source when you save it, and that copy runs in each repository the workflow targets, as the repository's own workflow, with its token and secrets. A source in a private repository runs in private repositories only: give visibility private."
11425 },
11426 "update_workspace_managed_workflow": {
11427 "params": {
11428 "workspace": "flagon-io",
11429 "workflow": "security-scan"
11430 },
11431 "request": {
11432 "refresh": true
11433 },
11434 "response": {
11435 "name": "security-scan",
11436 "path": "managed/security-scan.yml",
11437 "workflow_name": "Security scan",
11438 "source": "flagon-io/policies/.g1t/workflows/security-scan.yml@main",
11439 "source_sha": "4f1c2a9e0b7d3c5a8e6f1b2d4c7a9e0f3b5d8c1a",
11440 "source_private": false,
11441 "mode": "required",
11442 "repositories": [
11443 "*",
11444 "!sandbox-*"
11445 ],
11446 "visibility": "all",
11447 "content": "name: Security scan\non: [push, pull_request]\njobs:\n scan:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - run: ./scripts/scan.sh\n",
11448 "created_at": "2026-10-12T09:30:00Z",
11449 "updated_at": "2026-10-12T09:30:00Z",
11450 "updated_by": "ada"
11451 },
11452 "notes": "refresh copies the source again at the commit its ref names now. Fields left out stay as they are."
11453 },
11454 "delete_workspace_managed_workflow": {
11455 "params": {
11456 "workspace": "flagon-io",
11457 "workflow": "security-scan"
11458 },
11459 "response": {
11460 "deleted": true
11461 }
11462 },
API and MCP for a workspace's personal access token rules, members' tokens and approvals11463 "get_token_policy": {
11464 "params": {
11465 "workspace": "flagon-io"
11466 },
11467 "response": {
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11468 "allow_tokens_for_all_workspaces": true,
11469 "allow_tokens_for_this_workspace": true,
API and MCP for a workspace's personal access token rules, members' tokens and approvals11470 "require_approval": true,
11471 "max_lifetime_days": null,
11472 "forbid_no_expiry": false,
11473 "updated_by": null,
11474 "updated_at": null
11475 }
11476 },
11477 "set_token_policy": {
11478 "params": {
11479 "workspace": "flagon-io"
11480 },
11481 "request": {
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11482 "allow_tokens_for_all_workspaces": false,
API and MCP for a workspace's personal access token rules, members' tokens and approvals11483 "max_lifetime_days": 90
11484 },
11485 "response": {
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11486 "allow_tokens_for_all_workspaces": false,
11487 "allow_tokens_for_this_workspace": true,
API and MCP for a workspace's personal access token rules, members' tokens and approvals11488 "require_approval": true,
11489 "max_lifetime_days": 90,
11490 "forbid_no_expiry": false,
11491 "updated_by": "ada",
11492 "updated_at": "2026-10-08T09:30:00.000Z"
11493 },
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11494 "notes": "From each token's next request, tokens made for all of a member's workspaces no longer reach this one (tokens made for it alone still do), and neither does a token that lasts longer than 90 days or never expires. They keep working everywhere else."
API and MCP for a workspace's personal access token rules, members' tokens and approvals11495 },
11496 "list_member_tokens": {
11497 "params": {
11498 "workspace": "flagon-io"
11499 },
11500 "response": [
11501 {
11502 "id": "tok_01HZX3K2M9V7Q4N8B6D5C3A2E1",
11503 "name": "release-bot",
11504 "owner": "ada",
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11505 "description": "Publishes releases from CI",
API and MCP for a workspace's personal access token rules, members' tokens and approvals11506 "created_at": "2026-10-08T09:00:00.000Z",
11507 "created_by": null,
11508 "last_used_at": null,
11509 "expires_at": "2026-11-07T09:00:00.000Z",
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11510 "scopes": ["repo:read", "code:write"],
11511 "workspace": "flagon-io",
API and MCP for a workspace's personal access token rules, members' tokens and approvals11512 "repository_selection": "selected",
11513 "repositories": ["flagon-io/hello"],
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11514 "permissions": { "code": "write", "repo": "read" },
API and MCP for a workspace's personal access token rules, members' tokens and approvals11515 "status": "pending",
11516 "review_reason": null,
11517 "reaches": false,
11518 "blocked_by": "pending approval"
11519 }
11520 ]
11521 },
11522 "list_token_requests": {
11523 "params": {
11524 "workspace": "flagon-io"
11525 },
11526 "response": [
11527 {
11528 "id": "tok_01HZX3K2M9V7Q4N8B6D5C3A2E1",
11529 "name": "release-bot",
11530 "owner": "ada",
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11531 "description": "Publishes releases from CI",
API and MCP for a workspace's personal access token rules, members' tokens and approvals11532 "created_at": "2026-10-08T09:00:00.000Z",
11533 "created_by": null,
11534 "last_used_at": null,
11535 "expires_at": "2026-11-07T09:00:00.000Z",
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11536 "scopes": ["repo:read", "code:write"],
11537 "workspace": "flagon-io",
API and MCP for a workspace's personal access token rules, members' tokens and approvals11538 "repository_selection": "selected",
11539 "repositories": ["flagon-io/hello"],
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11540 "permissions": { "code": "write", "repo": "read" },
API and MCP for a workspace's personal access token rules, members' tokens and approvals11541 "status": "pending",
11542 "review_reason": null,
11543 "reaches": false,
11544 "blocked_by": "pending approval"
11545 }
11546 ]
11547 },
11548 "review_token_request": {
11549 "params": {
11550 "workspace": "flagon-io",
11551 "id": "tok_01HZX3K2M9V7Q4N8B6D5C3A2E1"
11552 },
11553 "request": {
11554 "decision": "approve"
11555 },
11556 "response": {
11557 "id": "tok_01HZX3K2M9V7Q4N8B6D5C3A2E1",
11558 "name": "release-bot",
11559 "owner": "ada",
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11560 "description": "Publishes releases from CI",
API and MCP for a workspace's personal access token rules, members' tokens and approvals11561 "created_at": "2026-10-08T09:00:00.000Z",
11562 "created_by": null,
11563 "last_used_at": null,
11564 "expires_at": "2026-11-07T09:00:00.000Z",
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11565 "scopes": ["repo:read", "code:write"],
11566 "workspace": "flagon-io",
API and MCP for a workspace's personal access token rules, members' tokens and approvals11567 "repository_selection": "selected",
11568 "repositories": ["flagon-io/hello"],
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers11569 "permissions": { "code": "write", "repo": "read" },
API and MCP for a workspace's personal access token rules, members' tokens and approvals11570 "status": "active",
11571 "review_reason": null,
11572 "reaches": true,
11573 "blocked_by": null
11574 },
11575 "notes": "The token's owner hears of it in their inbox. A denied token reaches public repositories only."
11576 },
11577 "revoke_member_token": {
11578 "params": {
11579 "workspace": "flagon-io",
11580 "id": "tok_01HZX3K2M9V7Q4N8B6D5C3A2E1"
11581 },
11582 "request": {
11583 "reason": "Rotated after the laptop was lost"
11584 },
11585 "response": {
11586 "revoked": true
11587 }
11588 },
Merge branch 'main' into worktree-agent-a69aeabc4b0deeb9711589 "get_languages": {
11590 "response": {
11591 "head": "9f3c2a1b7e5d4c3b2a19f8e7d6c5b4a39281706f",
11592 "commit": "9f3c2a1b7e5d4c3b2a19f8e7d6c5b4a39281706f",
11593 "computed_at": "2026-10-07T09:14:03.000Z",
11594 "pending": false,
11595 "partial": false,
11596 "languages": [
11597 {
11598 "name": "Rust",
11599 "color": "#dea584",
11600 "bytes": 184213,
11601 "percent": 71.4
11602 },
11603 {
11604 "name": "TypeScript",
11605 "color": "#3178c6",
11606 "bytes": 61022,
11607 "percent": 23.7
11608 },
11609 {
11610 "name": "Shell",
11611 "color": "#89e051",
11612 "bytes": 12650,
11613 "percent": 4.9
11614 }
11615 ]
11616 },
11617 "notes": "While `pending` is true, `languages` is empty: the default branch is being read for the first time. When `commit` is not `head`, the answer is for an older commit while the newer one is read."
11618 },
11619 "list_contributors": {
11620 "response": {
11621 "head": "9f3c2a1b7e5d4c3b2a19f8e7d6c5b4a39281706f",
11622 "commit": "9f3c2a1b7e5d4c3b2a19f8e7d6c5b4a39281706f",
11623 "computed_at": "2026-10-07T09:14:03.000Z",
11624 "pending": false,
11625 "partial": false,
11626 "total": 3,
11627 "commits": 126,
11628 "contributors": [
11629 {
11630 "kind": "g1t",
11631 "name": "g1t",
11632 "username": null,
11633 "avatar": null,
11634 "commits": 71,
11635 "first_at": "2026-09-29T08:00:00.000Z",
11636 "last_at": "2026-10-07T08:41:00.000Z",
11637 "weeks": [
11638 {
11639 "week": "2026-09-28",
11640 "commits": 40
11641 },
11642 {
11643 "week": "2026-10-05",
11644 "commits": 31
11645 }
11646 ]
11647 },
11648 {
11649 "kind": "user",
11650 "name": "ada",
11651 "username": "ada",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar11652 "display_username": "Ada",
Merge branch 'main' into worktree-agent-a69aeabc4b0deeb9711653 "avatar": "5f2b8c1d9e7a3f6b4c0d2e8a1b9c7d5e3f1a0b2c4d6e8f0a1b3c5d7e9f0a2b4c",
11654 "commits": 52,
11655 "first_at": "2026-09-28T14:11:52.000Z",
11656 "last_at": "2026-10-06T16:02:11.000Z",
11657 "weeks": [
11658 {
11659 "week": "2026-09-28",
11660 "commits": 30
11661 },
11662 {
11663 "week": "2026-10-05",
11664 "commits": 22
11665 }
11666 ]
11667 },
11668 {
11669 "kind": "author",
11670 "name": "Sam Okafor",
11671 "username": null,
11672 "avatar": null,
11673 "commits": 3,
11674 "first_at": "2026-10-02T11:20:00.000Z",
11675 "last_at": "2026-10-03T09:05:00.000Z",
11676 "weeks": [
11677 {
11678 "week": "2026-09-28",
11679 "commits": 3
11680 }
11681 ]
11682 }
11683 ],
11684 "weeks": [
11685 {
11686 "week": "2026-09-28",
11687 "commits": 73
11688 },
11689 {
11690 "week": "2026-10-05",
11691 "commits": 53
11692 }
11693 ]
11694 },
11695 "notes": "Read from the newest 3,000 commits of the default branch. A person's addresses count as one when they confirmed them on their account; their noreply address counts too."
11696 },
11697 "get_license": {
11698 "response": {
11699 "spdx_id": "MIT",
11700 "name": "MIT License",
11701 "path": "LICENSE"
11702 }
11703 },
11704 "list_stargazers": {
11705 "query": {
11706 "page": 1
11707 },
11708 "response": [
11709 {
11710 "username": "ada",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar11711 "display_username": "Ada",
Merge branch 'main' into worktree-agent-a69aeabc4b0deeb9711712 "avatar": null,
11713 "starred_at": "2026-10-06T18:30:00.000Z"
11714 },
11715 {
11716 "username": "sam",
Cards you act on in chat; agents comment and review as themselves; names shown cleanly; commits on the calendar11717 "display_username": "sam",
Merge branch 'main' into worktree-agent-a69aeabc4b0deeb9711718 "avatar": null,
11719 "starred_at": "2026-10-02T09:12:00.000Z"
11720 }
11721 ]
11722 },
11723 "list_starred": {
11724 "response": [
11725 {
11726 "repo": {
11727 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
11728 "namespace": "flagon-io",
11729 "name": "hello",
11730 "description": "A tiny service that says hello.",
11731 "is_private": false,
11732 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
11733 "default_branch": "main",
11734 "fork_of": null,
11735 "protected": true,
11736 "created_at": "2026-09-28T14:11:52.640Z",
11737 "topics": [
11738 "cli"
11739 ],
11740 "website": "https://hello.g1t.page",
11741 "archived_at": null
11742 },
11743 "starred_at": "2026-10-06T18:30:00.000Z",
11744 "stars": 12
11745 }
11746 ]
11747 },
11748 "check_starred": {
11749 "response": {
11750 "starred": true,
11751 "stars": 12
11752 }
11753 },
11754 "star_repo": {
11755 "response": {
11756 "starred": true,
11757 "stars": 13
11758 }
11759 },
11760 "unstar_repo": {
11761 "response": {
11762 "starred": false,
11763 "stars": 12
11764 }
11765 },
11766 "list_releases": {
11767 "response": [
11768 {
11769 "id": "rel_01m4a2b7c9d3e5f7g9h1j3k5m7",
11770 "tag_name": "v1.2.0",
11771 "target": "9f3c2a1b7e5d4c3b2a19f8e7d6c5b4a39281706f",
11772 "name": "Greetings by name",
11773 "body": "## What changed\n\n- `hello` greets the caller by name (#12)\n- Faster start-up (#15)",
11774 "draft": false,
11775 "prerelease": false,
11776 "author": "ada",
11777 "created_at": "2026-10-06T16:02:11.000Z",
11778 "published_at": "2026-10-06T16:02:11.000Z",
11779 "latest": true
11780 },
11781 {
11782 "id": "rel_01m3x8q2w4e6r8t0y2u4i6o8p0",
11783 "tag_name": "v1.1.0",
11784 "target": "3b2a19f8e7d6c5b4a392817069f3c2a1b7e5d4c3",
11785 "name": "First release",
11786 "body": "The first release.",
11787 "draft": false,
11788 "prerelease": false,
11789 "author": "ada",
11790 "created_at": "2026-09-30T10:00:00.000Z",
11791 "published_at": "2026-09-30T10:00:00.000Z",
11792 "latest": false
11793 }
11794 ],
11795 "notes": "Drafts are listed only to those with the Write role; their `published_at` is null."
11796 },
11797 "get_latest_release": {
11798 "response": {
11799 "id": "rel_01m4a2b7c9d3e5f7g9h1j3k5m7",
11800 "tag_name": "v1.2.0",
11801 "target": "9f3c2a1b7e5d4c3b2a19f8e7d6c5b4a39281706f",
11802 "name": "Greetings by name",
11803 "body": "## What changed\n\n- `hello` greets the caller by name (#12)\n- Faster start-up (#15)",
11804 "draft": false,
11805 "prerelease": false,
11806 "author": "ada",
11807 "created_at": "2026-10-06T16:02:11.000Z",
11808 "published_at": "2026-10-06T16:02:11.000Z",
11809 "latest": true
11810 }
11811 },
11812 "get_release_by_tag": {
11813 "params": {
11814 "tag": "v1.2.0"
11815 },
11816 "response": {
11817 "id": "rel_01m4a2b7c9d3e5f7g9h1j3k5m7",
11818 "tag_name": "v1.2.0",
11819 "target": "9f3c2a1b7e5d4c3b2a19f8e7d6c5b4a39281706f",
11820 "name": "Greetings by name",
11821 "body": "## What changed\n\n- `hello` greets the caller by name (#12)\n- Faster start-up (#15)",
11822 "draft": false,
11823 "prerelease": false,
11824 "author": "ada",
11825 "created_at": "2026-10-06T16:02:11.000Z",
11826 "published_at": "2026-10-06T16:02:11.000Z",
11827 "latest": true
11828 }
11829 },
11830 "get_release": {
11831 "params": {
11832 "id": "rel_01m4a2b7c9d3e5f7g9h1j3k5m7"
11833 },
11834 "response": {
11835 "id": "rel_01m4a2b7c9d3e5f7g9h1j3k5m7",
11836 "tag_name": "v1.2.0",
11837 "target": "9f3c2a1b7e5d4c3b2a19f8e7d6c5b4a39281706f",
11838 "name": "Greetings by name",
11839 "body": "## What changed\n\n- `hello` greets the caller by name (#12)\n- Faster start-up (#15)",
11840 "draft": false,
11841 "prerelease": false,
11842 "author": "ada",
11843 "created_at": "2026-10-06T16:02:11.000Z",
11844 "published_at": "2026-10-06T16:02:11.000Z",
11845 "latest": true
11846 }
11847 },
11848 "create_release": {
11849 "request": {
11850 "tag_name": "v1.2.0",
11851 "target": "main",
11852 "release_name": "Greetings by name",
11853 "body": "## What changed\n\n- `hello` greets the caller by name (#12)\n- Faster start-up (#15)",
11854 "draft": false,
11855 "prerelease": false
11856 },
11857 "response": {
11858 "id": "rel_01m4a2b7c9d3e5f7g9h1j3k5m7",
11859 "tag_name": "v1.2.0",
11860 "target": "9f3c2a1b7e5d4c3b2a19f8e7d6c5b4a39281706f",
11861 "name": "Greetings by name",
11862 "body": "## What changed\n\n- `hello` greets the caller by name (#12)\n- Faster start-up (#15)",
11863 "draft": false,
11864 "prerelease": false,
11865 "author": "ada",
11866 "created_at": "2026-10-06T16:02:11.000Z",
11867 "published_at": "2026-10-06T16:02:11.000Z",
11868 "latest": true
11869 },
11870 "notes": "A tag that already exists is released as it is, and `target` is ignored. One release per tag: releasing a tag again is refused with `conflict`."
11871 },
11872 "update_release": {
11873 "params": {
11874 "id": "rel_01m4a2b7c9d3e5f7g9h1j3k5m7"
11875 },
11876 "request": {
11877 "body": "## What changed\n\n- `hello` greets the caller by name (#12)\n- Faster start-up (#15)\n- Docs for `--name`"
11878 },
11879 "response": {
11880 "id": "rel_01m4a2b7c9d3e5f7g9h1j3k5m7",
11881 "tag_name": "v1.2.0",
11882 "target": "9f3c2a1b7e5d4c3b2a19f8e7d6c5b4a39281706f",
11883 "name": "Greetings by name",
11884 "body": "## What changed\n\n- `hello` greets the caller by name (#12)\n- Faster start-up (#15)\n- Docs for `--name`",
11885 "draft": false,
11886 "prerelease": false,
11887 "author": "ada",
11888 "created_at": "2026-10-06T16:02:11.000Z",
11889 "published_at": "2026-10-06T16:02:11.000Z",
11890 "latest": true
11891 }
11892 },
11893 "delete_release": {
11894 "params": {
11895 "id": "rel_01m4a2b7c9d3e5f7g9h1j3k5m7"
11896 },
11897 "response": {
11898 "deleted": true
11899 }
Merge checks: statuses and check runs on every commit11900 },
11901 "create_commit_status": {
11902 "params": {
11903 "owner": "flagon-io",
11904 "name": "hello",
11905 "sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e"
11906 },
11907 "request": {
11908 "state": "success",
11909 "context": "ci/build",
11910 "description": "Build #4821 passed",
11911 "target_url": "https://ci.example.com/builds/4821"
11912 },
11913 "response": {
11914 "context": "ci/build",
11915 "state": "success",
11916 "description": "Build #4821 passed",
11917 "target_url": "https://ci.example.com/builds/4821",
11918 "updated_at": "2026-10-07T14:03:02.118Z",
11919 "source": "api"
11920 },
11921 "notes": "Setting a context again replaces its status on that commit. A status counts as a check: a required check named `ci/build`, in branch protection or a ruleset's `required_status_checks`, is met by it, and a ruleset check pinned to the `api` integration only by statuses and check runs reported through the API. See the [Checks guide](/guides/checks/)."
11922 },
11923 "list_commit_statuses": {
11924 "params": {
11925 "owner": "flagon-io",
11926 "name": "hello",
11927 "ref": "main"
11928 },
11929 "response": [
11930 {
11931 "context": "ci/build",
11932 "state": "success",
11933 "description": "Build #4821 passed",
11934 "target_url": "https://ci.example.com/builds/4821",
11935 "updated_at": "2026-10-07T14:03:02.118Z",
11936 "source": "api"
11937 }
11938 ]
11939 },
11940 "get_combined_status": {
11941 "params": {
11942 "owner": "flagon-io",
11943 "name": "hello",
11944 "ref": "main"
11945 },
11946 "response": {
11947 "state": "success",
11948 "sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e",
11949 "total_count": 1,
11950 "statuses": [
11951 {
11952 "context": "ci/build",
11953 "state": "success",
11954 "description": "Build #4821 passed",
11955 "target_url": "https://ci.example.com/builds/4821",
11956 "updated_at": "2026-10-07T14:03:02.118Z",
11957 "source": "api"
11958 }
11959 ]
11960 }
11961 },
11962 "create_check_run": {
11963 "params": {
11964 "owner": "flagon-io",
11965 "name": "hello"
11966 },
11967 "request": {
11968 "name": "lint",
11969 "head_sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e",
11970 "status": "completed",
11971 "conclusion": "failure",
11972 "details_url": "https://ci.example.com/builds/4821",
11973 "external_id": "4821",
11974 "output": {
11975 "title": "2 problems",
11976 "summary": "**2** problems in 1 file.",
11977 "annotations": [
11978 {
11979 "path": "src/parse.rs",
11980 "start_line": 42,
11981 "end_line": 42,
11982 "annotation_level": "warning",
11983 "message": "unused variable: `depth`"
11984 }
11985 ]
11986 },
11987 "actions": [
11988 {
11989 "label": "Fix this",
11990 "description": "Apply the suggested fixes",
11991 "identifier": "fix"
11992 }
11993 ]
11994 },
11995 "response": {
11996 "id": "cr_01kq4b7c8d9e0f1g2h3j4k5m6n",
11997 "name": "lint",
11998 "head_sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e",
11999 "status": "completed",
12000 "conclusion": "failure",
12001 "started_at": "2026-10-07T14:02:11.000Z",
12002 "completed_at": "2026-10-07T14:02:36.000Z",
12003 "details_url": "https://ci.example.com/builds/4821",
12004 "external_id": "4821",
12005 "html_url": "https://g1t.sh/flagon-io/hello/checks/cr_01kq4b7c8d9e0f1g2h3j4k5m6n",
12006 "output": {
12007 "title": "2 problems",
12008 "summary": "**2** problems in 1 file.",
12009 "text": null,
12010 "annotations_count": 2
12011 },
12012 "actions": [
12013 {
12014 "label": "Fix this",
12015 "description": "Apply the suggested fixes",
12016 "identifier": "fix"
12017 }
12018 ],
12019 "check_suite": {
12020 "id": "cs_01kq4b7c8d9e0f1g2h3j4k5m6p"
12021 },
12022 "app": {
12023 "slug": "buildkite",
12024 "name": "Buildkite"
12025 },
12026 "created_at": "2026-10-07T14:02:11.318Z"
12027 },
12028 "notes": "Start a run as `queued` or `in_progress` and complete it later with [`update_check_run`](/reference/api/checks/update-check-run/), or create it completed. `app` names who reports it; by default it is your token's name, and a g1t Actions job's `G1T_TOKEN` reports as g1t Actions. Each reporter's runs on a commit form one check suite. The run also stands as a status of its name, so a required check `lint` is met by it: `success`, `neutral` and `skipped` pass, any other conclusion fails. See the [Checks guide](/guides/checks/)."
12029 },
12030 "update_check_run": {
12031 "params": {
12032 "owner": "flagon-io",
12033 "name": "hello",
12034 "id": "cr_01kq4b7c8d9e0f1g2h3j4k5m6n"
12035 },
12036 "request": {
12037 "conclusion": "success",
12038 "output": {
12039 "title": "No problems",
12040 "summary": "All clear."
12041 }
12042 },
12043 "response": {
12044 "id": "cr_01kq4b7c8d9e0f1g2h3j4k5m6n",
12045 "name": "lint",
12046 "head_sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e",
12047 "status": "completed",
12048 "conclusion": "success",
12049 "started_at": "2026-10-07T14:02:11.000Z",
12050 "completed_at": "2026-10-07T14:02:36.000Z",
12051 "details_url": "https://ci.example.com/builds/4821",
12052 "external_id": "4821",
12053 "html_url": "https://g1t.sh/flagon-io/hello/checks/cr_01kq4b7c8d9e0f1g2h3j4k5m6n",
12054 "output": {
12055 "title": "No problems",
12056 "summary": "All clear.",
12057 "text": null,
12058 "annotations_count": 2
12059 },
12060 "actions": [
12061 {
12062 "label": "Fix this",
12063 "description": "Apply the suggested fixes",
12064 "identifier": "fix"
12065 }
12066 ],
12067 "check_suite": {
12068 "id": "cs_01kq4b7c8d9e0f1g2h3j4k5m6p"
12069 },
12070 "app": {
12071 "slug": "buildkite",
12072 "name": "Buildkite"
12073 },
12074 "created_at": "2026-10-07T14:02:11.318Z"
12075 },
12076 "notes": "Annotations given here are added to the ones the run has, at most 50 a request and 1000 in all."
12077 },
12078 "get_check_run": {
12079 "params": {
12080 "owner": "flagon-io",
12081 "name": "hello",
12082 "id": "job_01kq4b6a7b8c9d0e1f2g3h4j5k"
12083 },
12084 "response": {
12085 "id": "job_01kq4b6a7b8c9d0e1f2g3h4j5k",
12086 "name": "Test",
12087 "head_sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e",
12088 "status": "completed",
12089 "conclusion": "success",
12090 "started_at": "2026-10-07T14:01:02.000Z",
12091 "completed_at": "2026-10-07T14:01:27.000Z",
12092 "details_url": "https://g1t.sh/flagon-io/hello/actions/runs/run_01kq4b6a7b8c9d0e1f2g3h4j5m?job=job_01kq4b6a7b8c9d0e1f2g3h4j5k",
12093 "external_id": null,
12094 "html_url": "https://g1t.sh/flagon-io/hello/actions/runs/run_01kq4b6a7b8c9d0e1f2g3h4j5m?job=job_01kq4b6a7b8c9d0e1f2g3h4j5k",
12095 "output": {
12096 "title": null,
12097 "summary": null,
12098 "text": null,
12099 "annotations_count": 0
12100 },
12101 "actions": [],
12102 "check_suite": {
12103 "id": "run_01kq4b6a7b8c9d0e1f2g3h4j5m"
12104 },
12105 "app": {
12106 "slug": "actions",
12107 "name": "g1t Actions"
12108 },
12109 "workflow": {
12110 "run_id": "run_01kq4b6a7b8c9d0e1f2g3h4j5m",
12111 "name": "CI",
12112 "event": "push"
12113 },
12114 "created_at": "2026-10-07T14:01:00.512Z"
12115 }
12116 },
12117 "list_check_run_annotations": {
12118 "params": {
12119 "owner": "flagon-io",
12120 "name": "hello",
12121 "id": "cr_01kq4b7c8d9e0f1g2h3j4k5m6n"
12122 },
12123 "response": [
12124 {
12125 "path": "src/parse.rs",
12126 "start_line": 42,
12127 "end_line": 42,
12128 "start_column": 9,
12129 "end_column": 14,
12130 "annotation_level": "warning",
12131 "message": "unused variable: `depth`",
12132 "title": "unused_variables",
12133 "raw_details": "#[warn(unused_variables)] on by default"
12134 }
12135 ]
12136 },
12137 "rerequest_check_run": {
12138 "params": {
12139 "owner": "flagon-io",
12140 "name": "hello",
12141 "id": "cr_01kq4b7c8d9e0f1g2h3j4k5m6n"
12142 },
12143 "response": {
12144 "rerequested": true
12145 }
12146 },
12147 "list_check_runs_for_ref": {
12148 "params": {
12149 "owner": "flagon-io",
12150 "name": "hello",
12151 "ref": "main"
12152 },
12153 "query": {
12154 "filter": "latest"
12155 },
12156 "response": {
12157 "total_count": 2,
12158 "check_runs": [
12159 {
12160 "id": "cr_01kq4b7c8d9e0f1g2h3j4k5m6n",
12161 "name": "lint",
12162 "head_sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e",
12163 "status": "completed",
12164 "conclusion": "failure",
12165 "started_at": "2026-10-07T14:02:11.000Z",
12166 "completed_at": "2026-10-07T14:02:36.000Z",
12167 "details_url": "https://ci.example.com/builds/4821",
12168 "external_id": "4821",
12169 "html_url": "https://g1t.sh/flagon-io/hello/checks/cr_01kq4b7c8d9e0f1g2h3j4k5m6n",
12170 "output": {
12171 "title": "2 problems",
12172 "summary": "**2** problems in 1 file.",
12173 "text": null,
12174 "annotations_count": 2
12175 },
12176 "actions": [
12177 {
12178 "label": "Fix this",
12179 "description": "Apply the suggested fixes",
12180 "identifier": "fix"
12181 }
12182 ],
12183 "check_suite": {
12184 "id": "cs_01kq4b7c8d9e0f1g2h3j4k5m6p"
12185 },
12186 "app": {
12187 "slug": "buildkite",
12188 "name": "Buildkite"
12189 },
12190 "created_at": "2026-10-07T14:02:11.318Z"
12191 },
12192 {
12193 "id": "job_01kq4b6a7b8c9d0e1f2g3h4j5k",
12194 "name": "Test",
12195 "head_sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e",
12196 "status": "completed",
12197 "conclusion": "success",
12198 "started_at": "2026-10-07T14:01:02.000Z",
12199 "completed_at": "2026-10-07T14:01:27.000Z",
12200 "details_url": "https://g1t.sh/flagon-io/hello/actions/runs/run_01kq4b6a7b8c9d0e1f2g3h4j5m?job=job_01kq4b6a7b8c9d0e1f2g3h4j5k",
12201 "external_id": null,
12202 "html_url": "https://g1t.sh/flagon-io/hello/actions/runs/run_01kq4b6a7b8c9d0e1f2g3h4j5m?job=job_01kq4b6a7b8c9d0e1f2g3h4j5k",
12203 "output": {
12204 "title": null,
12205 "summary": null,
12206 "text": null,
12207 "annotations_count": 0
12208 },
12209 "actions": [],
12210 "check_suite": {
12211 "id": "run_01kq4b6a7b8c9d0e1f2g3h4j5m"
12212 },
12213 "app": {
12214 "slug": "actions",
12215 "name": "g1t Actions"
12216 },
12217 "workflow": {
12218 "run_id": "run_01kq4b6a7b8c9d0e1f2g3h4j5m",
12219 "name": "CI",
12220 "event": "push"
12221 },
12222 "created_at": "2026-10-07T14:01:00.512Z"
12223 }
12224 ]
12225 }
12226 },
12227 "list_check_suites_for_ref": {
12228 "params": {
12229 "owner": "flagon-io",
12230 "name": "hello",
12231 "ref": "main"
12232 },
12233 "response": {
12234 "total_count": 2,
12235 "check_suites": [
12236 {
12237 "id": "cs_01kq4b7c8d9e0f1g2h3j4k5m6p",
12238 "head_sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e",
12239 "head_branch": "main",
12240 "status": "completed",
12241 "conclusion": "failure",
12242 "app": {
12243 "slug": "buildkite",
12244 "name": "Buildkite"
12245 },
12246 "latest_check_runs_count": 1,
12247 "created_at": "2026-10-07T14:02:11.318Z",
12248 "updated_at": "2026-10-07T14:02:36.502Z"
12249 },
12250 {
12251 "id": "run_01kq4b6a7b8c9d0e1f2g3h4j5m",
12252 "head_sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e",
12253 "head_branch": "main",
12254 "status": "completed",
12255 "conclusion": "success",
12256 "app": {
12257 "slug": "actions",
12258 "name": "g1t Actions"
12259 },
12260 "name": "CI",
12261 "latest_check_runs_count": 1,
12262 "created_at": "2026-10-07T14:01:00.512Z",
12263 "updated_at": "2026-10-07T14:01:28.040Z"
12264 }
12265 ]
12266 }
12267 },
12268 "get_check_suite": {
12269 "params": {
12270 "owner": "flagon-io",
12271 "name": "hello",
12272 "id": "cs_01kq4b7c8d9e0f1g2h3j4k5m6p"
12273 },
12274 "response": {
12275 "id": "cs_01kq4b7c8d9e0f1g2h3j4k5m6p",
12276 "head_sha": "9f3c2a1b7e6d5c4b3a2918f7e6d5c4b3a2918f7e",
12277 "head_branch": "main",
12278 "status": "completed",
12279 "conclusion": "failure",
12280 "app": {
12281 "slug": "buildkite",
12282 "name": "Buildkite"
12283 },
12284 "latest_check_runs_count": 1,
12285 "created_at": "2026-10-07T14:02:11.318Z",
12286 "updated_at": "2026-10-07T14:02:36.502Z"
12287 }
12288 },
12289 "rerequest_check_suite": {
12290 "params": {
12291 "owner": "flagon-io",
12292 "name": "hello",
12293 "id": "cs_01kq4b7c8d9e0f1g2h3j4k5m6p"
12294 },
12295 "response": {
12296 "rerequested": true
12297 }
Actions: OIDC tokens, the toolkit's cache and artifact services, and artifacts in R212298 },
12299 "list_artifacts": {
12300 "params": {
12301 "owner": "flagon-io",
12302 "name": "g1t"
12303 },
12304 "query": {
12305 "name": "web-dist",
12306 "per_page": "1"
12307 },
12308 "response": {
12309 "total_count": 9,
12310 "artifacts": [
12311 {
12312 "id": 4182,
12313 "node_id": "artifact_4182",
12314 "name": "web-dist",
12315 "size_in_bytes": 18734120,
12316 "url": "https://api.g1t.sh/repos/flagon-io/g1t/actions/artifacts/4182",
12317 "archive_download_url": "https://api.g1t.sh/repos/flagon-io/g1t/actions/artifacts/4182/zip",
12318 "expired": false,
12319 "digest": "sha256:5f1c3a9e7b2d4f6a8c0e1b3d5f7a9c2e4b6d8f0a1c3e5b7d9f2a4c6e8b0d1f3a",
12320 "created_at": "2026-10-08T14:03:51.204Z",
12321 "updated_at": "2026-10-08T14:03:52.880Z",
12322 "expires_at": "2026-10-22T14:03:51.204Z",
12323 "workflow_run": {
12324 "id": "run_01kq9c4e6g8j0m2p4r6t8v0x2z",
12325 "repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12326 "head_repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12327 "head_branch": "main",
12328 "head_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7"
12329 }
12330 }
12331 ]
12332 },
12333 "notes": "Expired and deleted artifacts are not listed. `workflow_run.id` is the run's id, which `get_workflow_run` takes."
12334 },
12335 "list_workflow_run_artifacts": {
12336 "params": {
12337 "owner": "flagon-io",
12338 "name": "g1t",
12339 "id": "run_01kq9c4e6g8j0m2p4r6t8v0x2z"
12340 },
12341 "response": {
12342 "total_count": 2,
12343 "artifacts": [
12344 {
12345 "id": 4181,
12346 "node_id": "artifact_4181",
12347 "name": "coverage",
12348 "size_in_bytes": 412870,
12349 "url": "https://api.g1t.sh/repos/flagon-io/g1t/actions/artifacts/4181",
12350 "archive_download_url": "https://api.g1t.sh/repos/flagon-io/g1t/actions/artifacts/4181/zip",
12351 "expired": false,
12352 "digest": "sha256:5f1c3a9e7b2d4f6a8c0e1b3d5f7a9c2e4b6d8f0a1c3e5b7d9f2a4c6e8b0d1f3a",
12353 "created_at": "2026-10-08T14:03:51.204Z",
12354 "updated_at": "2026-10-08T14:03:52.880Z",
12355 "expires_at": "2026-10-22T14:03:51.204Z",
12356 "workflow_run": {
12357 "id": "run_01kq9c4e6g8j0m2p4r6t8v0x2z",
12358 "repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12359 "head_repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12360 "head_branch": "main",
12361 "head_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7"
12362 }
12363 },
12364 {
12365 "id": 4182,
12366 "node_id": "artifact_4182",
12367 "name": "web-dist",
12368 "size_in_bytes": 18734120,
12369 "url": "https://api.g1t.sh/repos/flagon-io/g1t/actions/artifacts/4182",
12370 "archive_download_url": "https://api.g1t.sh/repos/flagon-io/g1t/actions/artifacts/4182/zip",
12371 "expired": false,
12372 "digest": "sha256:5f1c3a9e7b2d4f6a8c0e1b3d5f7a9c2e4b6d8f0a1c3e5b7d9f2a4c6e8b0d1f3a",
12373 "created_at": "2026-10-08T14:03:51.204Z",
12374 "updated_at": "2026-10-08T14:03:52.880Z",
12375 "expires_at": "2026-10-22T14:03:51.204Z",
12376 "workflow_run": {
12377 "id": "run_01kq9c4e6g8j0m2p4r6t8v0x2z",
12378 "repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12379 "head_repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12380 "head_branch": "main",
12381 "head_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7"
12382 }
12383 }
12384 ]
12385 }
12386 },
12387 "get_artifact": {
12388 "params": {
12389 "owner": "flagon-io",
12390 "name": "g1t",
12391 "id": "4182"
12392 },
12393 "response": {
12394 "id": 4182,
12395 "node_id": "artifact_4182",
12396 "name": "web-dist",
12397 "size_in_bytes": 18734120,
12398 "url": "https://api.g1t.sh/repos/flagon-io/g1t/actions/artifacts/4182",
12399 "archive_download_url": "https://api.g1t.sh/repos/flagon-io/g1t/actions/artifacts/4182/zip",
12400 "expired": false,
12401 "digest": "sha256:5f1c3a9e7b2d4f6a8c0e1b3d5f7a9c2e4b6d8f0a1c3e5b7d9f2a4c6e8b0d1f3a",
12402 "created_at": "2026-10-08T14:03:51.204Z",
12403 "updated_at": "2026-10-08T14:03:52.880Z",
12404 "expires_at": "2026-10-22T14:03:51.204Z",
12405 "workflow_run": {
12406 "id": "run_01kq9c4e6g8j0m2p4r6t8v0x2z",
12407 "repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12408 "head_repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12409 "head_branch": "main",
12410 "head_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7"
12411 }
12412 }
12413 },
12414 "download_artifact": {
12415 "params": {
12416 "owner": "flagon-io",
12417 "name": "g1t",
12418 "id": "4182"
12419 },
12420 "response": {
12421 "url": "https://api.g1t.sh/actions/toolkit/blobs/eyJrIjoiYXJ0aWZhY3QiLCJpIjoiNDE4MiJ9.q3VbS1x9",
12422 "expires_at": "2026-10-08T15:13:00.000Z",
12423 "artifact": {
12424 "id": 4182,
12425 "node_id": "artifact_4182",
12426 "name": "web-dist",
12427 "size_in_bytes": 18734120,
12428 "url": "https://api.g1t.sh/repos/flagon-io/g1t/actions/artifacts/4182",
12429 "archive_download_url": "https://api.g1t.sh/repos/flagon-io/g1t/actions/artifacts/4182/zip",
12430 "expired": false,
12431 "digest": "sha256:5f1c3a9e7b2d4f6a8c0e1b3d5f7a9c2e4b6d8f0a1c3e5b7d9f2a4c6e8b0d1f3a",
12432 "created_at": "2026-10-08T14:03:51.204Z",
12433 "updated_at": "2026-10-08T14:03:52.880Z",
12434 "expires_at": "2026-10-22T14:03:51.204Z",
12435 "workflow_run": {
12436 "id": "run_01kq9c4e6g8j0m2p4r6t8v0x2z",
12437 "repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12438 "head_repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12439 "head_branch": "main",
12440 "head_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7"
12441 }
12442 }
12443 },
12444 "notes": "Over REST the answer is `302 Found` with the link in `Location`, as GitHub's is, so `curl -L -o web-dist.zip …/zip` saves the file; the body above is what the MCP `workflow` tool's `download_artifact` returns. The link needs no token and stops working after 10 minutes."
12445 },
Merge GitHub pull request #8 (claude/cool-newton-7nm8r9): Docker deployments on g1t.page behind a switch that stays off until Cloudflare's container APIs are checked live, workflows a workspace manages in its repositories, tarball and zipball downloads, refs/pull/* kept to g1t alone, framework detection for g1t.page builds, and a workflow's event payload matching GitHub's.12446 "download_tarball_archive": {
12447 "params": {
12448 "owner": "flagon-io",
12449 "name": "hello",
12450 "ref": "main"
12451 },
12452 "response": {
12453 "url": "https://g1t.sh/flagon-io/hello/archive/7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7.tar.gz?token=…",
12454 "commit": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
12455 "expires_at": "2026-10-12T15:13:00.000Z"
12456 },
12457 "notes": "Over REST the answer is `302 Found` with the link in `Location`, as GitHub's is, so `curl -L -H \"Authorization: Bearer g1t_…\" -o hello.tar.gz https://api.g1t.sh/repos/flagon-io/hello/tarball/main` saves the file and `tar -xzf hello.tar.gz` makes one folder, `flagon-io-hello-7c1e9a4/`; the body above is what the MCP `repository` tool's `tarball` returns. The link is for the commit the ref named when you asked, needs no token and stops working after 10 minutes. `actions/checkout` uses this route in a job container without git."
12458 },
12459 "download_zipball_archive": {
12460 "params": {
12461 "owner": "flagon-io",
12462 "name": "hello",
12463 "ref": "v1.2.0"
12464 },
12465 "response": {
12466 "url": "https://g1t.sh/flagon-io/hello/archive/7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7.zip?token=…",
12467 "commit": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
12468 "expires_at": "2026-10-12T15:13:00.000Z"
12469 },
12470 "notes": "Over REST the answer is `302 Found` with the link in `Location`, as GitHub's is, so `curl -L -o hello.zip …/zipball/v1.2.0` saves the file, with one folder, `flagon-io-hello-7c1e9a4/`; the body above is what the MCP `repository` tool's `zipball` returns. The link needs no token and stops working after 10 minutes."
12471 },
Actions: OIDC tokens, the toolkit's cache and artifact services, and artifacts in R212472 "delete_artifact": {
12473 "params": {
12474 "owner": "flagon-io",
12475 "name": "g1t",
12476 "id": "4181"
12477 },
12478 "response": {
12479 "deleted": true,
12480 "id": 4181,
12481 "name": "coverage"
12482 }
12483 },
12484 "get_artifact_retention": {
12485 "params": {
12486 "owner": "flagon-io",
12487 "name": "g1t"
12488 },
12489 "response": {
12490 "days": 14,
12491 "maximum_allowed_days": 90
12492 }
12493 },
12494 "set_artifact_retention": {
12495 "params": {
12496 "owner": "flagon-io",
12497 "name": "g1t"
12498 },
12499 "request": {
12500 "days": 30
12501 },
12502 "response": {
12503 "days": 30,
12504 "maximum_allowed_days": 90
12505 },
12506 "notes": "Only artifacts uploaded afterwards are kept the new number of days. A workflow's `retention-days` asks for fewer, never more."
Merge packages: roles, Actions access, source label, soft delete, API12507 },
Merge branch 'worktree-agent-a3b9b1f730f55b5bf'12508 "list_caches": {
12509 "params": {
12510 "owner": "flagon-io",
12511 "name": "g1t"
12512 },
12513 "query": {
12514 "key": "cargo-test-",
12515 "sort": "size_in_bytes",
12516 "per_page": "2"
12517 },
12518 "response": {
12519 "total_count": 3,
12520 "actions_caches": [
12521 {
12522 "id": 9184,
12523 "key": "cargo-test-Linux-rustc-1.99.0-5f1c3a9e7b2d",
12524 "ref": "refs/heads/main",
12525 "version": "",
12526 "size_in_bytes": 1687203840,
12527 "created_at": "2026-10-12T09:14:02.511Z",
12528 "last_accessed_at": "2026-10-12T15:40:19.087Z"
12529 },
12530 {
12531 "id": 9102,
12532 "key": "cargo-test-Linux-rustc-1.99.0-5f1c3a9e7b2d",
12533 "ref": "refs/pull/412/merge",
12534 "version": "",
12535 "size_in_bytes": 702545920,
12536 "created_at": "2026-10-12T11:02:44.930Z",
12537 "last_accessed_at": "2026-10-12T11:02:44.930Z"
12538 }
12539 ]
12540 },
12541 "notes": "`key` matches keys that start with it. Entries past their 28 days, or unused for 7, are swept within the hour and are not listed once they are."
12542 },
12543 "get_cache_usage": {
12544 "params": {
12545 "owner": "flagon-io",
12546 "name": "g1t"
12547 },
12548 "response": {
12549 "full_name": "flagon-io/g1t",
12550 "active_caches_size_in_bytes": 8813275136,
12551 "active_caches_count": 41,
12552 "quota_bytes": 10737418240
12553 },
12554 "notes": "Saving past `quota_bytes` evicts the entries restored longest ago."
12555 },
12556 "delete_caches_by_key": {
12557 "params": {
12558 "owner": "flagon-io",
12559 "name": "g1t"
12560 },
12561 "query": {
12562 "key": "cargo-test-Linux-rustc-1.99.0-5f1c3a9e7b2d",
12563 "ref": "refs/pull/412/merge"
12564 },
12565 "response": {
12566 "total_count": 1,
12567 "actions_caches": [
12568 {
12569 "id": 9102,
12570 "key": "cargo-test-Linux-rustc-1.99.0-5f1c3a9e7b2d",
12571 "ref": "refs/pull/412/merge",
12572 "version": "",
12573 "size_in_bytes": 702545920,
12574 "created_at": "2026-10-12T11:02:44.930Z",
12575 "last_accessed_at": "2026-10-12T11:02:44.930Z"
12576 }
12577 ]
12578 },
12579 "notes": "The key is matched exactly. Without `ref`, the key's entries on every ref are deleted."
12580 },
12581 "delete_cache": {
12582 "params": {
12583 "owner": "flagon-io",
12584 "name": "g1t",
12585 "id": "9102"
12586 },
12587 "notes": "Answers `204` with no body."
12588 },
Merge packages: roles, Actions access, source label, soft delete, API12589 "list_packages": {
12590 "params": {
12591 "workspace": "acme"
12592 },
12593 "query": {
12594 "package_type": "container"
12595 },
12596 "response": [
12597 {
12598 "id": "pkg_01kq7b3d5f7h9k1m3p5r7t9v1x",
12599 "name": "web",
12600 "package_type": "container",
12601 "workspace": "acme",
12602 "address": "g1t.sh/acme/web",
12603 "visibility": "private",
12604 "repository": {
12605 "id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12606 "name": "web",
12607 "full_name": "acme/web"
12608 },
12609 "description": null,
12610 "version_count": 12,
12611 "latest": "latest",
12612 "size_in_bytes": 48211932,
12613 "download_count": 1840,
12614 "inherit_access": true,
12615 "created_at": "2026-09-14T10:02:11.000Z",
12616 "updated_at": "2026-10-08T14:05:20.000Z",
12617 "deleted_at": null,
12618 "deleted_by": null,
12619 "purge_at": null,
12620 "html_url": "https://g1t.sh/acme/-/packages/container/web"
12621 }
12622 ],
12623 "notes": "Only packages you may pull are listed. With `state=deleted`, the workspace's deleted packages you administer that can still be restored, each with `deleted_at`, `deleted_by` and `purge_at`."
12624 },
12625 "get_package": {
12626 "params": {
12627 "workspace": "acme",
12628 "package_type": "npm",
12629 "package_name": "ui"
12630 },
12631 "response": {
12632 "id": "pkg_01kq7b4e6g8j0m2p4r6t8v0x2z",
12633 "name": "ui",
12634 "package_type": "npm",
12635 "workspace": "acme",
12636 "address": "g1t.sh/-/npm/@acme/ui",
12637 "visibility": "public",
12638 "repository": {
12639 "id": "rep_01kpw0b3d5f7h9k1m3p5r7t9v1",
12640 "name": "ui",
12641 "full_name": "acme/ui"
12642 },
12643 "description": "Acme's design system components.",
12644 "version_count": 4,
12645 "latest": "2.1.0",
12646 "size_in_bytes": 391204,
12647 "download_count": 9213,
12648 "inherit_access": true,
12649 "created_at": "2026-08-02T09:30:00.000Z",
12650 "updated_at": "2026-10-07T16:44:02.000Z",
12651 "deleted_at": null,
12652 "deleted_by": null,
12653 "purge_at": null,
12654 "html_url": "https://g1t.sh/acme/-/packages/npm/ui"
12655 },
12656 "notes": "A name with a slash is one URL-encoded path segment: `/workspaces/acme/packages/container/web%2Fworker`. Not found when you may not pull it."
12657 },
12658 "update_package": {
12659 "params": {
12660 "workspace": "acme",
12661 "package_type": "container",
12662 "package_name": "web"
12663 },
12664 "request": {
12665 "inherit_access": false
12666 },
12667 "response": {
12668 "id": "pkg_01kq7b3d5f7h9k1m3p5r7t9v1x",
12669 "name": "web",
12670 "package_type": "container",
12671 "workspace": "acme",
12672 "address": "g1t.sh/acme/web",
12673 "visibility": "private",
12674 "repository": {
12675 "id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12676 "name": "web",
12677 "full_name": "acme/web"
12678 },
12679 "description": null,
12680 "version_count": 12,
12681 "latest": "latest",
12682 "size_in_bytes": 48211932,
12683 "download_count": 1840,
12684 "inherit_access": false,
12685 "created_at": "2026-09-14T10:02:11.000Z",
12686 "updated_at": "2026-10-08T15:01:40.000Z",
12687 "deleted_at": null,
12688 "deleted_by": null,
12689 "purge_at": null,
12690 "html_url": "https://g1t.sh/acme/-/packages/container/web"
12691 },
12692 "notes": "With `inherit_access` off, the repository's roles no longer reach the package: only the roles given on it (`set_package_access`) and the workspace's owners. `visibility` is for an unlinked package; a linked one has its repository's."
12693 },
12694 "delete_package": {
12695 "params": {
12696 "workspace": "acme",
12697 "package_type": "container",
12698 "package_name": "web-old"
12699 },
12700 "response": {
12701 "deleted": true
12702 },
12703 "notes": "The package and every version are gone from the registry at once. Restore it with `restore_package` within 30 days; until then nobody can publish a package of its name."
12704 },
12705 "restore_package": {
12706 "params": {
12707 "workspace": "acme",
12708 "package_type": "container",
12709 "package_name": "web-old"
12710 },
12711 "response": {
12712 "id": "pkg_01kq7b5f7h9k1m3p5r7t9v1x3z",
12713 "name": "web-old",
12714 "package_type": "container",
12715 "workspace": "acme",
12716 "address": "g1t.sh/acme/web-old",
12717 "visibility": "private",
12718 "repository": null,
12719 "description": null,
12720 "version_count": 3,
12721 "latest": "latest",
12722 "size_in_bytes": 20112840,
12723 "download_count": 112,
12724 "inherit_access": true,
12725 "created_at": "2026-07-01T08:00:00.000Z",
12726 "updated_at": "2026-10-08T15:10:00.000Z",
12727 "deleted_at": null,
12728 "deleted_by": null,
12729 "purge_at": null,
12730 "html_url": "https://g1t.sh/acme/-/packages/container/web-old"
12731 }
12732 },
12733 "list_package_versions": {
12734 "params": {
12735 "workspace": "acme",
12736 "package_type": "container",
12737 "package_name": "web"
12738 },
12739 "response": [
12740 {
12741 "id": "ver_01kq9c5f7h9k1m3p5r7t9v1x3z",
12742 "name": "sha256:9b2e4d6f8a0c1e3b5d7f9a2c4e6b8d0f1a3c5e7b9d2f4a6c8e0b1d3f5a7c9e2b",
12743 "digest": "sha256:9b2e4d6f8a0c1e3b5d7f9a2c4e6b8d0f1a3c5e7b9d2f4a6c8e0b1d3f5a7c9e2b",
12744 "size_in_bytes": 48211932,
12745 "download_count": 611,
12746 "tags": [
12747 "latest",
12748 "v1.4.0"
12749 ],
12750 "media_type": "application/vnd.oci.image.index.v1+json",
12751 "artifact_type": null,
12752 "subject": null,
12753 "platforms": [
12754 "linux/amd64",
12755 "linux/arm64"
12756 ],
12757 "published_by": "ana",
12758 "created_at": "2026-10-08T14:05:20.000Z",
12759 "deprecated": null,
12760 "deleted_at": null,
12761 "deleted_by": null,
12762 "purge_at": null
12763 }
12764 ],
12765 "notes": "A container image's versions are its manifests, named by digest; every other package's by version. `download_count` counts pulls and downloads of the version itself, approximately. With `state=deleted`, the deleted versions that can still be restored, for the package's admins."
12766 },
12767 "get_package_version": {
12768 "params": {
12769 "workspace": "acme",
12770 "package_type": "npm",
12771 "package_name": "ui",
12772 "version_id": "2.1.0"
12773 },
12774 "response": {
12775 "id": "ver_01kq9c6g8j0m2p4r6t8v0x2z4b",
12776 "name": "2.1.0",
12777 "digest": "sha256:3c5e7b9d2f4a6c8e0b1d3f5a7c9e2b4d6f8a0c1e3b5d7f9a2c4e6b8d0f1a3c5e",
12778 "size_in_bytes": 97412,
12779 "download_count": 2204,
12780 "tags": [
12781 "latest"
12782 ],
12783 "media_type": null,
12784 "artifact_type": null,
12785 "subject": null,
12786 "platforms": [],
12787 "published_by": "bo",
12788 "created_at": "2026-10-07T16:44:02.000Z",
12789 "deprecated": null,
12790 "deleted_at": null,
12791 "deleted_by": null,
12792 "purge_at": null
12793 },
12794 "notes": "`version_id` is the version's id (`ver_…`), its version, its digest, or a tag that points to it."
12795 },
12796 "delete_package_version": {
12797 "params": {
12798 "workspace": "acme",
12799 "package_type": "npm",
12800 "package_name": "ui",
12801 "version_id": "2.0.0-beta.1"
12802 },
12803 "response": {
12804 "deleted": true
12805 },
12806 "notes": "The version and its tags are gone from the registry at once. It can be restored for 30 days, and its version cannot be published again until it is purged."
12807 },
12808 "restore_package_version": {
12809 "params": {
12810 "workspace": "acme",
12811 "package_type": "npm",
12812 "package_name": "ui",
12813 "version_id": "2.0.0-beta.1"
12814 },
12815 "response": {
12816 "id": "ver_01kq9c7h9k1m3p5r7t9v1x3z5c",
12817 "name": "2.0.0-beta.1",
12818 "digest": "sha256:7d9f2a4c6e8b0d1f3a5c7e9b2d4f6a8c0e1b3d5f7a9c2e4b6d8f0a1c3e5b7d9f",
12819 "size_in_bytes": 96880,
12820 "download_count": 41,
12821 "tags": [
12822 "beta"
12823 ],
12824 "media_type": null,
12825 "artifact_type": null,
12826 "subject": null,
12827 "platforms": [],
12828 "published_by": "bo",
12829 "created_at": "2026-09-30T11:20:00.000Z",
12830 "deprecated": null,
12831 "deleted_at": null,
12832 "deleted_by": null,
12833 "purge_at": null
12834 },
12835 "notes": "Tags that pointed to it come back with it, unless one was moved to another version meanwhile."
12836 },
12837 "link_package": {
12838 "params": {
12839 "workspace": "acme",
12840 "package_type": "container",
12841 "package_name": "tools"
12842 },
12843 "request": {
12844 "repository": "acme/infra"
12845 },
12846 "response": {
12847 "id": "pkg_01kq7b6g8j0m2p4r6t8v0x2z4b",
12848 "name": "tools",
12849 "package_type": "container",
12850 "workspace": "acme",
12851 "address": "g1t.sh/acme/tools",
12852 "visibility": "private",
12853 "repository": {
12854 "id": "rep_01kpw0c4e6g8j0m2p4r6t8v0x2",
12855 "name": "infra",
12856 "full_name": "acme/infra"
12857 },
12858 "description": null,
12859 "version_count": 2,
12860 "latest": "latest",
12861 "size_in_bytes": 7340032,
12862 "download_count": 88,
12863 "inherit_access": true,
12864 "created_at": "2026-09-20T12:00:00.000Z",
12865 "updated_at": "2026-10-08T15:20:00.000Z",
12866 "deleted_at": null,
12867 "deleted_by": null,
12868 "purge_at": null,
12869 "html_url": "https://g1t.sh/acme/-/packages/container/tools"
12870 },
12871 "notes": "The package takes the repository's visibility. You need the Admin role on the package and on the repository."
12872 },
12873 "unlink_package": {
12874 "params": {
12875 "workspace": "acme",
12876 "package_type": "container",
12877 "package_name": "tools"
12878 },
12879 "response": {
12880 "id": "pkg_01kq7b6g8j0m2p4r6t8v0x2z4b",
12881 "name": "tools",
12882 "package_type": "container",
12883 "workspace": "acme",
12884 "address": "g1t.sh/acme/tools",
12885 "visibility": "private",
12886 "repository": null,
12887 "description": null,
12888 "version_count": 2,
12889 "latest": "latest",
12890 "size_in_bytes": 7340032,
12891 "download_count": 88,
12892 "inherit_access": true,
12893 "created_at": "2026-09-20T12:00:00.000Z",
12894 "updated_at": "2026-10-08T15:22:00.000Z",
12895 "deleted_at": null,
12896 "deleted_by": null,
12897 "purge_at": null,
12898 "html_url": "https://g1t.sh/acme/-/packages/container/tools"
12899 }
12900 },
12901 "list_package_access": {
12902 "params": {
12903 "workspace": "acme",
12904 "package_type": "container",
12905 "package_name": "web"
12906 },
12907 "response": {
12908 "inherit_access": true,
12909 "access": [
12910 {
12911 "type": "team",
12912 "id": "team_01kq1a3c5e7g9j1l3n5q7s9u1w",
12913 "name": "acme/platform",
12914 "role": "admin",
12915 "created_at": "2026-10-01T09:00:00.000Z"
12916 },
12917 {
12918 "type": "user",
12919 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
12920 "name": "dana",
12921 "role": "read",
12922 "created_at": "2026-10-02T13:30:00.000Z"
12923 }
12924 ]
12925 },
12926 "notes": "Only the roles given on the package itself. With `inherit_access` on, a linked package's repository roles count too, and the workspace's owners administer every package."
12927 },
12928 "set_package_access": {
12929 "params": {
12930 "workspace": "acme",
12931 "package_type": "container",
12932 "package_name": "web"
12933 },
12934 "request": {
12935 "username": "dana",
12936 "role": "write"
12937 },
12938 "response": [
12939 {
12940 "type": "team",
12941 "id": "team_01kq1a3c5e7g9j1l3n5q7s9u1w",
12942 "name": "acme/platform",
12943 "role": "admin",
12944 "created_at": "2026-10-01T09:00:00.000Z"
12945 },
12946 {
12947 "type": "user",
12948 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
12949 "name": "dana",
12950 "role": "write",
12951 "created_at": "2026-10-02T13:30:00.000Z"
12952 }
12953 ],
12954 "notes": "Give `username` or `team` (a team of the workspace, by slug). The role adds to what the repository or workspace already gives."
12955 },
12956 "remove_package_access": {
12957 "params": {
12958 "workspace": "acme",
12959 "package_type": "container",
12960 "package_name": "web"
12961 },
12962 "query": {
12963 "username": "dana"
12964 },
12965 "response": [
12966 {
12967 "type": "team",
12968 "id": "team_01kq1a3c5e7g9j1l3n5q7s9u1w",
12969 "name": "acme/platform",
12970 "role": "admin",
12971 "created_at": "2026-10-01T09:00:00.000Z"
12972 }
12973 ],
12974 "notes": "Over REST, name who in the query: `?username=dana` or `?team=platform`."
12975 },
12976 "list_package_actions_access": {
12977 "params": {
12978 "workspace": "acme",
12979 "package_type": "container",
12980 "package_name": "web"
12981 },
12982 "response": {
12983 "repositories": [
12984 {
12985 "repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
12986 "repository": "acme/web",
12987 "role": "write",
12988 "linked": true,
12989 "created_at": null
12990 },
12991 {
12992 "repository_id": "rep_01kpw0d5f7h9k1m3p5r7t9v1x3",
12993 "repository": "acme/deploy",
12994 "role": "read",
12995 "linked": false,
12996 "created_at": "2026-10-03T10:00:00.000Z"
12997 }
12998 ]
12999 },
13000 "notes": "A workflow job's `G1T_TOKEN` reaches the package only from these repositories. The linked repository is always listed, with write."
13001 },
13002 "set_package_actions_access": {
13003 "params": {
13004 "workspace": "acme",
13005 "package_type": "container",
13006 "package_name": "web"
13007 },
13008 "request": {
13009 "repository": "deploy",
13010 "role": "read"
13011 },
13012 "response": {
13013 "repositories": [
13014 {
13015 "repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
13016 "repository": "acme/web",
13017 "role": "write",
13018 "linked": true,
13019 "created_at": null
13020 },
13021 {
13022 "repository_id": "rep_01kpw0d5f7h9k1m3p5r7t9v1x3",
13023 "repository": "acme/deploy",
13024 "role": "read",
13025 "linked": false,
13026 "created_at": "2026-10-03T10:00:00.000Z"
13027 }
13028 ]
13029 }
13030 },
13031 "remove_package_actions_access": {
13032 "params": {
13033 "workspace": "acme",
13034 "package_type": "container",
13035 "package_name": "web",
13036 "repository": "deploy"
13037 },
13038 "response": {
13039 "repositories": [
13040 {
13041 "repository_id": "rep_01kpw0a2c4e6g8j0m2p4r6t8v0",
13042 "repository": "acme/web",
13043 "role": "write",
13044 "linked": true,
13045 "created_at": null
Merge branch 'mirroring' into artifacts-mode13046 }
13047 ]
13048 }
Merge main into Artifacts Phase 213049 },
13050 "list_workspace_artifacts": {
13051 "params": {
13052 "workspace": "acme"
13053 },
13054 "query": {
13055 "kind": "doc",
13056 "space": "general"
13057 },
13058 "response": {
13059 "items": [
13060 {
13061 "id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13062 "kind": "doc",
13063 "title": "Q4 roadmap",
13064 "icon": "🗺️",
13065 "slug": "q4-roadmap-fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13066 "space": {
13067 "id": "spc_01kq1a3c5e7g9j1l3n5q7s9u1w",
13068 "slug": "general",
13069 "name": "General",
13070 "kind": "workspace"
13071 },
13072 "parent_id": null,
13073 "has_children": false,
13074 "owner": {
13075 "type": "user",
13076 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13077 "username": "ana",
13078 "display_name": "Ana Lima"
13079 },
13080 "created_by": {
13081 "type": "user",
13082 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13083 "username": "ana",
13084 "display_name": "Ana Lima"
13085 },
13086 "created_at": "2026-10-06T09:12:00.000Z",
13087 "updated_at": "2026-10-08T16:40:12.000Z",
13088 "edited_by": {
13089 "type": "user",
13090 "id": "usr_01kmb2d4f6h8k0m2p4r6t8v0x2",
13091 "username": "bo",
13092 "display_name": "Bo Chen"
13093 },
13094 "edited_at": "2026-10-08T16:40:12.000Z",
13095 "trashed_at": null,
13096 "viewer_role": "manage",
13097 "private": false,
13098 "shared_count": 1,
13099 "general_access": "workspace",
13100 "general_role": "view",
13101 "inherit": true,
13102 "agent_mode": "suggest",
13103 "excerpt": "What we ship this quarter, and what we leave for next.",
13104 "source": null,
13105 "stale": false,
13106 "html_url": "https://g1t.sh/acme/-/artifacts/q4-roadmap-fol_01kq7c4e6g8j0m2p4r6t8v0x2z"
13107 }
13108 ],
13109 "next_cursor": null
13110 },
13111 "notes": "Only artifacts you can open are listed, with `viewer_role` your own role on each. Page on with `cursor` set to `next_cursor` until it is null. With `state=trashed`, what you can restore from the trash. With `q`, the best matches first. These are Artifacts mode's docs, slides, designs and dashboards, not workflow runs' artifacts (`list_artifacts`)."
13112 },
13113 "search_workspace_artifacts": {
13114 "params": {
13115 "workspace": "acme"
13116 },
13117 "query": {
13118 "q": "what ships in Q4"
13119 },
13120 "response": [
13121 {
13122 "id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13123 "kind": "doc",
13124 "title": "Q4 roadmap",
13125 "icon": "🗺️",
13126 "slug": "q4-roadmap-fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13127 "html_url": "https://g1t.sh/acme/-/artifacts/q4-roadmap-fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13128 "space_name": "General",
13129 "snippet": "We ship the merge queue and Artifacts in Q4; dashboards follow.",
13130 "heading": "This quarter",
13131 "matched": "both",
13132 "edited_at": "2026-10-08T16:40:12.000Z"
13133 }
13134 ],
13135 "notes": "Matches words and meaning, and is checked again against who can read each artifact now: one shared with you a minute ago is found, one taken away is not."
13136 },
13137 "get_workspace_artifact": {
13138 "params": {
13139 "workspace": "acme",
13140 "artifact_id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z"
13141 },
13142 "response": {
13143 "id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13144 "kind": "doc",
13145 "title": "Q4 roadmap",
13146 "icon": "🗺️",
13147 "slug": "q4-roadmap-fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13148 "space": {
13149 "id": "spc_01kq1a3c5e7g9j1l3n5q7s9u1w",
13150 "slug": "general",
13151 "name": "General",
13152 "kind": "workspace"
13153 },
13154 "parent_id": null,
13155 "has_children": false,
13156 "owner": {
13157 "type": "user",
13158 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13159 "username": "ana",
13160 "display_name": "Ana Lima"
13161 },
13162 "created_by": {
13163 "type": "user",
13164 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13165 "username": "ana",
13166 "display_name": "Ana Lima"
13167 },
13168 "created_at": "2026-10-06T09:12:00.000Z",
13169 "updated_at": "2026-10-08T16:40:12.000Z",
13170 "edited_by": {
13171 "type": "user",
13172 "id": "usr_01kmb2d4f6h8k0m2p4r6t8v0x2",
13173 "username": "bo",
13174 "display_name": "Bo Chen"
13175 },
13176 "edited_at": "2026-10-08T16:40:12.000Z",
13177 "trashed_at": null,
13178 "viewer_role": "manage",
13179 "private": false,
13180 "shared_count": 1,
13181 "general_access": "workspace",
13182 "general_role": "view",
13183 "inherit": true,
13184 "agent_mode": "suggest",
13185 "excerpt": "What we ship this quarter, and what we leave for next.",
13186 "source": null,
13187 "stale": false,
13188 "html_url": "https://g1t.sh/acme/-/artifacts/q4-roadmap-fol_01kq7c4e6g8j0m2p4r6t8v0x2z"
13189 },
13190 "notes": "`artifact_id` is the id, or the artifact's address (`q4-roadmap-fol_…`, or its whole link). Not found when you cannot open it, the same as when it does not exist."
13191 },
13192 "get_workspace_artifact_content": {
13193 "params": {
13194 "workspace": "acme",
13195 "artifact_id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z"
13196 },
13197 "response": {
13198 "artifact": {
13199 "id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13200 "kind": "doc",
13201 "title": "Q4 roadmap",
13202 "icon": "🗺️",
13203 "slug": "q4-roadmap-fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13204 "html_url": "https://g1t.sh/acme/-/artifacts/q4-roadmap-fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13205 "edited_at": "2026-10-08T16:40:12.000Z"
13206 },
13207 "space": {
13208 "id": "spc_01kq1a3c5e7g9j1l3n5q7s9u1w",
13209 "slug": "general",
13210 "name": "General",
13211 "agent_mode": "suggest"
13212 },
13213 "content": "# Q4 roadmap\n\n## This quarter\n\nWe ship the merge queue and Artifacts.\n",
13214 "blocks": [
13215 {
13216 "id": "b_4f1c",
13217 "type": "heading",
13218 "level": 1,
13219 "markdown": "# Q4 roadmap"
13220 },
13221 {
13222 "id": "b_9a02",
13223 "type": "heading",
13224 "level": 2,
13225 "markdown": "## This quarter"
13226 },
13227 {
13228 "id": "b_77d3",
13229 "type": "paragraph",
13230 "level": null,
13231 "markdown": "We ship the merge queue and Artifacts."
13232 }
13233 ],
13234 "can": {
13235 "read": true,
13236 "suggest": true,
13237 "edit": true
13238 }
13239 },
13240 "notes": "A doc's content is Markdown. `blocks` are its top-level blocks, whose ids an edit with a `blocks` target names. Slides, designs and dashboards answer `422` saying they are not here yet."
13241 },
13242 "list_workspace_artifact_versions": {
13243 "params": {
13244 "workspace": "acme",
13245 "artifact_id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z"
13246 },
13247 "response": [
13248 {
13249 "id": "ver_01kq9e6g8j0m2p4r6t8v0x2z4b",
13250 "artifact_id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13251 "created_at": "2026-10-08T16:40:12.000Z",
13252 "kind": "edit",
13253 "note": null,
13254 "authors": [
13255 {
13256 "type": "user",
13257 "id": "usr_01kmb2d4f6h8k0m2p4r6t8v0x2",
13258 "username": "bo",
13259 "display_name": "Bo Chen"
13260 }
13261 ]
13262 },
13263 {
13264 "id": "ver_01kq7c4e6g8j0m2p4r6t8v0x2y",
13265 "artifact_id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13266 "created_at": "2026-10-06T09:12:00.000Z",
13267 "kind": "created",
13268 "note": null,
13269 "authors": [
13270 {
13271 "type": "user",
13272 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13273 "username": "ana",
13274 "display_name": "Ana Lima"
13275 }
13276 ]
13277 }
13278 ]
13279 },
13280 "get_workspace_artifact_access": {
13281 "params": {
13282 "workspace": "acme",
13283 "artifact_id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z"
13284 },
13285 "response": {
13286 "artifact_id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13287 "owner": {
13288 "type": "user",
13289 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13290 "username": "ana",
13291 "display_name": "Ana Lima"
13292 },
13293 "shared_with": [
13294 {
13295 "principal": "user:usr_01kmb2d4f6h8k0m2p4r6t8v0x2",
13296 "member": {
13297 "type": "user",
13298 "id": "usr_01kmb2d4f6h8k0m2p4r6t8v0x2",
13299 "username": "bo",
13300 "display_name": "Bo Chen"
13301 },
13302 "role": "edit",
13303 "inherited_from": null
13304 },
13305 {
13306 "principal": "team:design",
13307 "member": {
13308 "type": "team",
13309 "slug": "design",
13310 "display_name": "@acme/design"
13311 },
13312 "role": "comment",
13313 "inherited_from": null
13314 }
13315 ],
13316 "general_access": "workspace",
13317 "general_role": "view",
13318 "inherit": true,
13319 "inherited_from": {
13320 "type": "space",
13321 "id": "spc_01kq1a3c5e7g9j1l3n5q7s9u1w",
13322 "name": "General"
13323 },
13324 "agent_mode": null,
13325 "can_share": true
13326 },
13327 "notes": "Its owner always has full access and is not in `shared_with`. `inherited_from` on a row is the doc above it that gives that access; on the whole list, the space or doc it follows while `inherit` is true."
13328 },
13329 "list_workspace_artifact_templates": {
13330 "params": {
13331 "workspace": "acme"
13332 },
13333 "query": {
13334 "kind": "doc"
13335 },
13336 "response": [
13337 {
13338 "id": "builtin:doc:meeting-notes",
13339 "kind": "doc",
13340 "name": "Meeting notes",
13341 "description": "Who came, what was decided, and what happens next.",
13342 "icon": "📝",
13343 "builtin": true,
13344 "body": "# Meeting notes\n\n## Attendees\n\n## Decisions\n\n## Next steps\n"
13345 }
13346 ]
13347 },
13348 "list_workspace_artifact_spaces": {
13349 "params": {
13350 "workspace": "acme"
13351 },
13352 "response": [
13353 {
13354 "id": "spc_01kq1a3c5e7g9j1l3n5q7s9u1w",
13355 "slug": "general",
13356 "name": "General",
13357 "description": null,
13358 "icon": null,
13359 "kind": "workspace",
13360 "is_default": true,
13361 "joined": true,
13362 "viewer_role": "edit",
13363 "artifact_count": 14
13364 },
13365 {
13366 "id": "spc_01kq2b4d6f8h0k2m4p6r8t0v2x",
13367 "slug": "design",
13368 "name": "Design",
13369 "description": "The design team's specs.",
13370 "icon": "🎨",
13371 "kind": "team",
13372 "is_default": false,
13373 "joined": true,
13374 "viewer_role": "view",
13375 "artifact_count": 6
13376 }
13377 ],
13378 "notes": "Open spaces show once you join them in Artifacts; General always shows. Give a space's `slug` or `id` as `space` to the other artifact calls."
13379 },
13380 "query_workspace_dataset": {
13381 "params": {
13382 "workspace": "acme"
13383 },
13384 "request": {
13385 "query": {
13386 "dataset": "pull_requests",
13387 "measure": {
13388 "op": "count"
13389 },
13390 "group_by": "repo",
13391 "range": {
13392 "from": "2026-09-01",
13393 "to": "2026-09-30"
13394 }
13395 }
13396 },
13397 "response": {
13398 "columns": [
13399 {
13400 "name": "repo",
13401 "type": "string"
13402 },
13403 {
13404 "name": "count",
13405 "type": "number"
13406 }
13407 ],
13408 "rows": [
13409 [
13410 "acme/web",
13411 42
13412 ],
13413 [
13414 "acme/api",
13415 7
13416 ]
13417 ],
13418 "truncated": false,
13419 "partial": false,
13420 "as_of": "2026-10-09T12:00:00.000Z"
13421 },
13422 "notes": "Runs as you, over what you can read: `partial` is true when some of it was left out because you cannot read it. Until dashboards ship this answers `422` saying they are not here yet."
13423 },
13424 "create_workspace_artifact": {
13425 "params": {
13426 "workspace": "acme"
13427 },
13428 "request": {
13429 "kind": "doc",
13430 "title": "Release notes",
13431 "markdown": "# Release notes\n\nWhat changed in 2.4.\n"
13432 },
13433 "response": {
13434 "id": "fol_01kq8d5f7h9k1n3q5s7u9w1y3a",
13435 "kind": "doc",
13436 "title": "Release notes",
13437 "icon": null,
13438 "slug": "release-notes-fol_01kq8d5f7h9k1n3q5s7u9w1y3a",
13439 "space": null,
13440 "parent_id": null,
13441 "has_children": false,
13442 "owner": {
13443 "type": "user",
13444 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13445 "username": "ana",
13446 "display_name": "Ana Lima"
13447 },
13448 "created_by": {
13449 "type": "user",
13450 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13451 "username": "ana",
13452 "display_name": "Ana Lima"
13453 },
13454 "created_at": "2026-10-09T10:00:00.000Z",
13455 "updated_at": "2026-10-09T10:00:00.000Z",
13456 "edited_by": null,
13457 "edited_at": "2026-10-09T10:00:00.000Z",
13458 "trashed_at": null,
13459 "viewer_role": "manage",
13460 "private": true,
13461 "shared_count": 0,
13462 "general_access": "none",
13463 "general_role": null,
13464 "inherit": true,
13465 "agent_mode": null,
13466 "excerpt": "What changed in 2.4.",
13467 "source": null,
13468 "stale": false,
13469 "html_url": "https://g1t.sh/acme/-/artifacts/release-notes-fol_01kq8d5f7h9k1n3q5s7u9w1y3a"
13470 },
13471 "notes": "Left out `space` and `parent_id`, it lands in your Private, where only you can open it until you share it. `kind` is `doc` until slides, designs and dashboards ship; they answer `422` saying they are not here yet."
13472 },
13473 "update_workspace_artifact": {
13474 "params": {
13475 "workspace": "acme",
13476 "artifact_id": "fol_01kq8d5f7h9k1n3q5s7u9w1y3a"
13477 },
13478 "request": {
13479 "title": "Release notes 2.4",
13480 "space": "general"
13481 },
13482 "response": {
13483 "id": "fol_01kq8d5f7h9k1n3q5s7u9w1y3a",
13484 "kind": "doc",
13485 "title": "Release notes 2.4",
13486 "icon": null,
13487 "slug": "release-notes-2-4-fol_01kq8d5f7h9k1n3q5s7u9w1y3a",
13488 "space": {
13489 "id": "spc_01kq1a3c5e7g9j1l3n5q7s9u1w",
13490 "slug": "general",
13491 "name": "General",
13492 "kind": "workspace"
13493 },
13494 "parent_id": null,
13495 "has_children": false,
13496 "owner": {
13497 "type": "user",
13498 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13499 "username": "ana",
13500 "display_name": "Ana Lima"
13501 },
13502 "created_by": {
13503 "type": "user",
13504 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13505 "username": "ana",
13506 "display_name": "Ana Lima"
13507 },
13508 "created_at": "2026-10-09T10:00:00.000Z",
13509 "updated_at": "2026-10-09T10:00:00.000Z",
13510 "edited_by": null,
13511 "edited_at": "2026-10-09T10:00:00.000Z",
13512 "trashed_at": null,
13513 "viewer_role": "manage",
13514 "private": false,
13515 "shared_count": 0,
13516 "general_access": "none",
13517 "general_role": null,
13518 "inherit": true,
13519 "agent_mode": null,
13520 "excerpt": "What changed in 2.4.",
13521 "source": null,
13522 "stale": false,
13523 "html_url": "https://g1t.sh/acme/-/artifacts/release-notes-2-4-fol_01kq8d5f7h9k1n3q5s7u9w1y3a"
13524 },
13525 "notes": "Moving it into a space it follows (`inherit`) gives the space's members its access. `space` set to `private` moves it to the top of your Private, which only its owner can do."
13526 },
13527 "edit_workspace_artifact": {
13528 "params": {
13529 "workspace": "acme",
13530 "artifact_id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z"
13531 },
13532 "request": {
13533 "target": {
13534 "kind": "section",
13535 "heading": "This quarter"
13536 },
13537 "markdown": "## This quarter\n\nWe ship the merge queue, Artifacts and the API for both.\n",
13538 "note": "Adds the API"
13539 },
13540 "response": {
13541 "mode": "applied",
13542 "artifact": {
13543 "id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13544 "kind": "doc",
13545 "title": "Q4 roadmap",
13546 "icon": "🗺️",
13547 "slug": "q4-roadmap-fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13548 "html_url": "https://g1t.sh/acme/-/artifacts/q4-roadmap-fol_01kq7c4e6g8j0m2p4r6t8v0x2z"
13549 },
13550 "version_id": "ver_01kqa7h9k1n3q5s7u9w1y3a5c",
13551 "summary": "Replaced the section This quarter."
13552 },
13553 "notes": "With only the comment role, or with `suggest_only`, the change is filed as a suggestion instead: `mode` is `suggested`, with the `suggestion` its editors accept or reject. A target that is not there any more answers `404`: read the content again."
13554 },
13555 "trash_workspace_artifact": {
13556 "params": {
13557 "workspace": "acme",
13558 "artifact_id": "fol_01kq8d5f7h9k1n3q5s7u9w1y3a"
13559 },
13560 "response": {
13561 "id": "fol_01kq8d5f7h9k1n3q5s7u9w1y3a",
13562 "kind": "doc",
13563 "title": "Release notes",
13564 "icon": null,
13565 "slug": "release-notes-fol_01kq8d5f7h9k1n3q5s7u9w1y3a",
13566 "space": null,
13567 "parent_id": null,
13568 "has_children": false,
13569 "owner": {
13570 "type": "user",
13571 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13572 "username": "ana",
13573 "display_name": "Ana Lima"
13574 },
13575 "created_by": {
13576 "type": "user",
13577 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13578 "username": "ana",
13579 "display_name": "Ana Lima"
13580 },
13581 "created_at": "2026-10-09T10:00:00.000Z",
13582 "updated_at": "2026-10-09T10:00:00.000Z",
13583 "edited_by": null,
13584 "edited_at": "2026-10-09T10:00:00.000Z",
13585 "trashed_at": "2026-10-09T11:30:00.000Z",
13586 "viewer_role": "manage",
13587 "private": true,
13588 "shared_count": 0,
13589 "general_access": "none",
13590 "general_role": null,
13591 "inherit": true,
13592 "agent_mode": null,
13593 "excerpt": "What changed in 2.4.",
13594 "source": null,
13595 "stale": false,
13596 "html_url": "https://g1t.sh/acme/-/artifacts/release-notes-fol_01kq8d5f7h9k1n3q5s7u9w1y3a"
13597 },
13598 "notes": "Everything under it goes to the trash with it. It is deleted for good 30 days later, or with `purge_workspace_artifact`."
13599 },
13600 "restore_workspace_artifact": {
13601 "params": {
13602 "workspace": "acme",
13603 "artifact_id": "fol_01kq8d5f7h9k1n3q5s7u9w1y3a"
13604 },
13605 "response": {
13606 "id": "fol_01kq8d5f7h9k1n3q5s7u9w1y3a",
13607 "kind": "doc",
13608 "title": "Release notes",
13609 "icon": null,
13610 "slug": "release-notes-fol_01kq8d5f7h9k1n3q5s7u9w1y3a",
13611 "space": null,
13612 "parent_id": null,
13613 "has_children": false,
13614 "owner": {
13615 "type": "user",
13616 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13617 "username": "ana",
13618 "display_name": "Ana Lima"
13619 },
13620 "created_by": {
13621 "type": "user",
13622 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13623 "username": "ana",
13624 "display_name": "Ana Lima"
13625 },
13626 "created_at": "2026-10-09T10:00:00.000Z",
13627 "updated_at": "2026-10-09T10:00:00.000Z",
13628 "edited_by": null,
13629 "edited_at": "2026-10-09T10:00:00.000Z",
13630 "trashed_at": null,
13631 "viewer_role": "manage",
13632 "private": true,
13633 "shared_count": 0,
13634 "general_access": "none",
13635 "general_role": null,
13636 "inherit": true,
13637 "agent_mode": null,
13638 "excerpt": "What changed in 2.4.",
13639 "source": null,
13640 "stale": false,
13641 "html_url": "https://g1t.sh/acme/-/artifacts/release-notes-fol_01kq8d5f7h9k1n3q5s7u9w1y3a"
13642 }
13643 },
13644 "restore_workspace_artifact_version": {
13645 "params": {
13646 "workspace": "acme",
13647 "artifact_id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13648 "version_id": "ver_01kq7c4e6g8j0m2p4r6t8v0x2y"
13649 },
13650 "response": {
13651 "id": "ver_01kqb8j0m2p4r6t8v0x2z4b6d",
13652 "artifact_id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13653 "created_at": "2026-10-09T12:00:00.000Z",
13654 "kind": "restore",
13655 "note": null,
13656 "authors": [
13657 {
13658 "type": "user",
13659 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13660 "username": "ana",
13661 "display_name": "Ana Lima"
13662 }
13663 ]
13664 }
13665 },
13666 "set_workspace_artifact_access": {
13667 "params": {
13668 "workspace": "acme",
13669 "artifact_id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z"
13670 },
13671 "request": {
13672 "username": "bo",
13673 "role": "edit",
13674 "notify": "Can you fill in the dates?"
13675 },
13676 "response": {
13677 "artifact_id": "fol_01kq7c4e6g8j0m2p4r6t8v0x2z",
13678 "owner": {
13679 "type": "user",
13680 "id": "usr_01kkntcg1eeb98j62xjm7eh09q",
13681 "username": "ana",
13682 "display_name": "Ana Lima"
13683 },
13684 "shared_with": [
13685 {
13686 "principal": "user:usr_01kmb2d4f6h8k0m2p4r6t8v0x2",
13687 "member": {
13688 "type": "user",
13689 "id": "usr_01kmb2d4f6h8k0m2p4r6t8v0x2",
13690 "username": "bo",
13691 "display_name": "Bo Chen"
13692 },
13693 "role": "edit",
13694 "inherited_from": null
13695 },
13696 {
13697 "principal": "team:design",
13698 "member": {
13699 "type": "team",
13700 "slug": "design",
13701 "display_name": "@acme/design"
13702 },
13703 "role": "comment",
13704 "inherited_from": null
13705 }
13706 ],
13707 "general_access": "workspace",
13708 "general_role": "view",
13709 "inherit": true,
13710 "inherited_from": {
13711 "type": "space",
13712 "id": "spc_01kq1a3c5e7g9j1l3n5q7s9u1w",
13713 "name": "General"
13714 },
13715 "agent_mode": null,
13716 "can_share": true
13717 },
13718 "notes": "One call can share with one person, team or agent, and change `general_access`, `inherit` and `agent_mode`, in that order. `role` set to `none` takes someone's access away. General access never gives full access. On an artifact that follows the doc it is under, change general access on that doc, or set `inherit` to false first."
13719 },
13720 "purge_workspace_artifact": {
13721 "params": {
13722 "workspace": "acme",
13723 "artifact_id": "fol_01kq8d5f7h9k1n3q5s7u9w1y3a"
13724 },
13725 "response": {
13726 "deleted": true
13727 },
13728 "notes": "Only an artifact in the trash can be deleted for good: `trash_workspace_artifact` first."
Projects have Observability: their requests, logs, traces, metrics and errors, from apps on g1t.page with nothing to set up, and from software anywhere else over OpenTelemetry.13729 },
13730 "get_observability_overview": {
13731 "params": {
13732 "workspace": "flagon-io",
13733 "project": "g1t"
13734 },
13735 "query": {
13736 "from": "2026-10-12T13:00:00Z",
13737 "to": "2026-10-12T14:00:00Z",
13738 "environment": "production"
13739 },
13740 "response": {
13741 "from_us": 1791810000000000,
13742 "to_us": 1791813600000000,
13743 "step_s": 60,
13744 "totals": {
13745 "requests": 18204,
13746 "errors": 41,
13747 "error_rate": 0.0023,
13748 "latency": {
13749 "p50": 38.2,
13750 "p75": 71.5,
13751 "p95": 212.0,
13752 "p99": 640.0
13753 },
13754 "cpu": {
13755 "p50": 4.1,
13756 "p75": 6.8,
13757 "p95": 14.2,
13758 "p99": 29.5
13759 }
13760 },
13761 "previous": {
13762 "requests": 17650,
13763 "errors": 3,
13764 "error_rate": 0.0002,
13765 "latency": {
13766 "p50": 35.9,
13767 "p75": 66.0,
13768 "p95": 188.0,
13769 "p99": 402.0
13770 },
13771 "cpu": {
13772 "p50": 3.9,
13773 "p75": 6.5,
13774 "p95": 13.0,
13775 "p99": 22.1
13776 }
13777 },
13778 "points": [
13779 {
13780 "time_us": 1791810000000000,
13781 "requests": 302,
13782 "errors": 0,
13783 "status_2xx": 288,
13784 "status_3xx": 9,
13785 "status_4xx": 5,
13786 "status_5xx": 0,
13787 "latency": {
13788 "p50": 36.0,
13789 "p75": 68.0,
13790 "p95": 190.0,
13791 "p99": 410.0
13792 },
13793 "cpu": {
13794 "p50": 4.0,
13795 "p75": 6.6,
13796 "p95": 13.1,
13797 "p99": 22.0
13798 }
13799 }
13800 ],
13801 "routes": [
13802 {
13803 "route": "/:workspace/:repo/pulls/:number",
13804 "method": "GET",
13805 "requests": 2210,
13806 "errors": 37,
13807 "latency": {
13808 "p50": 61.0,
13809 "p75": 120.0,
13810 "p95": 480.0,
13811 "p99": 842.0
13812 }
13813 }
13814 ],
13815 "deployments": [
13816 {
13817 "deployment_id": "dpl_01kq9a2c4e6g8j0m2p4r6t8v0x",
13818 "environment": "production",
13819 "commit_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
13820 "first_us": 1791813041000000,
13821 "requests": 2904,
13822 "errors": 39,
13823 "latency": {
13824 "p50": 40.1,
13825 "p75": 77.0,
13826 "p95": 260.0,
13827 "p99": 720.0
13828 }
13829 }
13830 ],
13831 "services": [
13832 {
13833 "service": "g1t-web",
13834 "source": "cloudflare",
13835 "requests": 18204,
13836 "errors": 41,
13837 "last_us": 1791813599000000
13838 }
13839 ],
13840 "regions": [
13841 {
13842 "region": "IAD",
13843 "requests": 9120
13844 },
13845 {
13846 "region": "AMS",
13847 "requests": 4410
13848 }
13849 ]
13850 },
13851 "notes": "`totals` is the period and `previous` the period of the same length before it, to compare. Latency and CPU are in milliseconds. `deployments` lists each deployment that answered in the period, newest first: when the error rate or latency rose, the deployment it began with is usually the first one with the higher numbers. Points are one per `step_s` seconds, chosen from the period unless `step` says. See [Observability](/guides/observability/)."
13852 },
13853 "list_requests": {
13854 "params": {
13855 "workspace": "flagon-io",
13856 "project": "g1t"
13857 },
13858 "query": {
13859 "errors_only": "true",
13860 "limit": "1"
13861 },
13862 "response": {
13863 "items": [
13864 {
13865 "id": "req_01kq9b7d9f1h3k5m7p9r1t3v5x",
13866 "time_us": 1791813807418000,
13867 "duration_us": 842000,
13868 "trigger": "fetch",
13869 "method": "GET",
13870 "url": "g1t.sh/flagon-io/g1t/pulls/412",
13871 "route": "/:workspace/:repo/pulls/:number",
13872 "status": 500,
13873 "outcome": "exception",
13874 "cpu_ms": 31.4,
13875 "region": "IAD",
13876 "country": "US",
13877 "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
13878 "log_count": 2,
13879 "error": {
13880 "name": "TypeError",
13881 "message": "Cannot read properties of undefined (reading 'head')"
13882 },
13883 "service": "g1t-web",
13884 "environment": "production",
13885 "deployment_id": "dpl_01kq9a2c4e6g8j0m2p4r6t8v0x",
13886 "commit_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
13887 "source": "cloudflare"
13888 }
13889 ],
13890 "next": "eyJ0IjoxNzkxODEzODA3NDE4MDAwfQ"
13891 },
13892 "notes": "Apps on g1t.page send their requests with nothing to set up; software hosted elsewhere sends them as OpenTelemetry server spans. `route` is the path with ids taken out, which the overview groups by. Pass `next` back as `cursor` for the next page; it is null on the last."
13893 },
13894 "get_request": {
13895 "params": {
13896 "workspace": "flagon-io",
13897 "project": "g1t",
13898 "id": "req_01kq9b7d9f1h3k5m7p9r1t3v5x"
13899 },
13900 "response": {
13901 "request": {
13902 "id": "req_01kq9b7d9f1h3k5m7p9r1t3v5x",
13903 "time_us": 1791813807418000,
13904 "duration_us": 842000,
13905 "trigger": "fetch",
13906 "method": "GET",
13907 "url": "g1t.sh/flagon-io/g1t/pulls/412",
13908 "route": "/:workspace/:repo/pulls/:number",
13909 "status": 500,
13910 "outcome": "exception",
13911 "cpu_ms": 31.4,
13912 "region": "IAD",
13913 "country": "US",
13914 "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
13915 "log_count": 2,
13916 "error": {
13917 "name": "TypeError",
13918 "message": "Cannot read properties of undefined (reading 'head')"
13919 },
13920 "service": "g1t-web",
13921 "environment": "production",
13922 "deployment_id": "dpl_01kq9a2c4e6g8j0m2p4r6t8v0x",
13923 "commit_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
13924 "source": "cloudflare"
13925 },
13926 "logs": [
13927 {
13928 "id": "log_01kq9b7d9f1h3k5m7p9r1t3v5y",
13929 "time_us": 1791813808251000,
13930 "severity": "error",
13931 "severity_number": 17,
13932 "body": "loading pull request 412 failed: Cannot read properties of undefined (reading 'head')",
13933 "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
13934 "span_id": "00f067aa0ba902b7",
13935 "request_id": "req_01kq9b7d9f1h3k5m7p9r1t3v5x",
13936 "attributes": {
13937 "code.function": "loadPull",
13938 "http.route": "/:workspace/:repo/pulls/:number"
13939 },
13940 "service": "g1t-web",
13941 "environment": "production",
13942 "deployment_id": "dpl_01kq9a2c4e6g8j0m2p4r6t8v0x",
13943 "commit_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
13944 "source": "cloudflare"
13945 }
13946 ]
13947 },
13948 "notes": "`404` when the project has no request with that id, or it is older than the project's retention."
13949 },
13950 "list_logs": {
13951 "params": {
13952 "workspace": "flagon-io",
13953 "project": "g1t"
13954 },
13955 "query": {
13956 "q": "\"failed\"",
13957 "level": "error,fatal",
13958 "limit": "1"
13959 },
13960 "response": {
13961 "items": [
13962 {
13963 "id": "log_01kq9b7d9f1h3k5m7p9r1t3v5y",
13964 "time_us": 1791813808251000,
13965 "severity": "error",
13966 "severity_number": 17,
13967 "body": "loading pull request 412 failed: Cannot read properties of undefined (reading 'head')",
13968 "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
13969 "span_id": "00f067aa0ba902b7",
13970 "request_id": "req_01kq9b7d9f1h3k5m7p9r1t3v5x",
13971 "attributes": {
13972 "code.function": "loadPull",
13973 "http.route": "/:workspace/:repo/pulls/:number"
13974 },
13975 "service": "g1t-web",
13976 "environment": "production",
13977 "deployment_id": "dpl_01kq9a2c4e6g8j0m2p4r6t8v0x",
13978 "commit_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
13979 "source": "cloudflare"
13980 }
13981 ],
13982 "next": null
13983 },
13984 "notes": "`q` finds lines holding all of its words, or a phrase in quotes. `level` takes one or more of `trace`, `debug`, `info`, `warn`, `error` and `fatal`. Follow `trace_id` to [the trace](/reference/api/observability/get-trace/) or `request_id` to [the request](/reference/api/observability/get-request/)."
13985 },
13986 "list_traces": {
13987 "params": {
13988 "workspace": "flagon-io",
13989 "project": "g1t"
13990 },
13991 "query": {
13992 "errors_only": "true",
13993 "min_duration_ms": "500"
13994 },
13995 "response": {
13996 "items": [
13997 {
13998 "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
13999 "name": "GET /:workspace/:repo/pulls/:number",
14000 "start_us": 1791813807418000,
14001 "duration_us": 842000,
14002 "span_count": 6,
14003 "error_count": 1,
14004 "services": [
14005 "g1t-web",
14006 "g1t-work"
14007 ],
14008 "status": 500,
14009 "service": "g1t-web",
14010 "environment": "production",
14011 "deployment_id": "dpl_01kq9a2c4e6g8j0m2p4r6t8v0x",
14012 "commit_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
14013 "source": "otlp"
14014 }
14015 ],
14016 "next": null
14017 },
14018 "notes": "Each trace is its root span (or its earliest, when the root has not arrived), with what the rest add up to."
14019 },
14020 "get_trace": {
14021 "params": {
14022 "workspace": "flagon-io",
14023 "project": "g1t",
14024 "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736"
14025 },
14026 "response": {
14027 "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
14028 "spans": [
14029 {
14030 "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
14031 "span_id": "00f067aa0ba902b7",
14032 "parent_span_id": null,
14033 "name": "GET /:workspace/:repo/pulls/:number",
14034 "kind": "server",
14035 "start_us": 1791813807418000,
14036 "duration_us": 842000,
14037 "status": "error",
14038 "status_message": "TypeError",
14039 "attributes": {
14040 "http.request.method": "GET",
14041 "http.response.status_code": 500
14042 },
14043 "resource": {
14044 "service.name": "g1t-web",
14045 "deployment.environment.name": "production"
14046 },
14047 "events": [],
14048 "links": [],
14049 "service": "g1t-web",
14050 "environment": "production",
14051 "deployment_id": "dpl_01kq9a2c4e6g8j0m2p4r6t8v0x",
14052 "commit_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
14053 "source": "otlp"
14054 }
14055 ],
14056 "logs": [
14057 {
14058 "id": "log_01kq9b7d9f1h3k5m7p9r1t3v5y",
14059 "time_us": 1791813808251000,
14060 "severity": "error",
14061 "severity_number": 17,
14062 "body": "loading pull request 412 failed: Cannot read properties of undefined (reading 'head')",
14063 "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
14064 "span_id": "00f067aa0ba902b7",
14065 "request_id": "req_01kq9b7d9f1h3k5m7p9r1t3v5x",
14066 "attributes": {
14067 "code.function": "loadPull",
14068 "http.route": "/:workspace/:repo/pulls/:number"
14069 },
14070 "service": "g1t-web",
14071 "environment": "production",
14072 "deployment_id": "dpl_01kq9a2c4e6g8j0m2p4r6t8v0x",
14073 "commit_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7",
14074 "source": "cloudflare"
14075 }
14076 ]
14077 },
14078 "notes": "Spans are in the order they started. `404` when the project has no spans of that trace."
14079 },
14080 "list_errors": {
14081 "params": {
14082 "workspace": "flagon-io",
14083 "project": "g1t"
14084 },
14085 "query": {
14086 "state": "open"
14087 },
14088 "response": [
14089 {
14090 "fingerprint": "9f2c41d07ab3e815",
14091 "name": "TypeError",
14092 "message": "Cannot read properties of undefined (reading 'head')",
14093 "stack": "TypeError: Cannot read properties of undefined (reading 'head')\n at loadPull (app/routes/pulls.ts:88:31)",
14094 "service": "g1t-web",
14095 "environment": "production",
14096 "first_us": 1791813062000000,
14097 "last_us": 1791813808000000,
14098 "count": 37,
14099 "first_deployment_id": "dpl_01kq9a2c4e6g8j0m2p4r6t8v0x",
14100 "last_request_id": "req_01kq9b7d9f1h3k5m7p9r1t3v5x",
14101 "last_trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
14102 "state": "open",
14103 "issue_number": null
14104 }
14105 ],
14106 "notes": "The same exception is one group: its name, its message with numbers and ids taken out, and the top frame of its stack. `first_deployment_id` is the deployment it was first seen on, what likely brought it in. At most 200 groups, most recently seen first."
14107 },
14108 "update_error": {
14109 "params": {
14110 "workspace": "flagon-io",
14111 "project": "g1t",
14112 "fingerprint": "9f2c41d07ab3e815"
14113 },
14114 "request": {
14115 "state": "resolved",
14116 "issue_number": 418
14117 },
14118 "response": {
14119 "fingerprint": "9f2c41d07ab3e815",
14120 "name": "TypeError",
14121 "message": "Cannot read properties of undefined (reading 'head')",
14122 "stack": "TypeError: Cannot read properties of undefined (reading 'head')\n at loadPull (app/routes/pulls.ts:88:31)",
14123 "service": "g1t-web",
14124 "environment": "production",
14125 "first_us": 1791813062000000,
14126 "last_us": 1791813808000000,
14127 "count": 37,
14128 "first_deployment_id": "dpl_01kq9a2c4e6g8j0m2p4r6t8v0x",
14129 "last_request_id": "req_01kq9b7d9f1h3k5m7p9r1t3v5x",
14130 "last_trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
14131 "state": "resolved",
14132 "issue_number": 418
14133 },
14134 "notes": "A resolved group that happens again opens again. `issue_number` links the issue made for it, so an agent can take it; null unlinks it. Needs the Triage role or higher."
14135 },
14136 "list_metrics": {
14137 "params": {
14138 "workspace": "flagon-io",
14139 "project": "g1t"
14140 },
14141 "response": [
14142 {
14143 "name": "http.server.request.duration",
14144 "kind": "histogram",
14145 "unit": "s",
14146 "description": "Duration of HTTP server requests.",
14147 "services": [
14148 "g1t-api"
14149 ],
14150 "last_us": 1791813800000000
14151 },
14152 {
14153 "name": "queue.depth",
14154 "kind": "gauge",
14155 "unit": "{message}",
14156 "description": "Messages waiting.",
14157 "services": [
14158 "g1t-work"
14159 ],
14160 "last_us": 1791813780000000
14161 }
14162 ]
14163 },
14164 "get_metric": {
14165 "params": {
14166 "workspace": "flagon-io",
14167 "project": "g1t",
14168 "metric": "http.server.request.duration"
14169 },
14170 "query": {
14171 "aggregate": "p95",
14172 "group_by": "http.route",
14173 "step": "300"
14174 },
14175 "response": {
14176 "name": "http.server.request.duration",
14177 "unit": "s",
14178 "step_s": 300,
14179 "series": [
14180 {
14181 "group": "/repos/:owner/:name/pulls",
14182 "points": [
14183 {
14184 "time_us": 1791813300000000,
14185 "value": 0.212
14186 },
14187 {
14188 "time_us": 1791813600000000,
14189 "value": 0.236
14190 }
14191 ]
14192 }
14193 ]
14194 },
14195 "notes": "A metric name with characters outside letters, digits, `.`, `_` and `-` is URL-encoded in the path. Gauges average in each step unless `aggregate` says `min` or `max`; sums add, and a cumulative sum becomes its increase; histograms give their mean, or a percentile from their buckets."
14196 },
14197 "get_observability_settings": {
14198 "params": {
14199 "workspace": "flagon-io",
14200 "project": "g1t"
14201 },
14202 "response": {
14203 "retention_days": 7,
14204 "deployments": true
14205 },
14206 "notes": "Requests, logs and spans are kept for `retention_days`; the overview's charts are kept longer, as per-minute counts. Needs the Admin role."
14207 },
14208 "update_observability_settings": {
14209 "params": {
14210 "workspace": "flagon-io",
14211 "project": "g1t"
14212 },
14213 "request": {
14214 "retention_days": 14
14215 },
14216 "response": {
14217 "retention_days": 14,
14218 "deployments": true
14219 },
14220 "notes": "`retention_days` is 1, 3, 7, 14 or 30. Turning `deployments` off stops the project's apps on g1t.page from sending and keeps its tokens and history. Needs the Admin role."
14221 },
14222 "list_ingest_tokens": {
14223 "params": {
14224 "workspace": "flagon-io",
14225 "project": "g1t"
14226 },
14227 "response": [
14228 {
14229 "id": "a1b2c3d4",
14230 "name": "Deployments on g1t.page",
14231 "hint": "g1to_prj_…2c8e",
14232 "created_by": null,
14233 "created_us": 1790841600000000,
14234 "last_used_us": 1791813809000000,
14235 "managed": true
14236 },
14237 {
14238 "id": "k3m9q2x7",
14239 "name": "fly.io collector",
14240 "hint": "g1to_prj_…9f3a",
14241 "created_by": "syntaqx",
14242 "created_us": 1791796364000000,
14243 "last_used_us": 1791813790000000,
14244 "managed": false
14245 }
14246 ],
14247 "notes": "Secrets are never returned: `hint` tells tokens apart. The `managed` one is g1t's own, for the project's apps on g1t.page, and is replaced by g1t, not by people. Needs the Admin role."
14248 },
14249 "create_ingest_token": {
14250 "params": {
14251 "workspace": "flagon-io",
14252 "project": "g1t"
14253 },
14254 "request": {
14255 "name": "fly.io collector"
14256 },
14257 "response": {
14258 "token": {
14259 "id": "k3m9q2x7",
14260 "name": "fly.io collector",
14261 "hint": "g1to_prj_…9f3a",
14262 "created_by": "syntaqx",
14263 "created_us": 1791796364000000,
14264 "last_used_us": null,
14265 "managed": false
14266 },
14267 "secret": "g1to_prj_…"
14268 },
14269 "notes": "The secret is returned this once. Send it as `Authorization: Bearer <secret>` (or the `x-g1t-token` header) with OTLP over HTTP, in JSON or protobuf, to `https://otel.g1t.sh/v1/traces`, `/v1/logs` and `/v1/metrics`, or to `/otlp/v1/…` on the API's own address. Needs the Admin role."
14270 },
14271 "delete_ingest_token": {
14272 "params": {
14273 "workspace": "flagon-io",
14274 "project": "g1t",
14275 "id": "k3m9q2x7"
14276 },
14277 "response": true,
14278 "notes": "What sends with it is refused from then on. `404` for the managed token, which people cannot delete. Needs the Admin role."
14279 },
14280 "list_telemetry_exports": {
14281 "params": {
14282 "workspace": "flagon-io",
14283 "project": "g1t"
14284 },
14285 "response": [
14286 {
14287 "id": "x7d2k9m4",
14288 "name": "Honeycomb",
14289 "endpoint": "https://api.honeycomb.io",
14290 "signals": [
14291 "traces",
14292 "logs"
14293 ],
14294 "header_names": [
14295 "x-honeycomb-team"
14296 ],
14297 "enabled": true,
14298 "last_error": null,
14299 "last_sent_us": 1791813809000000
14300 }
14301 ],
14302 "notes": "Header values are secrets: written, never read back, so only `header_names` are shown. `last_error` is what the endpoint answered the last time sending failed. Needs the Admin role."
14303 },
14304 "create_telemetry_export": {
14305 "params": {
14306 "workspace": "flagon-io",
14307 "project": "g1t"
14308 },
14309 "request": {
14310 "name": "Honeycomb",
14311 "endpoint": "https://api.honeycomb.io",
14312 "signals": [
14313 "traces",
14314 "logs"
14315 ],
14316 "headers": {
14317 "x-honeycomb-team": "hcaik_…"
14318 }
14319 },
14320 "response": {
14321 "id": "x7d2k9m4",
14322 "name": "Honeycomb",
14323 "endpoint": "https://api.honeycomb.io",
14324 "signals": [
14325 "traces",
14326 "logs"
14327 ],
14328 "header_names": [
14329 "x-honeycomb-team"
14330 ],
14331 "enabled": true,
14332 "last_error": null,
14333 "last_sent_us": null
14334 },
14335 "notes": "`endpoint` is the OTLP/HTTP base address; `/v1/traces`, `/v1/logs` and `/v1/metrics` are added. Requests go as log records. Telemetry is sent on as it arrives, from then on. Needs the Admin role."
14336 },
14337 "update_telemetry_export": {
14338 "params": {
14339 "workspace": "flagon-io",
14340 "project": "g1t",
14341 "id": "x7d2k9m4"
14342 },
14343 "request": {
14344 "enabled": false
14345 },
14346 "response": {
14347 "id": "x7d2k9m4",
14348 "name": "Honeycomb",
14349 "endpoint": "https://api.honeycomb.io",
14350 "signals": [
14351 "traces",
14352 "logs"
14353 ],
14354 "header_names": [
14355 "x-honeycomb-team"
14356 ],
14357 "enabled": false,
14358 "last_error": null,
14359 "last_sent_us": 1791813809000000
14360 },
14361 "notes": "Only what is given changes. A header given is set, a header given as `\"\"` is removed, and the rest are kept. Needs the Admin role."
14362 },
14363 "delete_telemetry_export": {
14364 "params": {
14365 "workspace": "flagon-io",
14366 "project": "g1t",
14367 "id": "x7d2k9m4"
14368 },
14369 "response": true,
14370 "notes": "Needs the Admin role."
14371 },
14372 "get_observability_usage": {
14373 "params": {
14374 "workspace": "flagon-io",
14375 "project": "g1t"
14376 },
14377 "response": {
14378 "month": "2026-10",
14379 "ingested_bytes": 4831920112,
14380 "requests": 1840221,
14381 "logs": 6204118,
14382 "spans": 9921540,
14383 "metric_points": 3120400,
14384 "stored_bytes": 1210443776
14385 },
14386 "notes": "This month so far. `ingested_bytes` is what arrived, after decoding: what ingest is metered by. Needs the Admin role."
Merge Stripe Tax, the card fee on card payments, and one free workspace per person14387 }
Costs: a statement that keeps usage sold, running g1t, subscriptions and what was given away (comped, free use, trial, pool) apart, and says who was paid; free use carries its own cost; the run button says it is running14388}

This file's history is long; its oldest lines are credited to the oldest commit read.