flagon-io/g1t

public

Where people and agents ship software together. The open-source git platform for the whole job: issues, agents, checks and deploys to the edge.

g1t/apps/api/src/reference.json

2,757 lines73,583 bytesCodeBlame
1{
2 "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",
23 "verified": true
24 }
25 },
26 "whoami": {
27 "response": {
28 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
29 "username": "syntaqx",
30 "kind": "user",
31 "verified": true,
32 "workspaces": [
33 {
34 "slug": "acme",
35 "role": "member"
36 },
37 {
38 "slug": "syntaqx",
39 "role": "owner"
40 }
41 ]
42 },
43 "notes": "`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."
44 },
45 "create_workspace": {
46 "request": {
47 "slug": "syntaqx-labs",
48 "name": "Syntaqx Labs"
49 },
50 "response": {
51 "id": "wsp_01m43teqa9em6bje0bhvdj4jkb",
52 "slug": "syntaqx-labs",
53 "name": "Syntaqx Labs",
54 "description": null,
55 "created_at": "2026-10-04T16:02:51.337Z",
56 "member_count": 1
57 }
58 },
59 "list_repos": {
60 "query": {
61 "q": "hello"
62 },
63 "response": [
64 {
65 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
66 "namespace": "syntaqx",
67 "name": "hello",
68 "description": "A tiny service that says hello.",
69 "is_private": false,
70 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
71 "default_branch": "main",
72 "fork_of": null,
73 "protected": true,
74 "created_at": "2026-09-28T14:11:52.640Z"
75 }
76 ],
77 "notes": "Returns at most 50 repositories, newest first. Forks made for pull requests are left out."
78 },
79 "create_repo": {
80 "request": {
81 "workspace": "syntaqx",
82 "name": "hello-cli",
83 "description": "Command-line client for hello.",
84 "private": false
85 },
86 "response": {
87 "id": "rep_01m43tk1jhehztx23drs87f5fc",
88 "namespace": "syntaqx",
89 "name": "hello-cli",
90 "description": "Command-line client for hello.",
91 "is_private": false,
92 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
93 "default_branch": "main",
94 "fork_of": null,
95 "protected": false,
96 "created_at": "2026-10-04T16:05:12.913Z"
97 },
98 "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."
99 },
100 "get_repo": {
101 "response": {
102 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
103 "namespace": "syntaqx",
104 "name": "hello",
105 "description": "A tiny service that says hello.",
106 "is_private": false,
107 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
108 "default_branch": "main",
109 "fork_of": null,
110 "protected": true,
111 "created_at": "2026-09-28T14:11:52.640Z"
112 }
113 },
114 "update_repo": {
115 "request": {
116 "description": "Says hello, politely.",
117 "protected": true
118 },
119 "response": {
120 "id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
121 "namespace": "syntaqx",
122 "name": "hello",
123 "description": "Says hello, politely.",
124 "is_private": false,
125 "owner_id": "usr_01kkntcg1eeb98j62xjm7eh09p",
126 "default_branch": "main",
127 "fork_of": null,
128 "protected": true,
129 "created_at": "2026-09-28T14:11:52.640Z"
130 }
131 },
132 "get_repo_settings": {
133 "response": {
134 "auto_merge": false,
135 "require_up_to_date": false,
136 "required_approvals": 0,
137 "count_agent_approvals": true,
138 "allow_ignoring_checks": true,
139 "agent_review": true,
140 "max_revisions": 2,
141 "merge_queue": false,
142 "updated_by": null,
143 "updated_at": null
144 }
145 },
146 "update_repo_settings": {
147 "request": {
148 "required_approvals": 1,
149 "count_agent_approvals": false,
150 "merge_queue": true
151 },
152 "response": {
153 "auto_merge": false,
154 "require_up_to_date": false,
155 "required_approvals": 1,
156 "count_agent_approvals": false,
157 "allow_ignoring_checks": true,
158 "agent_review": true,
159 "max_revisions": 2,
160 "merge_queue": true,
161 "updated_by": "syntaqx",
162 "updated_at": "2026-10-04T16:20:37.508Z"
163 },
164 "notes": "`required_approvals` is at most 6 and `max_revisions` at most 5. See [what a repository can ask for](/guides/g1t-agents/#what-a-repository-can-ask-for)."
165 },
166 "list_events": {
167 "query": {
168 "before": "evt_01m43t2a6c9e3g7j1m5q9t3x7b"
169 },
170 "response": [
171 {
172 "id": "evt_01m43smh3ve52vkcna207vqctf",
173 "type": "pull.opened",
174 "source": "work",
175 "time": "2026-10-01T18:20:02.117Z",
176 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
177 "actor": "usr_01kkntcg1eeb98j62xjm7eh09p",
178 "data": {
179 "pull_id": "pr_01m43smh3vexsr5pmp60qwv0vs",
180 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
181 "number": 14,
182 "issue": 12,
183 "agent": "claude-code"
184 }
185 },
186 {
187 "id": "evt_01m43shrzpf2vt5rxbb02z0xjt",
188 "type": "issue.opened",
189 "source": "work",
190 "time": "2026-10-01T18:04:11.482Z",
191 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
192 "actor": "usr_01kkntcg1eeb98j62xjm7eh09p",
193 "data": {
194 "issue_id": "iss_01m43shrzpfe49x74ga7sj1c6v",
195 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
196 "number": 12,
197 "title": "Greeting should name the caller"
198 }
199 }
200 ],
201 "notes": "Returns 50 events a page. To page back, send the `id` of the last event you have as `before`. `actor` is a user id, and `data` depends on `type`."
202 },
203 "list_issues": {
204 "query": {
205 "state": "open",
206 "label": "feature"
207 },
208 "response": [
209 {
210 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
211 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
212 "number": 12,
213 "title": "Greeting should name the caller",
214 "body": "Take a name from the first argument; fall back to world.",
215 "labels": [
216 "feature"
217 ],
218 "checks": [
219 "cargo test"
220 ],
221 "state": "open",
222 "reason": null,
223 "resolved_by": null,
224 "author": {
225 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
226 "username": "syntaqx",
227 "kind": "user",
228 "verified": false,
229 "workspaces": []
230 },
231 "created_at": "2026-10-01T18:04:11.482Z",
232 "updated_at": "2026-10-01T18:04:11.482Z",
233 "closed_at": null,
234 "pull_count": 1,
235 "comment_count": 0,
236 "assignees": [],
237 "blocked_by": [],
238 "queued": false,
239 "agent": "claude-code"
240 }
241 ],
242 "notes": "Returns at most 100 issues, newest first. `comment_count` counts comments, not events such as \"opened #14 for this\"."
243 },
244 "create_issue": {
245 "request": {
246 "title": "Greeting should name the caller",
247 "body": "Take a name from the first argument; fall back to world.",
248 "labels": [
249 "feature"
250 ],
251 "checks": [
252 "cargo test"
253 ]
254 },
255 "response": {
256 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
257 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
258 "number": 12,
259 "title": "Greeting should name the caller",
260 "body": "Take a name from the first argument; fall back to world.",
261 "labels": [
262 "feature"
263 ],
264 "checks": [
265 "cargo test"
266 ],
267 "state": "open",
268 "reason": null,
269 "resolved_by": null,
270 "author": {
271 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
272 "username": "syntaqx",
273 "kind": "user",
274 "verified": false,
275 "workspaces": []
276 },
277 "created_at": "2026-10-01T18:04:11.482Z",
278 "updated_at": "2026-10-01T18:04:11.482Z",
279 "closed_at": null,
280 "pull_count": 0,
281 "comment_count": 0,
282 "assignees": [],
283 "blocked_by": [],
284 "queued": false,
285 "agent": null
286 },
287 "notes": "Labels are lowercased. A label not used before is created."
288 },
289 "get_issue": {
290 "response": {
291 "issue": {
292 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
293 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
294 "number": 12,
295 "title": "Greeting should name the caller",
296 "body": "Take a name from the first argument; fall back to world.",
297 "labels": [
298 "feature"
299 ],
300 "checks": [
301 "cargo test"
302 ],
303 "state": "closed",
304 "reason": "completed",
305 "resolved_by": 14,
306 "author": {
307 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
308 "username": "syntaqx",
309 "kind": "user",
310 "verified": false,
311 "workspaces": []
312 },
313 "created_at": "2026-10-01T18:04:11.482Z",
314 "updated_at": "2026-10-01T18:52:17.093Z",
315 "closed_at": "2026-10-01T18:52:17.093Z",
316 "pull_count": 2,
317 "comment_count": 0,
318 "assignees": [],
319 "blocked_by": [],
320 "queued": false,
321 "agent": null
322 },
323 "pulls": [
324 {
325 "id": "pr_01m43sjq8tcz5rbm2a7k4d9e6w",
326 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
327 "number": 13,
328 "issue": 12,
329 "title": "Greeting should name the caller",
330 "body": null,
331 "agent": "claude-code",
332 "runtime": "external",
333 "status": "closed",
334 "fork": {
335 "namespace": "pulls",
336 "name": "pr_01m43sjq8tcz5rbm2a7k4d9e6w"
337 },
338 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
339 "branch": null,
340 "head_commit": null,
341 "merge_base": null,
342 "merged_by": null,
343 "merged_at": null,
344 "superseded_by": 14,
345 "check_status": null,
346 "files": [],
347 "assignees": [],
348 "reviewers": [],
349 "author": {
350 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
351 "username": "syntaqx",
352 "kind": "user",
353 "verified": false,
354 "workspaces": []
355 },
356 "created_at": "2026-10-01T18:20:02.117Z",
357 "updated_at": "2026-10-01T18:20:02.117Z"
358 },
359 {
360 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
361 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
362 "number": 14,
363 "issue": 12,
364 "title": "Greeting should name the caller",
365 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
366 "agent": "claude-code",
367 "runtime": "external",
368 "status": "merged",
369 "fork": {
370 "namespace": "pulls",
371 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
372 },
373 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
374 "branch": null,
375 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
376 "merge_base": "3a7e9c1b5d2f4a6c8e0b2d4f6a8c0e2b4d6f8a1c",
377 "merged_by": "syntaqx",
378 "merged_at": "2026-10-01T18:52:17.093Z",
379 "superseded_by": null,
380 "check_status": "passed",
381 "files": [
382 {
383 "path": "src/main.rs",
384 "additions": 6,
385 "deletions": 2
386 }
387 ],
388 "assignees": [],
389 "reviewers": [
390 "ana"
391 ],
392 "author": {
393 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
394 "username": "syntaqx",
395 "kind": "user",
396 "verified": false,
397 "workspaces": []
398 },
399 "created_at": "2026-10-01T18:20:02.117Z",
400 "updated_at": "2026-10-01T18:52:17.093Z"
401 }
402 ],
403 "comments": [
404 {
405 "id": "cmt_01m43sr2b7d5f0j6k3n8p1q4v9",
406 "kind": "event",
407 "author": {
408 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
409 "username": "syntaqx",
410 "kind": "user",
411 "verified": false,
412 "workspaces": []
413 },
414 "body": "opened #14 for this",
415 "path": null,
416 "line": null,
417 "verdict": null,
418 "created_at": "2026-10-01T18:20:02.141Z"
419 }
420 ]
421 },
422 "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."
423 },
424 "update_issue": {
425 "request": {
426 "labels": [
427 "feature",
428 "good first issue"
429 ],
430 "assignees": [
431 "syntaqx"
432 ]
433 },
434 "response": {
435 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
436 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
437 "number": 12,
438 "title": "Greeting should name the caller",
439 "body": "Take a name from the first argument; fall back to world.",
440 "labels": [
441 "feature",
442 "good first issue"
443 ],
444 "checks": [
445 "cargo test"
446 ],
447 "state": "open",
448 "reason": null,
449 "resolved_by": null,
450 "author": {
451 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
452 "username": "syntaqx",
453 "kind": "user",
454 "verified": false,
455 "workspaces": []
456 },
457 "created_at": "2026-10-01T18:04:11.482Z",
458 "updated_at": "2026-10-01T18:09:47.305Z",
459 "closed_at": null,
460 "pull_count": 0,
461 "comment_count": 0,
462 "assignees": [
463 "syntaqx"
464 ],
465 "blocked_by": [],
466 "queued": false,
467 "agent": null
468 }
469 },
470 "close_issue": {
471 "request": {
472 "reason": "not_planned"
473 },
474 "response": {
475 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
476 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
477 "number": 12,
478 "title": "Greeting should name the caller",
479 "body": "Take a name from the first argument; fall back to world.",
480 "labels": [
481 "feature"
482 ],
483 "checks": [
484 "cargo test"
485 ],
486 "state": "closed",
487 "reason": "not_planned",
488 "resolved_by": null,
489 "author": {
490 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
491 "username": "syntaqx",
492 "kind": "user",
493 "verified": false,
494 "workspaces": []
495 },
496 "created_at": "2026-10-01T18:04:11.482Z",
497 "updated_at": "2026-10-01T19:30:00.214Z",
498 "closed_at": "2026-10-01T19:30:00.214Z",
499 "pull_count": 0,
500 "comment_count": 0,
501 "assignees": [],
502 "blocked_by": [],
503 "queued": false,
504 "agent": null
505 }
506 },
507 "reopen_issue": {
508 "response": {
509 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
510 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
511 "number": 12,
512 "title": "Greeting should name the caller",
513 "body": "Take a name from the first argument; fall back to world.",
514 "labels": [
515 "feature"
516 ],
517 "checks": [
518 "cargo test"
519 ],
520 "state": "open",
521 "reason": null,
522 "resolved_by": null,
523 "author": {
524 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
525 "username": "syntaqx",
526 "kind": "user",
527 "verified": false,
528 "workspaces": []
529 },
530 "created_at": "2026-10-01T18:04:11.482Z",
531 "updated_at": "2026-10-01T19:41:52.830Z",
532 "closed_at": null,
533 "pull_count": 0,
534 "comment_count": 0,
535 "assignees": [],
536 "blocked_by": [],
537 "queued": false,
538 "agent": null
539 }
540 },
541 "assign_issue": {
542 "request": {
543 "instructions": "Keep the change to src/main.rs."
544 },
545 "response": {
546 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
547 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
548 "number": 14,
549 "issue": 12,
550 "title": "Greeting should name the caller",
551 "body": null,
552 "agent": "g1t-agent",
553 "runtime": "hosted",
554 "status": "draft",
555 "fork": {
556 "namespace": "pulls",
557 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
558 },
559 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
560 "branch": null,
561 "head_commit": null,
562 "merge_base": null,
563 "merged_by": null,
564 "merged_at": null,
565 "superseded_by": null,
566 "check_status": null,
567 "files": [],
568 "assignees": [],
569 "reviewers": [],
570 "author": {
571 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
572 "username": "syntaqx",
573 "kind": "user",
574 "verified": false,
575 "workspaces": []
576 },
577 "created_at": "2026-10-01T18:20:02.117Z",
578 "updated_at": "2026-10-01T18:20:02.117Z"
579 },
580 "notes": "The response is the pull request the g1t agent opened, still a draft. Follow it with [get a pull request](/reference/api/pull-requests/get-pull-request/): `lifecycle` says what the agent is doing."
581 },
582 "add_comment": {
583 "request": {
584 "body": "Should an empty name fall back to \"world\"?"
585 },
586 "response": {
587 "id": "cmt_01m43sv4c8e2g6j0m4q8t2x6a1",
588 "kind": "comment",
589 "author": {
590 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
591 "username": "syntaqx",
592 "kind": "user",
593 "verified": true,
594 "workspaces": [
595 {
596 "slug": "syntaqx",
597 "role": "owner"
598 }
599 ]
600 },
601 "body": "Should an empty name fall back to \"world\"?",
602 "path": null,
603 "line": null,
604 "verdict": null,
605 "created_at": "2026-10-01T18:12:30.551Z"
606 }
607 },
608 "list_labels": {
609 "response": [
610 "bug",
611 "feature",
612 "docs",
613 "chore",
614 "question",
615 "good first issue"
616 ],
617 "notes": "The five default labels come first, then the others used on the repository's issues, alphabetically."
618 },
619 "plan_work": {
620 "request": {
621 "brief": "Greet people by name, from the command line and the web page."
622 },
623 "response": {
624 "plan_id": "pln_01m43s9c4e8g2j6m0q4t8x2b6d"
625 }
626 },
627 "get_plan": {
628 "params": {
629 "plan": "pln_01m43s9c4e8g2j6m0q4t8x2b6d"
630 },
631 "response": {
632 "id": "pln_01m43s9c4e8g2j6m0q4t8x2b6d",
633 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
634 "brief": "Greet people by name, from the command line and the web page.",
635 "status": "ready",
636 "summary": "Name parsing first, then the two places that print the greeting.",
637 "issues": [
638 {
639 "title": "Greeting should name the caller",
640 "body": "Accept an optional name in `greet()` and use it.",
641 "labels": [
642 "feature"
643 ],
644 "checks": [
645 "cargo test"
646 ],
647 "files": [
648 "src/greet.rs"
649 ],
650 "depends_on": [],
651 "number": null
652 },
653 {
654 "title": "Show the caller's name on the web page",
655 "body": "Read `?name=` and pass it to `greet()`.",
656 "labels": [
657 "feature"
658 ],
659 "checks": [
660 "cargo test"
661 ],
662 "files": [
663 "src/web.rs"
664 ],
665 "depends_on": [
666 1
667 ],
668 "number": null
669 }
670 ],
671 "error": null,
672 "author": {
673 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
674 "username": "syntaqx",
675 "kind": "user",
676 "verified": false,
677 "workspaces": []
678 },
679 "created_at": "2026-10-01T17:58:40.006Z",
680 "finished_at": "2026-10-01T18:01:12.774Z",
681 "progress": [],
682 "exchanges": []
683 },
684 "notes": "A plan still `planning` after 20 minutes is reported as `failed`. `progress` follows each issue once the plan is applied."
685 },
686 "apply_plan": {
687 "params": {
688 "plan": "pln_01m43s9c4e8g2j6m0q4t8x2b6d"
689 },
690 "request": {
691 "assign": true
692 },
693 "response": {
694 "id": "pln_01m43s9c4e8g2j6m0q4t8x2b6d",
695 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
696 "brief": "Greet people by name, from the command line and the web page.",
697 "status": "applied",
698 "summary": "Name parsing first, then the two places that print the greeting.",
699 "issues": [
700 {
701 "title": "Greeting should name the caller",
702 "body": "Accept an optional name in `greet()` and use it.",
703 "labels": [
704 "feature"
705 ],
706 "checks": [
707 "cargo test"
708 ],
709 "files": [
710 "src/greet.rs"
711 ],
712 "depends_on": [],
713 "number": 12
714 },
715 {
716 "title": "Show the caller's name on the web page",
717 "body": "Read `?name=` and pass it to `greet()`.",
718 "labels": [
719 "feature"
720 ],
721 "checks": [
722 "cargo test"
723 ],
724 "files": [
725 "src/web.rs"
726 ],
727 "depends_on": [
728 1
729 ],
730 "number": 13
731 }
732 ],
733 "error": null,
734 "author": {
735 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
736 "username": "syntaqx",
737 "kind": "user",
738 "verified": false,
739 "workspaces": []
740 },
741 "created_at": "2026-10-01T17:58:40.006Z",
742 "finished_at": "2026-10-01T18:01:12.774Z",
743 "progress": [],
744 "exchanges": []
745 },
746 "notes": "Each opened issue's `number` is filled in. Issues left out with `keep` stay `null`."
747 },
748 "list_pull_requests": {
749 "query": {
750 "state": "open"
751 },
752 "response": [
753 {
754 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
755 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
756 "number": 14,
757 "issue": 12,
758 "title": "Greeting should name the caller",
759 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
760 "agent": "claude-code",
761 "runtime": "external",
762 "status": "open",
763 "fork": {
764 "namespace": "pulls",
765 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
766 },
767 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
768 "branch": null,
769 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
770 "merge_base": null,
771 "merged_by": null,
772 "merged_at": null,
773 "superseded_by": null,
774 "check_status": "passed",
775 "files": [
776 {
777 "path": "src/main.rs",
778 "additions": 6,
779 "deletions": 2
780 }
781 ],
782 "assignees": [],
783 "reviewers": [
784 "ana"
785 ],
786 "author": {
787 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
788 "username": "syntaqx",
789 "kind": "user",
790 "verified": false,
791 "workspaces": []
792 },
793 "created_at": "2026-10-01T18:20:02.117Z",
794 "updated_at": "2026-10-01T18:35:44.902Z"
795 }
796 ],
797 "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."
798 },
799 "create_pull_request": {
800 "request": {
801 "issue": 12,
802 "agent": "claude-code"
803 },
804 "response": {
805 "pull": {
806 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
807 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
808 "number": 14,
809 "issue": 12,
810 "title": "Greeting should name the caller",
811 "body": null,
812 "agent": "claude-code",
813 "runtime": "external",
814 "status": "draft",
815 "fork": {
816 "namespace": "pulls",
817 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
818 },
819 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
820 "branch": null,
821 "head_commit": null,
822 "merge_base": null,
823 "merged_by": null,
824 "merged_at": null,
825 "superseded_by": null,
826 "check_status": null,
827 "files": [],
828 "assignees": [],
829 "reviewers": [],
830 "author": {
831 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
832 "username": "syntaqx",
833 "kind": "user",
834 "verified": false,
835 "workspaces": []
836 },
837 "created_at": "2026-10-01T18:20:02.117Z",
838 "updated_at": "2026-10-01T18:20:02.117Z"
839 },
840 "git": {
841 "remote": "https://g1t.sh/pulls/pr_01m43smh3vexsr5pmp60qwv0vs.git",
842 "username": "syntaqx",
843 "password": "your g1t access token"
844 }
845 },
846 "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."
847 },
848 "get_pull_request": {
849 "response": {
850 "pull": {
851 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
852 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
853 "number": 14,
854 "issue": 12,
855 "title": "Greeting should name the caller",
856 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
857 "agent": "claude-code",
858 "runtime": "external",
859 "status": "open",
860 "fork": {
861 "namespace": "pulls",
862 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
863 },
864 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
865 "branch": null,
866 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
867 "merge_base": null,
868 "merged_by": null,
869 "merged_at": null,
870 "superseded_by": null,
871 "check_status": "passed",
872 "files": [
873 {
874 "path": "src/main.rs",
875 "additions": 6,
876 "deletions": 2
877 }
878 ],
879 "assignees": [],
880 "reviewers": [
881 "ana"
882 ],
883 "author": {
884 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
885 "username": "syntaqx",
886 "kind": "user",
887 "verified": false,
888 "workspaces": []
889 },
890 "created_at": "2026-10-01T18:20:02.117Z",
891 "updated_at": "2026-10-01T18:35:44.902Z"
892 },
893 "issue": {
894 "id": "iss_01m43shrzpfe49x74ga7sj1c6v",
895 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
896 "number": 12,
897 "title": "Greeting should name the caller",
898 "body": "Take a name from the first argument; fall back to world.",
899 "labels": [
900 "feature"
901 ],
902 "checks": [
903 "cargo test"
904 ],
905 "state": "open",
906 "reason": null,
907 "resolved_by": null,
908 "author": {
909 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
910 "username": "syntaqx",
911 "kind": "user",
912 "verified": false,
913 "workspaces": []
914 },
915 "created_at": "2026-10-01T18:04:11.482Z",
916 "updated_at": "2026-10-01T18:20:02.117Z",
917 "closed_at": null,
918 "pull_count": 1,
919 "comment_count": 0,
920 "assignees": [],
921 "blocked_by": [],
922 "queued": false,
923 "agent": "claude-code"
924 },
925 "comments": [
926 {
927 "id": "cmt_01m43st6d0f4h8k2n6r0v4z8c2",
928 "kind": "event",
929 "author": {
930 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
931 "username": "syntaqx",
932 "kind": "user",
933 "verified": false,
934 "workspaces": []
935 },
936 "body": "marked this ready for review",
937 "path": null,
938 "line": null,
939 "verdict": null,
940 "created_at": "2026-10-01T18:33:10.420Z"
941 }
942 ],
943 "checks": {
944 "id": "chk_01m43sw8e2g6j0m4q8t2x6a0c4",
945 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
946 "status": "passed",
947 "results": [
948 {
949 "command": "cargo test",
950 "passed": true,
951 "exit_code": 0,
952 "output": "test result: ok. 3 passed; 0 failed",
953 "duration_ms": 18234
954 }
955 ],
956 "error": null,
957 "created_at": "2026-10-01T18:33:11.002Z",
958 "finished_at": "2026-10-01T18:35:44.902Z"
959 },
960 "overlaps": [],
961 "behind": false,
962 "review_pending": false,
963 "lifecycle": null,
964 "landing": false,
965 "stalled": null,
966 "messages": [
967 {
968 "id": "msg_01m43tx5egeh4t3f9zcnjenqvz",
969 "author": "syntaqx",
970 "body": "Keep \"world\" as the default when no name is given.",
971 "created_at": "2026-10-01T18:25:00.310Z",
972 "delivered_at": "2026-10-01T18:25:31.007Z",
973 "kind": "message",
974 "from_number": null,
975 "to_number": 14,
976 "answer": null,
977 "declined": false
978 }
979 ],
980 "statuses": []
981 },
982 "notes": "| Field | |\n| --- | --- |\n| `pull.files` | The files it changes, with lines added and removed. |\n| `checks` | The latest run of the acceptance checks against its head, with each command's output. |\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 the g1t agent 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| `statuses` | Commit statuses reported for its head, such as workflow runs. |\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 the g1t agent do it. |\n| `earlierChecks` | Earlier runs of the acceptance checks, newest first, without their output. |\n\nChecks are started by g1t, not through the API. They run when a pull request becomes ready for review and again when its head moves."
983 },
984 "get_pull_request_changes": {
985 "response": {
986 "base": "3a7e9c1b5d2f4a6c8e0b2d4f6a8c0e2b4d6f8a1c",
987 "head": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
988 "files": [
989 {
990 "path": "src/main.rs",
991 "status": "modified",
992 "additions": 1,
993 "deletions": 1,
994 "binary": false,
995 "hunks": [
996 {
997 "lines": [
998 {
999 "kind": "context",
1000 "old": 3,
1001 "new": 3,
1002 "text": "fn main() {"
1003 },
1004 {
1005 "kind": "delete",
1006 "old": 4,
1007 "new": null,
1008 "text": " println!(\"Hello, world!\");"
1009 },
1010 {
1011 "kind": "add",
1012 "old": null,
1013 "new": 4,
1014 "text": " println!(\"Hello, {}!\", std::env::args().nth(1).unwrap_or(\"world\".into()));"
1015 },
1016 {
1017 "kind": "context",
1018 "old": 5,
1019 "new": 5,
1020 "text": "}"
1021 }
1022 ]
1023 }
1024 ]
1025 }
1026 ],
1027 "truncated": false
1028 },
1029 "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."
1030 },
1031 "mark_pull_request_ready": {
1032 "request": {
1033 "summary": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\"."
1034 },
1035 "response": {
1036 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
1037 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1038 "number": 14,
1039 "issue": 12,
1040 "title": "Greeting should name the caller",
1041 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
1042 "agent": "claude-code",
1043 "runtime": "external",
1044 "status": "open",
1045 "fork": {
1046 "namespace": "pulls",
1047 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
1048 },
1049 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
1050 "branch": null,
1051 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1052 "merge_base": null,
1053 "merged_by": null,
1054 "merged_at": null,
1055 "superseded_by": null,
1056 "check_status": null,
1057 "files": [
1058 {
1059 "path": "src/main.rs",
1060 "additions": 6,
1061 "deletions": 2
1062 }
1063 ],
1064 "assignees": [],
1065 "reviewers": [],
1066 "author": {
1067 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1068 "username": "syntaqx",
1069 "kind": "user",
1070 "verified": false,
1071 "workspaces": []
1072 },
1073 "created_at": "2026-10-01T18:20:02.117Z",
1074 "updated_at": "2026-10-01T18:33:10.398Z"
1075 }
1076 },
1077 "review_pull_request": {
1078 "request": {
1079 "verdict": "request_changes",
1080 "body": "Trim the name before using it."
1081 },
1082 "response": {
1083 "id": "cmt_01m43sx9f3h7k1n5r9v3z7d1g5",
1084 "kind": "comment",
1085 "author": {
1086 "id": "usr_01kz9d3f7h1k5n9r3v7z1c5g9b",
1087 "username": "ana",
1088 "kind": "user",
1089 "verified": true,
1090 "workspaces": [
1091 {
1092 "slug": "syntaqx",
1093 "role": "member"
1094 }
1095 ]
1096 },
1097 "body": "Trim the name before using it.",
1098 "path": null,
1099 "line": null,
1100 "verdict": "request_changes",
1101 "created_at": "2026-10-01T18:40:05.019Z"
1102 }
1103 },
1104 "merge_pull_request": {
1105 "request": {
1106 "keep_issue_open": false
1107 },
1108 "response": {
1109 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
1110 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1111 "number": 14,
1112 "issue": 12,
1113 "title": "Greeting should name the caller",
1114 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
1115 "agent": "claude-code",
1116 "runtime": "external",
1117 "status": "merged",
1118 "fork": {
1119 "namespace": "pulls",
1120 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
1121 },
1122 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
1123 "branch": null,
1124 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1125 "merge_base": "3a7e9c1b5d2f4a6c8e0b2d4f6a8c0e2b4d6f8a1c",
1126 "merged_by": "syntaqx",
1127 "merged_at": "2026-10-01T18:52:17.093Z",
1128 "superseded_by": null,
1129 "check_status": "passed",
1130 "files": [
1131 {
1132 "path": "src/main.rs",
1133 "additions": 6,
1134 "deletions": 2
1135 }
1136 ],
1137 "assignees": [],
1138 "reviewers": [
1139 "ana"
1140 ],
1141 "author": {
1142 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1143 "username": "syntaqx",
1144 "kind": "user",
1145 "verified": false,
1146 "workspaces": []
1147 },
1148 "created_at": "2026-10-01T18:20:02.117Z",
1149 "updated_at": "2026-10-01T18:52:17.093Z"
1150 },
1151 "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."
1152 },
1153 "close_pull_request": {
1154 "response": {
1155 "id": "pr_01m43smh3vexsr5pmp60qwv0vs",
1156 "repo_id": "rep_01m3m5q6p0e2qaw6mmjahk0qrr",
1157 "number": 14,
1158 "issue": 12,
1159 "title": "Greeting should name the caller",
1160 "body": "Reads a name from the first argument. `hello ana` prints \"Hello, ana!\".",
1161 "agent": "claude-code",
1162 "runtime": "external",
1163 "status": "closed",
1164 "fork": {
1165 "namespace": "pulls",
1166 "name": "pr_01m43smh3vexsr5pmp60qwv0vs"
1167 },
1168 "fork_repo_id": "rep_01m43smh5xd7aw2kq9tv0b4c8e",
1169 "branch": null,
1170 "head_commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1171 "merge_base": null,
1172 "merged_by": null,
1173 "merged_at": null,
1174 "superseded_by": null,
1175 "check_status": null,
1176 "files": [
1177 {
1178 "path": "src/main.rs",
1179 "additions": 6,
1180 "deletions": 2
1181 }
1182 ],
1183 "assignees": [],
1184 "reviewers": [],
1185 "author": {
1186 "id": "usr_01kkntcg1eeb98j62xjm7eh09p",
1187 "username": "syntaqx",
1188 "kind": "user",
1189 "verified": false,
1190 "workspaces": []
1191 },
1192 "created_at": "2026-10-01T18:20:02.117Z",
1193 "updated_at": "2026-10-01T19:02:48.760Z"
1194 }
1195 },
1196 "get_merge_queue": {
1197 "response": {
1198 "enabled": true,
1199 "active": [
1200 {
1201 "id": "qen_01m43rn0qsft1tpap1awkewzbb",
1202 "number": 14,
1203 "title": "Greeting should name the caller",
1204 "agent": "claude-code",
1205 "state": "testing",
1206 "ahead": [],
1207 "base_commit": "3a7e9c1b5d2f4a6c8e0b2d4f6a8c0e2b4d6f8a1c",
1208 "combined_commit": null,
1209 "error": null,
1210 "results": [],
1211 "enqueued_by": "syntaqx",
1212 "created_at": "2026-10-04T15:31:20.441Z",
1213 "finished_at": null
1214 }
1215 ],
1216 "recent": [
1217 {
1218 "id": "qen_01m43khqjmeb5a1magayrnk63z",
1219 "number": 11,
1220 "title": "Fix trailing newline in greeting",
1221 "agent": "g1t-agent",
1222 "state": "landed",
1223 "ahead": [],
1224 "base_commit": "4b1d7e9c2a5f8e3d6c0b9a7e5d3c1b8a6f4e2d0c",
1225 "combined_commit": "c3e8a1f6d4b2097e5c3a1f8d6b4e2c0a9f7d5b3e",
1226 "error": null,
1227 "results": [
1228 {
1229 "command": "cargo test",
1230 "passed": true,
1231 "exit_code": 0,
1232 "output": "test result: ok. 12 passed; 0 failed\n",
1233 "duration_ms": 48211
1234 }
1235 ],
1236 "enqueued_by": "g1t",
1237 "created_at": "2026-10-04T14:02:09.876Z",
1238 "finished_at": "2026-10-04T14:09:55.102Z"
1239 }
1240 ]
1241 },
1242 "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."
1243 },
1244 "message_agent": {
1245 "request": {
1246 "body": "Keep \"world\" as the default when no name is given."
1247 },
1248 "response": {
1249 "id": "msg_01m43tx5egeh4t3f9zcnjenqvz",
1250 "author": "syntaqx",
1251 "body": "Keep \"world\" as the default when no name is given.",
1252 "created_at": "2026-10-01T18:25:00.310Z",
1253 "delivered_at": null,
1254 "kind": "message",
1255 "from_number": null,
1256 "to_number": 14,
1257 "answer": null,
1258 "declined": false
1259 },
1260 "notes": "The response is the message. `delivered_at` is set once the agent has read it."
1261 },
1262 "answer_message": {
1263 "params": {
1264 "id": "msg_01m43t66tde8hs2vpxhh3v8tqw"
1265 },
1266 "request": {
1267 "body": "No. greet() keeps its name; only greet_named() is added."
1268 },
1269 "response": {
1270 "id": "msg_01m43t66tde8hs2vpxhh3v8tqw",
1271 "author": "g1t-agent",
1272 "body": "Are you renaming greet() in src/lib.rs? I need to call it from #16.",
1273 "created_at": "2026-10-01T18:58:12.301Z",
1274 "delivered_at": "2026-10-01T18:58:40.117Z",
1275 "kind": "question",
1276 "from_number": 16,
1277 "to_number": 14,
1278 "answer": "No. greet() keeps its name; only greet_named() is added.",
1279 "declined": false
1280 },
1281 "notes": "The response is the question or handoff that was answered, with `answer` and `declined` filled in."
1282 },
1283 "take_messages": {
1284 "response": [
1285 {
1286 "id": "msg_01m43tx5egeh4t3f9zcnjenqvz",
1287 "author": "syntaqx",
1288 "body": "Keep \"world\" as the default when no name is given.",
1289 "created_at": "2026-10-01T18:25:00.310Z",
1290 "delivered_at": "2026-10-01T18:25:31.007Z",
1291 "kind": "message",
1292 "from_number": null,
1293 "to_number": 14,
1294 "answer": null,
1295 "declined": false
1296 }
1297 ],
1298 "notes": "Only a g1t agent's token can take messages. They come oldest first, and each is marked delivered."
1299 },
1300 "read_session": {
1301 "query": {
1302 "after": 0
1303 },
1304 "response": [
1305 {
1306 "seq": 1,
1307 "kind": "prompt",
1308 "text": "Make the greeting name the caller (issue #12).",
1309 "tool": null,
1310 "commit": null,
1311 "at": "2026-10-01T18:21:00.004Z"
1312 },
1313 {
1314 "seq": 2,
1315 "kind": "tool_call",
1316 "text": "cargo test",
1317 "tool": "bash",
1318 "commit": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1319 "at": "2026-10-01T18:30:12.660Z"
1320 }
1321 ]
1322 },
1323 "record_session": {
1324 "request": {
1325 "entries": [
1326 {
1327 "kind": "message",
1328 "text": "Reading src/main.rs."
1329 },
1330 {
1331 "kind": "tool_call",
1332 "text": "cargo test",
1333 "tool": "bash"
1334 }
1335 ]
1336 },
1337 "response": {
1338 "count": 2
1339 },
1340 "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/)."
1341 },
1342 "list_workflows": {
1343 "response": [
1344 {
1345 "id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
1346 "path": ".g1t/workflows/ci.yml",
1347 "name": "CI",
1348 "events": [
1349 "push",
1350 "pull_request",
1351 "workflow_dispatch"
1352 ],
1353 "state": "active",
1354 "error": null,
1355 "notes": [
1356 {
1357 "severity": "unsupported",
1358 "job": "test",
1359 "message": "`services` containers (such as a database) are not started on g1t yet."
1360 }
1361 ],
1362 "dispatch": {
1363 "debug": {
1364 "description": "Verbose logs",
1365 "type": "boolean",
1366 "default": false
1367 }
1368 },
1369 "last_run": {
1370 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
1371 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
1372 "path": ".g1t/workflows/ci.yml",
1373 "name": "CI",
1374 "title": "Greeting should name the caller",
1375 "number": 12,
1376 "attempt": 1,
1377 "event": "push",
1378 "ref": "refs/heads/main",
1379 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1380 "pull": null,
1381 "status": "completed",
1382 "conclusion": "success",
1383 "error": null,
1384 "actor": "syntaqx",
1385 "created_at": "2026-10-04T15:42:07.318Z",
1386 "started_at": "2026-10-04T15:42:09.020Z",
1387 "finished_at": "2026-10-04T15:44:31.877Z"
1388 }
1389 },
1390 {
1391 "id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9nq",
1392 "path": ".g1t/workflows/nightly.yml",
1393 "name": "Nightly",
1394 "events": [
1395 "schedule"
1396 ],
1397 "state": "disabled",
1398 "error": null,
1399 "notes": [],
1400 "dispatch": null,
1401 "last_run": null
1402 }
1403 ],
1404 "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/)."
1405 },
1406 "list_workflow_runs": {
1407 "query": {
1408 "workflow": "ci.yml",
1409 "branch": "main",
1410 "per_page": 20
1411 },
1412 "response": [
1413 {
1414 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
1415 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
1416 "path": ".g1t/workflows/ci.yml",
1417 "name": "CI",
1418 "title": "Greeting should name the caller",
1419 "number": 12,
1420 "attempt": 1,
1421 "event": "push",
1422 "ref": "refs/heads/main",
1423 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1424 "pull": null,
1425 "status": "completed",
1426 "conclusion": "success",
1427 "error": null,
1428 "actor": "syntaqx",
1429 "created_at": "2026-10-04T15:42:07.318Z",
1430 "started_at": "2026-10-04T15:42:09.020Z",
1431 "finished_at": "2026-10-04T15:44:31.877Z"
1432 }
1433 ],
1434 "notes": "A run's `status` is `queued`, `pending` (waiting for its concurrency group), `in_progress` or `completed`; `conclusion` is set once it completes."
1435 },
1436 "list_runs_of_workflow": {
1437 "params": {
1438 "workflow": "ci.yml"
1439 },
1440 "query": {
1441 "branch": "main",
1442 "per_page": 20
1443 },
1444 "response": [
1445 {
1446 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
1447 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
1448 "path": ".g1t/workflows/ci.yml",
1449 "name": "CI",
1450 "title": "Greeting should name the caller",
1451 "number": 12,
1452 "attempt": 1,
1453 "event": "push",
1454 "ref": "refs/heads/main",
1455 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1456 "pull": null,
1457 "status": "completed",
1458 "conclusion": "success",
1459 "error": null,
1460 "actor": "syntaqx",
1461 "created_at": "2026-10-04T15:42:07.318Z",
1462 "started_at": "2026-10-04T15:42:09.020Z",
1463 "finished_at": "2026-10-04T15:44:31.877Z"
1464 }
1465 ]
1466 },
1467 "get_workflow_run": {
1468 "params": {
1469 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr"
1470 },
1471 "response": {
1472 "run": {
1473 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
1474 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
1475 "path": ".g1t/workflows/ci.yml",
1476 "name": "CI",
1477 "title": "Greeting should name the caller",
1478 "number": 12,
1479 "attempt": 1,
1480 "event": "push",
1481 "ref": "refs/heads/main",
1482 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1483 "pull": null,
1484 "status": "completed",
1485 "conclusion": "failure",
1486 "error": null,
1487 "actor": "syntaqx",
1488 "created_at": "2026-10-04T15:42:07.318Z",
1489 "started_at": "2026-10-04T15:42:09.020Z",
1490 "finished_at": "2026-10-04T15:44:31.877Z"
1491 },
1492 "jobs": [
1493 {
1494 "id": "job_01kpx7b3d0e4f8g2h6j0k4m8ns",
1495 "run_id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
1496 "key": "test",
1497 "name": "test",
1498 "needs": [],
1499 "status": "completed",
1500 "conclusion": "failure",
1501 "steps": [
1502 {
1503 "number": 1,
1504 "name": "Run actions/checkout@v4",
1505 "status": "completed",
1506 "conclusion": "success",
1507 "started_at": "2026-10-04T15:42:10.101Z",
1508 "finished_at": "2026-10-04T15:42:12.433Z"
1509 },
1510 {
1511 "number": 2,
1512 "name": "Run cargo test",
1513 "status": "completed",
1514 "conclusion": "failure",
1515 "started_at": "2026-10-04T15:42:12.440Z",
1516 "finished_at": "2026-10-04T15:44:30.902Z"
1517 }
1518 ],
1519 "annotations": [
1520 {
1521 "level": "error",
1522 "message": "assertion failed: greeting names the caller",
1523 "title": "greet",
1524 "file": "src/main.rs",
1525 "line": 41
1526 }
1527 ],
1528 "reason": null,
1529 "started_at": "2026-10-04T15:42:09.020Z",
1530 "finished_at": "2026-10-04T15:44:31.002Z"
1531 },
1532 {
1533 "id": "job_01kpx7b3d0e4f8g2h6j0k4m8nt",
1534 "run_id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
1535 "key": "deploy",
1536 "name": "deploy",
1537 "needs": [
1538 "test"
1539 ],
1540 "status": "completed",
1541 "conclusion": "skipped",
1542 "steps": [],
1543 "annotations": [],
1544 "reason": "A job it needs did not succeed.",
1545 "started_at": null,
1546 "finished_at": "2026-10-04T15:44:31.877Z"
1547 }
1548 ],
1549 "notes": [
1550 {
1551 "severity": "unsupported",
1552 "job": "test",
1553 "message": "`services` containers (such as a database) are not started on g1t yet."
1554 }
1555 ]
1556 }
1557 },
1558 "get_job_logs": {
1559 "params": {
1560 "job": "job_01kpx7b3d0e4f8g2h6j0k4m8ns"
1561 },
1562 "query": {
1563 "after": 0
1564 },
1565 "response": {
1566 "chunks": [
1567 {
1568 "seq": 1,
1569 "step": 0,
1570 "text": "Preparing the sandbox\n"
1571 },
1572 {
1573 "seq": 2,
1574 "step": 2,
1575 "text": "> cargo test\ntest greet ... FAILED\n"
1576 }
1577 ],
1578 "done": true
1579 },
1580 "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`."
1581 },
1582 "dispatch_workflow": {
1583 "params": {
1584 "workflow": "ci.yml"
1585 },
1586 "request": {
1587 "ref": "main",
1588 "inputs": {
1589 "debug": true
1590 }
1591 },
1592 "response": {
1593 "id": "run_01kpx8d4e7f0g3h6j9k2m5n8pq",
1594 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
1595 "path": ".g1t/workflows/ci.yml",
1596 "name": "CI",
1597 "title": "CI run by syntaqx",
1598 "number": 13,
1599 "attempt": 1,
1600 "event": "workflow_dispatch",
1601 "ref": "refs/heads/main",
1602 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1603 "pull": null,
1604 "status": "queued",
1605 "conclusion": null,
1606 "error": null,
1607 "actor": "syntaqx",
1608 "created_at": "2026-10-04T16:30:00.512Z",
1609 "started_at": null,
1610 "finished_at": null
1611 }
1612 },
1613 "cancel_workflow_run": {
1614 "params": {
1615 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr"
1616 },
1617 "response": {
1618 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
1619 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
1620 "path": ".g1t/workflows/ci.yml",
1621 "name": "CI",
1622 "title": "Greeting should name the caller",
1623 "number": 12,
1624 "attempt": 1,
1625 "event": "push",
1626 "ref": "refs/heads/main",
1627 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1628 "pull": null,
1629 "status": "completed",
1630 "conclusion": "cancelled",
1631 "error": null,
1632 "actor": "syntaqx",
1633 "created_at": "2026-10-04T15:42:07.318Z",
1634 "started_at": "2026-10-04T15:42:09.020Z",
1635 "finished_at": "2026-10-04T15:44:31.877Z"
1636 }
1637 },
1638 "rerun_workflow_run": {
1639 "params": {
1640 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr"
1641 },
1642 "request": {
1643 "failed_only": true
1644 },
1645 "response": {
1646 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
1647 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
1648 "path": ".g1t/workflows/ci.yml",
1649 "name": "CI",
1650 "title": "Greeting should name the caller",
1651 "number": 12,
1652 "attempt": 2,
1653 "event": "push",
1654 "ref": "refs/heads/main",
1655 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1656 "pull": null,
1657 "status": "queued",
1658 "conclusion": null,
1659 "error": null,
1660 "actor": "syntaqx",
1661 "created_at": "2026-10-04T15:42:07.318Z",
1662 "started_at": null,
1663 "finished_at": null
1664 },
1665 "notes": "The run keeps its id; `attempt` goes up by one."
1666 },
1667 "rerun_failed_jobs": {
1668 "params": {
1669 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr"
1670 },
1671 "response": {
1672 "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
1673 "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
1674 "path": ".g1t/workflows/ci.yml",
1675 "name": "CI",
1676 "title": "Greeting should name the caller",
1677 "number": 12,
1678 "attempt": 2,
1679 "event": "push",
1680 "ref": "refs/heads/main",
1681 "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
1682 "pull": null,
1683 "status": "queued",
1684 "conclusion": null,
1685 "error": null,
1686 "actor": "syntaqx",
1687 "created_at": "2026-10-04T15:42:07.318Z",
1688 "started_at": null,
1689 "finished_at": null
1690 }
1691 },
1692 "update_workflow": {
1693 "params": {
1694 "workflow": "nightly.yml"
1695 },
1696 "request": {
1697 "enabled": false
1698 },
1699 "response": {
1700 "id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9nq",
1701 "path": ".g1t/workflows/nightly.yml",
1702 "name": "Nightly",
1703 "events": [
1704 "schedule"
1705 ],
1706 "state": "disabled",
1707 "error": null,
1708 "notes": [],
1709 "dispatch": null,
1710 "last_run": null
1711 }
1712 },
1713 "enable_workflow": {
1714 "params": {
1715 "workflow": "nightly.yml"
1716 },
1717 "response": {
1718 "id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9nq",
1719 "path": ".g1t/workflows/nightly.yml",
1720 "name": "Nightly",
1721 "events": [
1722 "schedule"
1723 ],
1724 "state": "active",
1725 "error": null,
1726 "notes": [],
1727 "dispatch": null,
1728 "last_run": null
1729 }
1730 },
1731 "disable_workflow": {
1732 "params": {
1733 "workflow": "nightly.yml"
1734 },
1735 "response": {
1736 "id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9nq",
1737 "path": ".g1t/workflows/nightly.yml",
1738 "name": "Nightly",
1739 "events": [
1740 "schedule"
1741 ],
1742 "state": "disabled",
1743 "error": null,
1744 "notes": [],
1745 "dispatch": null,
1746 "last_run": null
1747 }
1748 },
1749 "list_actions_secrets": {
1750 "response": [
1751 {
1752 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ab",
1753 "name": "NPM_TOKEN",
1754 "kind": "secret",
1755 "value": null,
1756 "scope": "workspace",
1757 "updated_at": "2026-10-01T09:12:44.020Z",
1758 "available_to": [
1759 "workflows"
1760 ],
1761 "environments": [],
1762 "projects": [],
1763 "note": null,
1764 "updated_by": "syntaqx"
1765 },
1766 {
1767 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ac",
1768 "name": "STRIPE_KEY",
1769 "kind": "secret",
1770 "value": null,
1771 "scope": "project",
1772 "updated_at": "2026-10-04T15:42:07.318Z",
1773 "available_to": [
1774 "workflows",
1775 "deployments"
1776 ],
1777 "environments": [
1778 "production"
1779 ],
1780 "projects": [],
1781 "note": "Rotate in the Stripe dashboard.",
1782 "updated_by": "syntaqx"
1783 }
1784 ],
1785 "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."
1786 },
1787 "list_actions_secrets_for_workspace": {
1788 "params": {
1789 "workspace": "syntaqx"
1790 },
1791 "response": [
1792 {
1793 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ab",
1794 "name": "NPM_TOKEN",
1795 "kind": "secret",
1796 "value": null,
1797 "scope": "workspace",
1798 "updated_at": "2026-10-04T15:42:07.318Z",
1799 "available_to": [
1800 "workflows"
1801 ],
1802 "environments": [],
1803 "projects": [],
1804 "note": null,
1805 "updated_by": "syntaqx"
1806 }
1807 ],
1808 "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."
1809 },
1810 "set_actions_secret": {
1811 "params": {
1812 "setting": "STRIPE_KEY"
1813 },
1814 "request": {
1815 "value": "sk_live_…",
1816 "available_to": [
1817 "workflows",
1818 "deployments"
1819 ],
1820 "environments": [
1821 "production"
1822 ]
1823 },
1824 "response": {
1825 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ac",
1826 "name": "STRIPE_KEY",
1827 "kind": "secret",
1828 "value": null,
1829 "scope": "project",
1830 "updated_at": "2026-10-04T15:42:07.318Z",
1831 "available_to": [
1832 "workflows",
1833 "deployments"
1834 ],
1835 "environments": [
1836 "production"
1837 ],
1838 "projects": [],
1839 "note": null,
1840 "updated_by": "syntaqx"
1841 },
1842 "notes": "Keys are uppercased. See [secrets and variables](/guides/secrets-and-variables/)."
1843 },
1844 "set_actions_secret_for_workspace": {
1845 "params": {
1846 "workspace": "syntaqx",
1847 "setting": "NPM_TOKEN"
1848 },
1849 "request": {
1850 "value": "npm_…",
1851 "projects": [
1852 "hello"
1853 ]
1854 },
1855 "response": {
1856 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ac",
1857 "name": "NPM_TOKEN",
1858 "kind": "secret",
1859 "value": null,
1860 "scope": "workspace",
1861 "updated_at": "2026-10-04T15:42:07.318Z",
1862 "available_to": [
1863 "workflows"
1864 ],
1865 "environments": [],
1866 "projects": [
1867 "hello"
1868 ],
1869 "note": null,
1870 "updated_by": "syntaqx"
1871 }
1872 },
1873 "delete_actions_secret": {
1874 "params": {
1875 "setting": "STRIPE_KEY"
1876 },
1877 "response": true
1878 },
1879 "delete_actions_secret_for_workspace": {
1880 "params": {
1881 "workspace": "syntaqx",
1882 "setting": "NPM_TOKEN"
1883 },
1884 "response": true
1885 },
1886 "list_actions_variables": {
1887 "response": [
1888 {
1889 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ad",
1890 "name": "NODE_VERSION",
1891 "kind": "variable",
1892 "value": "20",
1893 "scope": "project",
1894 "updated_at": "2026-10-04T15:42:07.318Z",
1895 "available_to": [
1896 "workflows",
1897 "deployments"
1898 ],
1899 "environments": [],
1900 "projects": [],
1901 "note": null,
1902 "updated_by": "syntaqx"
1903 }
1904 ],
1905 "notes": "A repository's list includes the workspace's rows that reach it, with `scope` set to `workspace`. Empty `environments` means every environment."
1906 },
1907 "list_actions_variables_for_workspace": {
1908 "params": {
1909 "workspace": "syntaqx"
1910 },
1911 "response": [
1912 {
1913 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ad",
1914 "name": "NODE_VERSION",
1915 "kind": "variable",
1916 "value": "20",
1917 "scope": "workspace",
1918 "updated_at": "2026-10-04T15:42:07.318Z",
1919 "available_to": [
1920 "workflows",
1921 "deployments"
1922 ],
1923 "environments": [],
1924 "projects": [],
1925 "note": null,
1926 "updated_by": "syntaqx"
1927 }
1928 ]
1929 },
1930 "set_actions_variable": {
1931 "request": {
1932 "setting": "NODE_VERSION",
1933 "value": "20"
1934 },
1935 "response": {
1936 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ad",
1937 "name": "NODE_VERSION",
1938 "kind": "variable",
1939 "value": "20",
1940 "scope": "project",
1941 "updated_at": "2026-10-04T15:42:07.318Z",
1942 "available_to": [
1943 "workflows",
1944 "deployments"
1945 ],
1946 "environments": [],
1947 "projects": [],
1948 "note": null,
1949 "updated_by": "syntaqx"
1950 },
1951 "notes": "GitHub's clients send the key as `name`; that is accepted too."
1952 },
1953 "set_actions_variable_for_workspace": {
1954 "params": {
1955 "workspace": "syntaqx"
1956 },
1957 "request": {
1958 "setting": "NODE_VERSION",
1959 "value": "20"
1960 },
1961 "response": {
1962 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ad",
1963 "name": "NODE_VERSION",
1964 "kind": "variable",
1965 "value": "20",
1966 "scope": "workspace",
1967 "updated_at": "2026-10-04T15:42:07.318Z",
1968 "available_to": [
1969 "workflows",
1970 "deployments"
1971 ],
1972 "environments": [],
1973 "projects": [],
1974 "note": null,
1975 "updated_by": "syntaqx"
1976 }
1977 },
1978 "update_actions_variable": {
1979 "params": {
1980 "setting": "NODE_VERSION"
1981 },
1982 "request": {
1983 "value": "22"
1984 },
1985 "response": {
1986 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ad",
1987 "name": "NODE_VERSION",
1988 "kind": "variable",
1989 "value": "22",
1990 "scope": "project",
1991 "updated_at": "2026-10-04T15:42:07.318Z",
1992 "available_to": [
1993 "workflows",
1994 "deployments"
1995 ],
1996 "environments": [],
1997 "projects": [],
1998 "note": null,
1999 "updated_by": "syntaqx"
2000 }
2001 },
2002 "update_actions_variable_for_workspace": {
2003 "params": {
2004 "workspace": "syntaqx",
2005 "setting": "NODE_VERSION"
2006 },
2007 "request": {
2008 "value": "22"
2009 },
2010 "response": {
2011 "id": "set_01kpv9q4r7s0t3v6w9x2y5z8ad",
2012 "name": "NODE_VERSION",
2013 "kind": "variable",
2014 "value": "22",
2015 "scope": "workspace",
2016 "updated_at": "2026-10-04T15:42:07.318Z",
2017 "available_to": [
2018 "workflows",
2019 "deployments"
2020 ],
2021 "environments": [],
2022 "projects": [],
2023 "note": null,
2024 "updated_by": "syntaqx"
2025 }
2026 },
2027 "delete_actions_variable": {
2028 "params": {
2029 "setting": "NODE_VERSION"
2030 },
2031 "response": true
2032 },
2033 "delete_actions_variable_for_workspace": {
2034 "params": {
2035 "workspace": "syntaqx",
2036 "setting": "NODE_VERSION"
2037 },
2038 "response": true
2039 },
2040 "list_webhooks": {
2041 "response": [
2042 {
2043 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2044 "scope": "repo",
2045 "workspace": "syntaqx",
2046 "repo": "syntaqx/hello",
2047 "url": "https://hooks.example.com/g1t",
2048 "events": [
2049 "git.push",
2050 "pull.merged"
2051 ],
2052 "active": true,
2053 "secret_hint": "…9c2e",
2054 "created_by": "syntaqx",
2055 "created_at": "2026-10-04T15:42:07.318Z",
2056 "last_status": "delivered",
2057 "last_delivered_at": "2026-10-04T15:42:07.611Z"
2058 }
2059 ]
2060 },
2061 "list_webhooks_for_workspace": {
2062 "params": {
2063 "workspace": "syntaqx"
2064 },
2065 "response": [
2066 {
2067 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2068 "scope": "workspace",
2069 "workspace": "syntaqx",
2070 "repo": null,
2071 "url": "https://hooks.example.com/g1t",
2072 "events": [
2073 "git.push",
2074 "pull.merged"
2075 ],
2076 "active": true,
2077 "secret_hint": "…9c2e",
2078 "created_by": "syntaqx",
2079 "created_at": "2026-10-04T15:42:07.318Z",
2080 "last_status": "delivered",
2081 "last_delivered_at": "2026-10-04T15:42:07.611Z"
2082 }
2083 ]
2084 },
2085 "create_webhook": {
2086 "request": {
2087 "url": "https://hooks.example.com/g1t",
2088 "events": [
2089 "git.push",
2090 "pull.merged"
2091 ]
2092 },
2093 "response": {
2094 "hook": {
2095 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2096 "scope": "repo",
2097 "workspace": "syntaqx",
2098 "repo": "syntaqx/hello",
2099 "url": "https://hooks.example.com/g1t",
2100 "events": [
2101 "git.push",
2102 "pull.merged"
2103 ],
2104 "active": true,
2105 "secret_hint": "…9c2e",
2106 "created_by": "syntaqx",
2107 "created_at": "2026-10-04T15:42:07.318Z",
2108 "last_status": "delivered",
2109 "last_delivered_at": "2026-10-04T15:42:07.611Z"
2110 },
2111 "secret": "whsec_…"
2112 },
2113 "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/)."
2114 },
2115 "create_webhook_for_workspace": {
2116 "params": {
2117 "workspace": "syntaqx"
2118 },
2119 "request": {
2120 "url": "https://hooks.example.com/g1t"
2121 },
2122 "response": {
2123 "hook": {
2124 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2125 "scope": "workspace",
2126 "workspace": "syntaqx",
2127 "repo": null,
2128 "url": "https://hooks.example.com/g1t",
2129 "events": [
2130 "*"
2131 ],
2132 "active": true,
2133 "secret_hint": "…9c2e",
2134 "created_by": "syntaqx",
2135 "created_at": "2026-10-04T15:42:07.318Z",
2136 "last_status": "delivered",
2137 "last_delivered_at": "2026-10-04T15:42:07.611Z"
2138 },
2139 "secret": "whsec_…"
2140 },
2141 "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/)."
2142 },
2143 "update_webhook": {
2144 "params": {
2145 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
2146 },
2147 "request": {
2148 "active": false
2149 },
2150 "response": {
2151 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2152 "scope": "repo",
2153 "workspace": "syntaqx",
2154 "repo": "syntaqx/hello",
2155 "url": "https://hooks.example.com/g1t",
2156 "events": [
2157 "git.push",
2158 "pull.merged"
2159 ],
2160 "active": false,
2161 "secret_hint": "…9c2e",
2162 "created_by": "syntaqx",
2163 "created_at": "2026-10-04T15:42:07.318Z",
2164 "last_status": "delivered",
2165 "last_delivered_at": "2026-10-04T15:42:07.611Z"
2166 }
2167 },
2168 "update_webhook_for_workspace": {
2169 "params": {
2170 "workspace": "syntaqx",
2171 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
2172 },
2173 "request": {
2174 "active": false
2175 },
2176 "response": {
2177 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2178 "scope": "workspace",
2179 "workspace": "syntaqx",
2180 "repo": null,
2181 "url": "https://hooks.example.com/g1t",
2182 "events": [
2183 "git.push",
2184 "pull.merged"
2185 ],
2186 "active": false,
2187 "secret_hint": "…9c2e",
2188 "created_by": "syntaqx",
2189 "created_at": "2026-10-04T15:42:07.318Z",
2190 "last_status": "delivered",
2191 "last_delivered_at": "2026-10-04T15:42:07.611Z"
2192 }
2193 },
2194 "delete_webhook": {
2195 "params": {
2196 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
2197 },
2198 "response": true
2199 },
2200 "delete_webhook_for_workspace": {
2201 "params": {
2202 "workspace": "syntaqx",
2203 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
2204 },
2205 "response": true
2206 },
2207 "ping_webhook": {
2208 "params": {
2209 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
2210 },
2211 "response": {
2212 "id": "dlv_01kpx5p9v2j7k3m8n4p5q6r7st",
2213 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2214 "event_id": "",
2215 "event": "ping",
2216 "status": "delivered",
2217 "attempts": 1,
2218 "response_status": 200,
2219 "response_body": "ok",
2220 "error": null,
2221 "duration_ms": 184,
2222 "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\"}",
2223 "created_at": "2026-10-04T16:01:12.440Z",
2224 "delivered_at": "2026-10-04T16:01:12.631Z",
2225 "next_attempt_at": null
2226 },
2227 "notes": "`payload` is the JSON that was sent, as a string."
2228 },
2229 "ping_webhook_for_workspace": {
2230 "params": {
2231 "workspace": "syntaqx",
2232 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
2233 },
2234 "response": {
2235 "id": "dlv_01kpx5p9v2j7k3m8n4p5q6r7st",
2236 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2237 "event_id": "",
2238 "event": "ping",
2239 "status": "delivered",
2240 "attempts": 1,
2241 "response_status": 200,
2242 "response_body": "ok",
2243 "error": null,
2244 "duration_ms": 184,
2245 "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\"}",
2246 "created_at": "2026-10-04T16:01:12.440Z",
2247 "delivered_at": "2026-10-04T16:01:12.631Z",
2248 "next_attempt_at": null
2249 }
2250 },
2251 "list_webhook_deliveries": {
2252 "params": {
2253 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
2254 },
2255 "response": [
2256 {
2257 "id": "dlv_01kpx6a2b3c4d5e6f7g8h9j0kz",
2258 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2259 "event_id": "",
2260 "event": "ping",
2261 "status": "pending",
2262 "attempts": 1,
2263 "response_status": 503,
2264 "response_body": "Service Unavailable",
2265 "error": null,
2266 "duration_ms": 212,
2267 "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\"}",
2268 "created_at": "2026-10-04T16:20:03.100Z",
2269 "delivered_at": null,
2270 "next_attempt_at": "2026-10-04T16:21:03.312Z"
2271 },
2272 {
2273 "id": "dlv_01kpx5p9v2j7k3m8n4p5q6r7st",
2274 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2275 "event_id": "",
2276 "event": "ping",
2277 "status": "delivered",
2278 "attempts": 1,
2279 "response_status": 200,
2280 "response_body": "ok",
2281 "error": null,
2282 "duration_ms": 184,
2283 "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\"}",
2284 "created_at": "2026-10-04T16:01:12.440Z",
2285 "delivered_at": "2026-10-04T16:01:12.631Z",
2286 "next_attempt_at": null
2287 }
2288 ],
2289 "notes": "Returns at most 50, newest first. `status` is `pending`, `delivered` or `failed`; `next_attempt_at` is set while it is pending."
2290 },
2291 "list_webhook_deliveries_for_workspace": {
2292 "params": {
2293 "workspace": "syntaqx",
2294 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd"
2295 },
2296 "response": [
2297 {
2298 "id": "dlv_01kpx6a2b3c4d5e6f7g8h9j0kz",
2299 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2300 "event_id": "",
2301 "event": "ping",
2302 "status": "pending",
2303 "attempts": 1,
2304 "response_status": 503,
2305 "response_body": "Service Unavailable",
2306 "error": null,
2307 "duration_ms": 212,
2308 "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\"}",
2309 "created_at": "2026-10-04T16:20:03.100Z",
2310 "delivered_at": null,
2311 "next_attempt_at": "2026-10-04T16:21:03.312Z"
2312 },
2313 {
2314 "id": "dlv_01kpx5p9v2j7k3m8n4p5q6r7st",
2315 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2316 "event_id": "",
2317 "event": "ping",
2318 "status": "delivered",
2319 "attempts": 1,
2320 "response_status": 200,
2321 "response_body": "ok",
2322 "error": null,
2323 "duration_ms": 184,
2324 "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\"}",
2325 "created_at": "2026-10-04T16:01:12.440Z",
2326 "delivered_at": "2026-10-04T16:01:12.631Z",
2327 "next_attempt_at": null
2328 }
2329 ]
2330 },
2331 "redeliver_webhook": {
2332 "params": {
2333 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2334 "delivery": "dlv_01kpx6a2b3c4d5e6f7g8h9j0kz"
2335 },
2336 "response": {
2337 "id": "dlv_01kpx6c8d1e2f3g4h5j6k7m8np",
2338 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2339 "event_id": "",
2340 "event": "ping",
2341 "status": "delivered",
2342 "attempts": 1,
2343 "response_status": 200,
2344 "response_body": "ok",
2345 "error": null,
2346 "duration_ms": 171,
2347 "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\"}",
2348 "created_at": "2026-10-04T16:25:40.007Z",
2349 "delivered_at": "2026-10-04T16:25:40.178Z",
2350 "next_attempt_at": null
2351 },
2352 "notes": "The response is the new delivery."
2353 },
2354 "redeliver_webhook_for_workspace": {
2355 "params": {
2356 "workspace": "syntaqx",
2357 "id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2358 "delivery": "dlv_01kpx6a2b3c4d5e6f7g8h9j0kz"
2359 },
2360 "response": {
2361 "id": "dlv_01kpx6c8d1e2f3g4h5j6k7m8np",
2362 "hook_id": "hk_01kpx5p9s4h0t1w6x8y2a3b4cd",
2363 "event_id": "",
2364 "event": "ping",
2365 "status": "delivered",
2366 "attempts": 1,
2367 "response_status": 200,
2368 "response_body": "ok",
2369 "error": null,
2370 "duration_ms": 171,
2371 "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\"}",
2372 "created_at": "2026-10-04T16:25:40.007Z",
2373 "delivered_at": "2026-10-04T16:25:40.178Z",
2374 "next_attempt_at": null
2375 }
2376 },
2377 "list_integrations": {
2378 "params": {
2379 "workspace": "syntaqx"
2380 },
2381 "response": [
2382 {
2383 "id": "con_01kpx3m7q2f8r9t4v6w0y1z2ab",
2384 "workspace": "syntaqx",
2385 "provider": "anthropic",
2386 "kind": "models",
2387 "name": "Anthropic",
2388 "config": {
2389 "assign": false,
2390 "write_back": true
2391 },
2392 "secret_hint": "…3f9a",
2393 "webhook_url": null,
2394 "created_by": "syntaqx",
2395 "created_at": "2026-10-04T15:42:07.318Z",
2396 "last_used_at": "2026-10-04T15:42:08.102Z",
2397 "last_error": null,
2398 "models": [
2399 "claude-haiku-4-5",
2400 "claude-sonnet-4-5"
2401 ]
2402 },
2403 {
2404 "id": "con_01kpx4n8r3g9s0v5w7x1z2a3bc",
2405 "workspace": "syntaqx",
2406 "provider": "jira",
2407 "kind": "tracker",
2408 "name": "Jira",
2409 "config": {
2410 "assign": false,
2411 "write_back": true,
2412 "site": "https://acme.atlassian.net",
2413 "email": "syntaqx@example.com",
2414 "keys": [
2415 "TECH"
2416 ]
2417 },
2418 "secret_hint": "…x7Qe",
2419 "webhook_url": null,
2420 "created_by": "syntaqx",
2421 "created_at": "2026-10-04T15:42:07.318Z",
2422 "last_used_at": null,
2423 "last_error": null,
2424 "models": []
2425 }
2426 ],
2427 "notes": "`kind` is `models`, `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."
2428 },
2429 "connect_integration": {
2430 "params": {
2431 "workspace": "syntaqx"
2432 },
2433 "request": {
2434 "provider": "webhook",
2435 "config": {
2436 "repo": "syntaqx/hello",
2437 "label": "bug"
2438 }
2439 },
2440 "response": {
2441 "connection": {
2442 "id": "con_01kpx4n8r3g9s0v5w7x1z2a3bd",
2443 "workspace": "syntaqx",
2444 "provider": "webhook",
2445 "kind": "alerts",
2446 "name": "Webhook",
2447 "config": {
2448 "repo": "syntaqx/hello",
2449 "label": "bug",
2450 "assign": false,
2451 "write_back": true
2452 },
2453 "secret_hint": null,
2454 "webhook_url": "https://api.g1t.sh/hooks/con_01kpx4n8r3g9s0v5w7x1z2a3bd",
2455 "created_by": "syntaqx",
2456 "created_at": "2026-10-04T15:42:07.318Z",
2457 "last_used_at": null,
2458 "last_error": null,
2459 "models": []
2460 },
2461 "signing_secret": "g1ts_9f2c4a7e1b0d3c6f8a2e5b7d9c1f4a6e8b0d2c4f6a8e1b3d"
2462 },
2463 "notes": "`signing_secret` is set only when g1t made it, for `datadog` and `webhook`, and is shown only this once. A model provider is tested as it is connected. See [integrations](/guides/integrations/) and [model providers](/guides/models/)."
2464 },
2465 "disconnect_integration": {
2466 "params": {
2467 "workspace": "syntaqx",
2468 "id": "con_01kpx3m7q2f8r9t4v6w0y1z2ab"
2469 },
2470 "response": true
2471 },
2472 "test_integration": {
2473 "params": {
2474 "workspace": "syntaqx",
2475 "id": "con_01kpx3m7q2f8r9t4v6w0y1z2ab"
2476 },
2477 "response": {
2478 "ok": true,
2479 "message": "Anthropic accepted the key and offers 9 models."
2480 },
2481 "notes": "Credentials that do not work still answer `200`, with `ok` false and `message` saying what went wrong."
2482 },
2483 "get_model_routes": {
2484 "params": {
2485 "workspace": "syntaqx"
2486 },
2487 "response": [
2488 {
2489 "task": "default",
2490 "connection_id": "con_01kpx3m7q2f8r9t4v6w0y1z2ab",
2491 "model": "claude-sonnet-4-5"
2492 },
2493 {
2494 "task": "review",
2495 "connection_id": null,
2496 "model": null
2497 }
2498 ]
2499 },
2500 "set_model_routes": {
2501 "params": {
2502 "workspace": "syntaqx"
2503 },
2504 "request": {
2505 "routes": [
2506 {
2507 "task": "default",
2508 "connection_id": "con_01kpx3m7q2f8r9t4v6w0y1z2ab",
2509 "model": "claude-sonnet-4-5"
2510 },
2511 {
2512 "task": "review",
2513 "connection_id": null
2514 }
2515 ]
2516 },
2517 "response": [
2518 {
2519 "task": "default",
2520 "connection_id": "con_01kpx3m7q2f8r9t4v6w0y1z2ab",
2521 "model": "claude-sonnet-4-5"
2522 },
2523 {
2524 "task": "review",
2525 "connection_id": null,
2526 "model": null
2527 }
2528 ],
2529 "notes": "The response is the routes as saved, ordered by task."
2530 },
2531 "get_context": {
2532 "query": {
2533 "reference": "TECH-1234"
2534 },
2535 "response": {
2536 "provider": "jira",
2537 "key": "TECH-1234",
2538 "title": "Checkout fails for EU cards",
2539 "url": "https://acme.atlassian.net/browse/TECH-1234",
2540 "status": "In Progress",
2541 "body": "Customers with 3DS cards see a 500 at /pay.",
2542 "fetched_at": "2026-10-04T15:42:07.318Z"
2543 }
2544 },
2545 "import_issue": {
2546 "request": {
2547 "reference": "TECH-1234"
2548 },
2549 "response": {
2550 "number": 42,
2551 "item": {
2552 "provider": "jira",
2553 "key": "TECH-1234",
2554 "title": "Checkout fails for EU cards",
2555 "url": "https://acme.atlassian.net/browse/TECH-1234",
2556 "status": "In Progress",
2557 "body": "Customers with 3DS cards see a 500 at /pay.",
2558 "fetched_at": "2026-10-04T15:42:07.318Z"
2559 },
2560 "created": true
2561 },
2562 "notes": "`created` is false when the ticket was imported before; `number` is then that issue."
2563 },
2564 "remember": {
2565 "request": {
2566 "text": "The tests need TZ=UTC or the date tests fail.",
2567 "scope": "project",
2568 "kind": "gotcha",
2569 "from_number": 14
2570 },
2571 "response": {
2572 "id": "mem_01m43v8q2w3e4r5t6y7u8i9o0p",
2573 "scope": "project",
2574 "workspace": "syntaqx",
2575 "repo": {
2576 "namespace": "syntaqx",
2577 "name": "hello"
2578 },
2579 "text": "The tests need TZ=UTC or the date tests fail.",
2580 "kind": "gotcha",
2581 "source": {
2582 "kind": "run",
2583 "run_id": "arn_01m43v2c1p9k8d7e6f5a4b3c2d",
2584 "repo": {
2585 "namespace": "syntaqx",
2586 "name": "hello"
2587 },
2588 "number": 14
2589 },
2590 "created_by": "g1t-agent",
2591 "pinned": false,
2592 "created_at": "2026-10-01T18:40:12.000Z",
2593 "updated_at": "2026-10-01T18:40:12.000Z",
2594 "last_used_at": null
2595 },
2596 "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."
2597 },
2598 "recall": {
2599 "query": {
2600 "q": "pnpm"
2601 },
2602 "response": {
2603 "project": [],
2604 "workspace": [
2605 {
2606 "id": "mem_01m43t0a1s2d3f4g5h6j7k8l9z",
2607 "scope": "workspace",
2608 "workspace": "syntaqx",
2609 "repo": null,
2610 "text": "We use pnpm everywhere, never npm or yarn.",
2611 "kind": "convention",
2612 "source": {
2613 "kind": "person",
2614 "run_id": null,
2615 "repo": null,
2616 "number": null
2617 },
2618 "created_by": "syntaqx",
2619 "pinned": true,
2620 "created_at": "2026-10-01T18:40:12.000Z",
2621 "updated_at": "2026-10-01T18:40:12.000Z",
2622 "last_used_at": null
2623 }
2624 ]
2625 },
2626 "notes": "Members of the workspace only. Each memory returned is marked used, which keeps it near the front of what agents are given."
2627 },
2628 "search_context": {
2629 "params": {
2630 "workspace": "acme"
2631 },
2632 "query": {
2633 "q": "how do we run the web tests",
2634 "project": "web"
2635 },
2636 "response": {
2637 "query": "how do we run the web tests",
2638 "mode": "semantic",
2639 "hits": [
2640 {
2641 "kind": "memory",
2642 "id": "mem_01m4a0c2b7k3f9d1e5g8h2j6k4",
2643 "title": "Gotcha",
2644 "snippet": "The date tests fail unless TZ=UTC.",
2645 "project": "web",
2646 "url": "/acme/web/memory",
2647 "score": 0.82,
2648 "source": "AGENTS.md",
2649 "by": "g1t",
2650 "updated_at": "2026-10-04T21:10:02.000Z"
2651 },
2652 {
2653 "kind": "doc",
2654 "id": "ent_5f0c2a9e41d7b3c86a1e2f40:2",
2655 "title": "Web (README.md)",
2656 "snippet": "## Testing Run npm test. The end-to-end tests need the api running locally…",
2657 "project": "web",
2658 "url": "/acme/web/blob/main/README.md",
2659 "score": 0.77,
2660 "source": "README.md",
2661 "by": null,
2662 "updated_at": "2026-10-04T20:58:41.000Z"
2663 },
2664 {
2665 "kind": "project",
2666 "id": "ent_9b1d6f0a2c3e4b5d6e7f8a9b",
2667 "title": "web",
2668 "snippet": "The storefront. Written in TypeScript. Packages: @acme/web. Uses api. Owned by ana.",
2669 "project": "web",
2670 "url": "/acme/web",
2671 "score": 0.71,
2672 "source": "catalog",
2673 "by": null,
2674 "updated_at": "2026-10-04T20:58:41.000Z"
2675 }
2676 ]
2677 },
2678 "notes": "Give `workspace`, or `repo` as `owner/name` for its workspace. `kinds` narrows to some of `project`, `app`, `api`, `package`, `language`, `owner`, `environment`, `integration`, `doc`, `memory`, `issue` and `pull`; in a URL, comma-separated. `mode` is `text` when the search index could not answer and words were matched instead. Memory, and anything from a private project, is returned only to members of the workspace and its agents. A g1t agent searches its own workspace only."
2679 },
2680 "get_entity": {
2681 "params": {
2682 "workspace": "acme",
2683 "kind": "project",
2684 "id": "web"
2685 },
2686 "response": {
2687 "entity": {
2688 "id": "ent_9b1d6f0a2c3e4b5d6e7f8a9b",
2689 "workspace": "acme",
2690 "kind": "project",
2691 "key": "web",
2692 "name": "web",
2693 "summary": "The storefront. Written in TypeScript. Packages: @acme/web. Uses api. Owned by ana.",
2694 "project": "web",
2695 "private": true,
2696 "data": {
2697 "repo": "acme/web",
2698 "root_dir": "",
2699 "default_branch": "main",
2700 "languages": [
2701 "TypeScript"
2702 ],
2703 "owners": [
2704 "ana"
2705 ],
2706 "tests": true,
2707 "test_commands": [
2708 "npm test"
2709 ],
2710 "production_url": "https://web--acme.g1t.page"
2711 },
2712 "source": "scan",
2713 "ref": "/acme/web",
2714 "updated_at": "2026-10-04T20:58:41.000Z"
2715 },
2716 "relations": [
2717 {
2718 "kind": "depends_on",
2719 "direction": "out",
2720 "entity": {
2721 "id": "ent_0a7c3e5b9d1f2a4c6e8b0d2f",
2722 "workspace": "acme",
2723 "kind": "project",
2724 "key": "api",
2725 "name": "api",
2726 "summary": "The public API. Written in Rust.",
2727 "project": "api",
2728 "private": true,
2729 "data": {},
2730 "source": "scan",
2731 "ref": "/acme/api",
2732 "updated_at": "2026-10-04T20:57:12.000Z"
2733 }
2734 },
2735 {
2736 "kind": "owned_by",
2737 "direction": "out",
2738 "entity": {
2739 "id": "ent_3c5e7a9b1d2f4a6c8e0b2d4f",
2740 "workspace": "acme",
2741 "kind": "owner",
2742 "key": "ana",
2743 "name": "ana",
2744 "summary": null,
2745 "project": null,
2746 "private": false,
2747 "data": {},
2748 "source": "scan",
2749 "ref": "/u/ana",
2750 "updated_at": "2026-10-04T20:58:41.000Z"
2751 }
2752 }
2753 ]
2754 },
2755 "notes": "`id` is the entry's id, or its key: a project's or app's slug, `npm:<name>` (or `cargo:`, `go:`, `pypi:`) for a package, a username for an owner, `<project>/production` for an environment. `data` depends on the kind: a package's version and dependencies, an API's routes, an app's production address."
2756 }
2757}