Skip to content

OpenAPI spec has changed upstream #89

Description

@github-actions

The spec at https://api.ionq.co/v0.4/api-docs has diverged from the vendored openapi.json. Fetch the new spec and regenerate the client.

Diff (sorted, pretty-printed JSON)
--- vendored
+++ upstream
@@ -258,6 +258,44 @@
         ],
         "type": "object"
       },
+      "AggregationArtifactDescriptor": {
+        "additionalProperties": false,
+        "properties": {
+          "format": {
+            "$ref": "#/components/schemas/ResultFormat.ProbabilitiesV2"
+          },
+          "id": {
+            "type": "string"
+          },
+          "media_type": {
+            "type": "string"
+          }
+        },
+        "required": [
+          "id",
+          "format",
+          "media_type"
+        ],
+        "type": "object"
+      },
+      "AggregationsOutput": {
+        "additionalProperties": false,
+        "properties": {
+          "average": {
+            "$ref": "#/components/schemas/AggregationArtifactDescriptor"
+          },
+          "dnl": {
+            "$ref": "#/components/schemas/AggregationArtifactDescriptor"
+          },
+          "majority": {
+            "$ref": "#/components/schemas/AggregationArtifactDescriptor"
+          },
+          "voting": {
+            "$ref": "#/components/schemas/AggregationArtifactDescriptor"
+          }
+        },
+        "type": "object"
+      },
       "Ansatz": {
         "properties": {
           "data": {
@@ -278,6 +316,29 @@
         ],
         "type": "string"
       },
+      "ArtifactDescriptor": {
+        "additionalProperties": false,
+        "description": "Artifact descriptor. Pass `id` to `GET /v0.4/jobs/{id}/artifacts/{artifactId}` to\ndownload the artifact payload, then validate it against the JSON Schema for its format.",
+        "properties": {
+          "format": {
+            "description": "Format identifier. Fetch the payload schema from the matching schema-catalog endpoint.",
+            "type": "string"
+          },
+          "id": {
+            "description": "Artifact ID used to download via the artifacts endpoint.",
+            "type": "string"
+          },
+          "media_type": {
+            "type": "string"
+          }
+        },
+        "required": [
+          "id",
+          "format",
+          "media_type"
+        ],
+        "type": "object"
+      },
       "Backend": {
         "description": "A backend that you can target your program to run on.",
         "properties": {
@@ -494,6 +555,7 @@
                 "$ref": "#/components/schemas/JsonObject"
               }
             ],
+            "description": "Job-type-specific results. The concrete shape is determined by the job type — see the per-job-type tabs above.",
             "nullable": true
           },
           "session_id": {
@@ -517,7 +579,8 @@
             "nullable": true
           },
           "stats": {
-            "$ref": "#/components/schemas/JsonObject"
+            "$ref": "#/components/schemas/JsonObject",
+            "description": "Job-type-specific execution statistics. The concrete shape is determined by the job type (see the per-job-type tabs above)."
           },
           "status": {
             "$ref": "#/components/schemas/JobStatus"
@@ -669,6 +732,28 @@
         },
         "type": "object"
       },
+      "ChildCircuitProbabilities": {
+        "additionalProperties": {
+          "format": "double",
+          "type": "number"
+        },
+        "description": "Decimal qubit state → probability map for a single child circuit.",
+        "properties": {},
+        "type": "object"
+      },
+      "CircuitFormatsCatalog": {
+        "additionalProperties": false,
+        "description": "Catalog of supported circuit artifact formats. The same identifiers are used\nboth when a circuit is submitted (the job `input` payload) and when the\ncompiler emits a transpiled circuit (the job `output.compilation.compiled_circuits`\nmap) — both are circuits, just at different stages of the pipeline.\n\nEach property below documents one format's payload structure. Used by the\nCircuit formats docs page.",
+        "properties": {
+          "ionq.native.v1": {
+            "$ref": "#/components/schemas/IonqNativeV1"
+          }
+        },
+        "required": [
+          "ionq.native.v1"
+        ],
+        "type": "object"
+      },
       "CircuitJobCompilationSettings": {
         "additionalProperties": false,
         "properties": {
@@ -717,12 +802,18 @@
             "properties": {
               "compilation": {
                 "properties": {
+                  "gate_basis": {
+                    "type": "string"
+                  },
                   "opt": {
                     "format": "double",
                     "type": "number"
                   },
                   "precision": {
                     "type": "string"
+                  },
+                  "service_version": {
+                    "type": "string"
                   }
                 },
                 "type": "object"
@@ -731,6 +822,35 @@
                 "description": "To turn on debiasing, you must request at least 500 shots",
                 "properties": {
                   "debiasing": {
+                    "anyOf": [
+                      {
+                        "properties": {
+                          "phi_chi_twirling": {
+                            "properties": {
+                              "p2q": {
+                                "format": "double",
+                                "type": "number"
+                              },
+                              "t1q": {
+                                "format": "double",
+                                "type": "number"
+                              },
+                              "t2q": {
+                                "format": "double",
+                                "type": "number"
+                              }
+                            },
+                            "type": "object"
+                          }
+                        },
+                        "type": "object"
+                      },
+                      {
+                        "type": "boolean"
+                      }
+                    ]
+                  },
+                  "symmetry_verification": {
                     "type": "boolean"
                   }
                 },
@@ -762,45 +882,64 @@
         ],
         "type": "object"
       },
-      "CircuitJobResult": {
+      "CircuitJobErrorMitigationSettings": {
         "additionalProperties": false,
         "properties": {
-          "histogram": {
-            "properties": {
-              "url": {
-                "type": "string"
+          "debiasing": {
+            "anyOf": [
+              {
+                "properties": {
+                  "phi_chi_twirling": {
+                    "properties": {
+                      "p2q": {
+                        "format": "double",
+                        "type": "number"
+                      },
+                      "t1q": {
+                        "format": "double",
+                        "type": "number"
+                      },
+                      "t2q": {
+                        "format": "double",
+                        "type": "number"
+                      }
+                    },
+                    "type": "object"
+                  }
+                },
+                "type": "object"
+              },
+              {
+                "type": "boolean"
               }
-            },
-            "required": [
-              "url"
-            ],
-            "type": "object"
+            ]
           },
-          "probabilities": {
-            "properties": {
-              "url": {
-                "type": "string"
-              }
-            },
-            "required": [
-              "url"
-            ],
-            "type": "object"
+          "symmetry_verification": {
+            "type": "boolean"
+          }
+        },
+        "type": "object"
+      },
+      "CircuitJobOutput": {
+        "additionalProperties": {},
+        "properties": {
+          "compilation": {
+            "$ref": "#/components/schemas/CompilationOutput"
           },
-          "shots": {
-            "properties": {
-              "url": {
-                "type": "string"
-              }
-            },
-            "required": [
-              "url"
-            ],
-            "type": "object"
+          "error_mitigation": {
+            "$ref": "#/components/schemas/ErrorMitigationOutput"
           }
         },
         "type": "object"
       },
+      "CircuitJobResults": {
+        "additionalProperties": {
+          "$ref": "#/components/schemas/ArtifactDescriptor"
+        },
+        "description": "Results object for circuit-family jobs (single-circuit, qasm, qasm3, qir, qaoa-circuit).\nEach entry is keyed by an artifact format identifier. See the [Results formats](/api-reference/v0.4/schemas/results-formats) page for the catalog of valid identifiers.",
+        "properties": {},
+        "type": "object"
+      },
       "CircuitJobSettings": {
         "additionalProperties": false,
         "properties": {
@@ -808,38 +947,7 @@
             "$ref": "#/components/schemas/CircuitJobCompilationSettings"
           },
           "error_mitigation": {
-            "properties": {
-              "debiasing": {
-                "anyOf": [
-                  {
-                    "properties": {
-                      "phi_chi_twirling": {
-                        "properties": {
-                          "p2q": {
-                            "format": "double",
-                            "type": "number"
-                          },
-                          "t1q": {
-                            "format": "double",
-                            "type": "number"
-                          },
-                          "t2q": {
-                            "format": "double",
-                            "type": "number"
-                          }
-                        },
-                        "type": "object"
-                      }
-                    },
-                    "type": "object"
-                  },
-                  {
-                    "type": "boolean"
-                  }
-                ]
-              }
-            },
-            "type": "object"
+            "$ref": "#/components/schemas/CircuitJobErrorMitigationSettings"
           }
         },
         "type": "object"
@@ -876,6 +984,23 @@
       "CloneJobPayload": {
         "$ref": "#/components/schemas/Partial_BaseChildJobCreationPayload_"
       },
+      "CompilationOutput": {
+        "additionalProperties": false,
+        "properties": {
+          "compiled_circuits": {
+            "$ref": "#/components/schemas/CompiledCircuits"
+          }
+        },
+        "type": "object"
+      },
+      "CompiledCircuits": {
+        "additionalProperties": {
+          "$ref": "#/components/schemas/ArtifactDescriptor"
+        },
+        "description": "Map of compiled-circuit artifacts keyed by circuit format identifier\n(e.g. `ionq.native.v1`). See the [Circuit formats](/api-reference/v0.4/schemas/circuit-formats) page for the catalog of valid identifiers.",
+        "properties": {},
+        "type": "object"
+      },
       "CreateSessionRequest": {
         "additionalProperties": false,
         "properties": {
@@ -914,6 +1039,66 @@
         ],
         "type": "object"
       },
+      "ErrorMitigationOutput": {
+        "additionalProperties": false,
+        "properties": {
+          "aggregations": {
+            "$ref": "#/components/schemas/AggregationsOutput"
+          },
+          "debiasing": {
+            "anyOf": [
+              {
+                "properties": {
+                  "phi_chi_twirling": {
+                    "properties": {
+                      "p2q": {
+                        "format": "double",
+                        "type": "number"
+                      },
+                      "t1q": {
+                        "format": "double",
+                        "type": "number"
+                      },
+                      "t2q": {
+                        "format": "double",
+                        "type": "number"
+                      }
+                    },
+                    "type": "object"
+                  },
+                  "variants": {
+                    "items": {
+                      "$ref": "#/components/schemas/VariantInfo"
+                    },
+                    "type": "array"
+                  }
+                },
+                "type": "object"
+              },
+              {
+                "enum": [
+                  false
+                ],
+                "type": "boolean"
+              }
+            ]
+          },
+          "symmetry_verification": {
+            "nullable": true,
+            "properties": {
+              "applied": {
+                "type": "boolean"
+              },
+              "num_allowed_states": {
+                "format": "double",
+                "type": "number"
+              }
+            },
+            "type": "object"
+          }
+        },
+        "type": "object"
+      },
       "Failure": {
         "additionalProperties": false,
         "properties": {
@@ -952,6 +1137,47 @@
         ],
         "type": "object"
       },
+      "FormatSchemaDocument": {
+        "additionalProperties": {},
+        "description": "JSON Schema document returned by the schemas endpoint. The exact contents\nvary by format identifier (see the Results / Circuit formats catalog\npages for each format's structure).",
+        "properties": {
+          "$id": {
+            "description": "Format identifier (matches the path parameter).",
+            "type": "string"
+          },
+          "$schema": {
+            "description": "JSON Schema draft URI.",
+            "type": "string"
+          },
+          "description": {
+            "description": "Human-readable description of the format.",
+            "type": "string"
+          },
+          "type": {
+            "description": "Top-level JSON type of the format payload.",
+            "type": "string"
+          }
+        },
+        "required": [
+          "$schema",
+          "$id",
+          "type"
+        ],
+        "type": "object"
+      },
+      "Formats": {
+        "enum": [
+          "ionq.result.probabilities.json.v1",
+          "ionq.result.probabilities.json.v2",
+          "ionq.result.histogram.json.v1",
+          "ionq.result.histogram.json.v2",
+          "ionq.result.shots.json.v1",
+          "ionq.result.shots.json.v2",
+          "ionq.result.probabilities-aggregate.json.v1",
+          "ionq.native.v1"
+        ],
+        "type": "string"
+      },
       "Gate_NativeGate": {
         "additionalProperties": false,
         "properties": {
@@ -1069,160 +1295,6 @@
         ],
         "type": "object"
       },
-      "GetCircuitJobResponse": {
-        "additionalProperties": false,
-        "properties": {
-          "backend": {
-            "type": "string"
-          },
-          "child_job_ids": {
-            "items": {
-              "type": "string"
-            },
-            "nullable": true,
-            "type": "array"
-          },
-          "completed_at": {
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/IsoTimestamp"
-              }
-            ],
-            "nullable": true
-          },
-          "cost_model": {
-            "$ref": "#/components/schemas/ApiCostModel",
-            "description": "The billing model used for this job."
-          },
-          "dry_run": {
-            "type": "boolean"
-          },
-          "execution_duration_ms": {
-            "description": "How long the job actually took to run on the QPU. Null if the job hasn't run yet.",
-            "format": "int32",
-            "nullable": true,
-            "type": "integer"
-          },
-          "failure": {
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Failure"
-              }
-            ],
-            "nullable": true
-          },
-          "id": {
-            "type": "string"
-          },
-          "metadata": {
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/JobMetadata"
-              }
-            ],
-            "nullable": true
-          },
-          "name": {
-            "nullable": true,
-            "type": "string"
-          },
-          "noise": {
-            "$ref": "#/components/schemas/Noise",
-            "description": "Only present in the response when `backend` is simulator."
-          },
-          "output": {
-            "$ref": "#/components/schemas/JsonObject"
-          },
-          "parent_job_id": {
-            "nullable": true,
-            "type": "string"
-          },
-          "predicted_execution_duration_ms": {
-            "format": "int32",
-            "nullable": true,
-            "type": "integer"
-          },
-          "predicted_wait_time_ms": {
-            "format": "int32",
-            "nullable": true,
-            "type": "integer"
-          },
-          "project_id": {
-            "nullable": true,
-            "type": "string"
-          },
-          "results": {
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CircuitJobResult"
-              }
-            ],
-            "nullable": true
-          },
-          "session_id": {
-            "nullable": true,
-            "type": "string"
-          },
-          "settings": {
-            "$ref": "#/components/schemas/CircuitJobSettings"
-          },
-          "shots": {
-            "description": "`shots` are not included with ideal simulator backend.",
-            "format": "int32",
-            "type": "integer"
-          },
-          "started_at": {
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/IsoTimestamp"
-              }
-            ],
-            "nullable": true
-          },
-          "stats": {
-            "$ref": "#/components/schemas/CircuitJobStats"
-          },
-          "status": {
-            "$ref": "#/components/schemas/JobStatus"
-          },
-          "submitted_at": {
-            "$ref": "#/components/schemas/IsoTimestamp"
-          },
-          "submitter_id": {
-            "description": "The id of the user who submitted the job.",
-            "type": "string"
-          },
-          "type": {
-            "type": "string"
-          }
-        },
-        "required": [
-          "id",
-          "status",
-          "type",
-          "backend",
-          "dry_run",
-          "submitter_id",
-          "project_id",
-          "parent_job_id",
-          "session_id",
-          "metadata",
-          "name",
-          "submitted_at",
-          "started_at",
-          "completed_at",
-          "predicted_wait_time_ms",
-          "predicted_execution_duration_ms",
-          "execution_duration_ms",
-          "failure",
-          "output",
-          "settings",
-          "stats",
-          "results",
-          "child_job_ids"
-        ],
-        "type": "object"
-      },
       "GetJobCostResponse": {
         "additionalProperties": false,
         "properties": {
@@ -1397,7 +1469,25 @@
         "type": "object"
       },
       "GetJobResponse": {
-        "$ref": "#/components/schemas/GetCircuitJobResponse"
+        "anyOf": [
+          {
+            "$ref": "#/components/schemas/SingleCircuitJob",
+            "title": "Single Circuit"
+          },
+          {
+            "$ref": "#/components/schemas/MultiCircuitJob",
+            "title": "Multi Circuit"
+          },
+          {
+            "$ref": "#/components/schemas/QaoaJob",
+            "title": "QAOA Function"
+          },
+          {
+            "$ref": "#/components/schemas/QuantumFunctionJob",
+            "title": "Quantum Function"
+          }
+        ],
+        "description": "Discriminated union over the four job-type families. Tabs in the docs are\ngrouped by these families (matching the `JobCreationPayload` grouping on the\nCreate Job endpoint)."
       },
       "GetJobsQueryParams": {
         "additionalProperties": false,
@@ -1440,6 +1530,7 @@
         "additionalProperties": false,
         "properties": {
           "jobs": {
+            "description": "List of jobs. Common fields are shown below; each entry's full per-type shape (with `settings`, `stats`, `output`, `results` documented by job type) is available on the [Get Job](/api-reference/v0.4/jobs/get-job) page.",
             "items": {
               "$ref": "#/components/schemas/BaseJob"
             },
@@ -1608,6 +1699,194 @@
         ],
         "type": "object"
       },
+      "IonqNativeV1": {
+        "additionalProperties": false,
+        "description": "`ionq.native.v1` — Compiled circuit expressed in IonQ native gates.\nSame shape as the native-gate circuit accepted on job creation:\na qubit count plus an ordered list of native gate operations.",
+        "example": {
+          "circuit": [
+            {
+              "gate": "ms",
+              "phases": [
+                0,
+                0.25
+              ],
+              "targets": [
+                0,
+                1
+              ]
+            },
+            {
+              "gate": "gpi2",
+              "phase": 0.75,
+              "target": 0
+            }
+          ],
+          "qubits": 2
+        },
+        "properties": {
+          "circuit": {
+            "description": "Ordered list of native gate operations.",
+            "items": {
+              "$ref": "#/components/schemas/Gate_NativeGate"
+            },
+            "type": "array"
+          },
+          "qubits": {
+            "description": "Number of qubits used by the compiled circuit.",
+            "format": "int32",
+            "minimum": 1,
+            "type": "integer"
+          }
+        },
+        "required": [
+          "qubits",
+          "circuit"
+        ],
+        "type": "object"
+      },
+      "IonqResultHistogramJsonV1": {
+        "additionalProperties": {
+          "format": "double",
+          "type": "number"
+        },
+        "description": "`ionq.result.histogram.json.v1` — Legacy shot count histogram.\nFlat object keyed by decimal qubit state integer strings, values are shot counts.",
+        "example": {
+          "0": 500,
+          "1": 250,
+          "3": 250
+        },
+        "properties": {},
+        "type": "object"
+      },
+      "IonqResultHistogramJsonV2": {
+        "additionalProperties": false,
+        "description": "`ionq.result.histogram.json.v2` — Register-nested shot count histogram.\nEach register maps zero-padded bitstrings to shot counts.",
+        "example": {
+          "histogram": {
+            "registers": {
+              "output_all": {
+                "00": 500,
+                "11": 500
+              }
+            }
+          }
+        },
+        "properties": {
+          "histogram": {
+            "$ref": "#/components/schemas/RegisteredHistogram",
+            "description": "Container holding per-register histogram counts."
+          }
+        },
+        "required": [
+          "histogram"
+        ],
+        "type": "object"
+      },
+      "IonqResultProbabilitiesAggregateJsonV1": {
+        "additionalProperties": {
+          "$ref": "#/components/schemas/ChildCircuitProbabilities"
+        },
+        "description": "`ionq.result.probabilities-aggregate.json.v1` — Aggregated probability\ndistributions across all circuits in an `ionq.multi-circuit.v1` job. Top-level\nkeys are child job UUIDs; each value is that child's probability distribution.",
+        "example": {
+          "06a2099c-f845-7208-8000-8111ee2dccbc": {
+            "2": 1
+          },
+          "06a2099c-f846-7d32-8000-5726853513db": {
+            "0": 0.5,
+            "1": 0.5
+          }
+        },
+        "properties": {},
+        "type": "object"
+      },
+      "IonqResultProbabilitiesJsonV1": {
+        "additionalProperties": {
+          "format": "double",
+          "type": "number"
+        },
+        "description": "`ionq.result.probabilities.json.v1` — Legacy probability distribution.\nFlat object keyed by decimal qubit state integer strings, values are\nprobabilities summing to 1.",
+        "example": {
+          "0": 0.5,
+          "1": 0.25,
+          "3": 0.25
+        },
+        "properties": {},
+        "type": "object"
+      },
+      "IonqResultProbabilitiesJsonV2": {
+        "additionalProperties": false,
+        "description": "`ionq.result.probabilities.json.v2` — Register-nested probability distribution.\nEach register maps zero-padded bitstrings to probabilities summing to 1 within\nthe register.",
+        "example": {
+          "probabilities": {
+            "registers": {
+              "output_all": {
+                "00": 0.5,
+                "11": 0.5
+              }
+            }
+          }
+        },
+        "properties": {
+          "probabilities": {
+            "$ref": "#/components/schemas/RegisteredProbabilities",
+            "description": "Container holding per-register probability distributions."
+          }
+        },
+        "required": [
+          "probabilities"
+        ],
+        "type": "object"
+      },
+      "IonqResultShotsJsonV1": {
+        "description": "`ionq.result.shots.json.v1` — Legacy per-shot outcomes.\nArray of decimal qubit state integer strings, one element per shot.",
+        "example": [
+          "2",
+          "1",
+          "3",
+          "0"
+        ],
+        "items": {
+          "type": "string"
+        },
+        "type": "array"
+      },
+      "IonqResultShotsJsonV2": {
+        "additionalProperties": false,
+        "description": "`ionq.result.shots.json.v2` — Per-shot register outcomes. Each shot\nrecords measured bit arrays for every named register.",
+        "example": {
+          "shots": [
+            {
+              "registers": {
+                "output_all": [
+                  1,
+                  0
+                ]
+              }
+            },
+            {
+              "registers": {
+                "output_all": [
+                  0,
+                  1
+                ]
+              }
+            }
+          ]
+        },
+        "properties": {
+          "shots": {
+            "description": "Array of shot results, one object per shot.",
+            "items": {
+              "$ref": "#/components/schemas/ShotResult"
+            },
+            "type": "array"
+          }
+        },
+        "required": [
+          "shots"
+        ],
+        "type": "object"
+      },
       "IsoTimestamp": {
         "type": "string"
       },
@@ -1883,6 +2162,167 @@
         ],
         "type": "object"
       },
+      "MultiCircuitJob": {
+        "additionalProperties": false,
+        "description": "Response shape for `ionq.multi-circuit.v1` jobs. Aggregates results across\nthe per-circuit child jobs into a single results object keyed by format\nidentifier (typically `ionq.result.probabilities-aggregate.json.v1`).",
+        "properties": {
+          "backend": {
+            "type": "string"
+          },
+          "child_job_ids": {
+            "items": {
+              "type": "string"
+            },
+            "nullable": true,
+            "type": "array"
+          },
+          "completed_at": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/IsoTimestamp"
+              }
+            ],
+            "nullable": true
+          },
+          "cost_model": {
+            "$ref": "#/components/schemas/ApiCostModel",
+            "description": "The billing model used for this job."
+          },
+          "dry_run": {
+            "type": "boolean"
+          },
+          "execution_duration_ms": {
+            "description": "How long the job actually took to run on the QPU. Null if the job hasn't run yet.",
+            "format": "int32",
+            "nullable": true,
+            "type": "integer"
+          },
+          "failure": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Failure"
+              }
+            ],
+            "nullable": true
+          },
+          "id": {
+            "type": "string"
+          },
+          "metadata": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/JobMetadata"
+              }
+            ],
+            "nullable": true
+          },
+          "name": {
+            "nullable": true,
+            "type": "string"
+          },
+          "noise": {
+            "$ref": "#/components/schemas/Noise",
+            "description": "Only present in the response when `backend` is simulator."
+          },
+          "output": {
+            "$ref": "#/components/schemas/CircuitJobOutput"
+          },
+          "parent_job_id": {
+            "nullable": true,
+            "type": "string"
+          },
+          "predicted_execution_duration_ms": {
+            "format": "int32",
+            "nullable": true,
+            "type": "integer"
+          },
+          "predicted_wait_time_ms": {
+            "format": "int32",
+            "nullable": true,
+            "type": "integer"
+          },
+          "project_id": {
+            "nullable": true,
+            "type": "string"
+          },
+          "results": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/MultiCircuitJobResults"
+              }
+            ],
+            "description": "Aggregated result artifacts across all child circuits, keyed by format identifier. Typically contains `ionq.result.probabilities-aggregate.json.v1` — the merged probability distribution over every child circuit. Each entry is an `ArtifactDescriptor` — pass its `id` to the [artifact endpoint](/api-reference/v0.4/jobs/get-job-artifact) to download the payload. See [Results formats](/api-reference/v0.4/schemas/results-formats) for the catalog of valid identifiers and their payload schemas.",
+            "nullable": true
+          },
+          "session_id": {
+            "nullable": true,
+            "type": "string"
+          },
+          "settings": {
+            "$ref": "#/components/schemas/CircuitJobSettings"
+          },
+          "shots": {
+            "description": "`shots` are not included with ideal simulator backend.",
+            "format": "int32",
+            "type": "integer"
+          },
+          "started_at": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/IsoTimestamp"
+              }
+            ],
+            "nullable": true
+          },
+          "stats": {
+            "$ref": "#/components/schemas/CircuitJobStats",
+            "description": "Job-type-specific execution statistics. The concrete shape is determined by the job type (see the per-job-type tabs above)."
+          },
+          "status": {
+            "$ref": "#/components/schemas/JobStatus"
+          },
+          "submitted_at": {
+            "$ref": "#/components/schemas/IsoTimestamp"
+          },
+          "submitter_id": {
+            "description": "The id of the user who submitted the job.",
+            "type": "string"
+          },
+          "type": {
+            "enum": [
+              "ionq.multi-circuit.v1"
+            ],
+            "nullable": false,
+            "type": "string"
+          }
+        },
+        "required": [
+          "id",
+          "status",
+          "type",
+          "backend",
+          "dry_run",
+          "submitter_id",
+          "project_id",
+          "parent_job_id",
+          "session_id",
+          "metadata",
+          "name",
+          "submitted_at",
+          "started_at",
+          "completed_at",
+          "predicted_wait_time_ms",
+          "predicted_execution_duration_ms",
+          "execution_duration_ms",
+          "failure",
+          "output",
+          "settings",
+          "stats",
+          "results",
+          "child_job_ids"
+        ],
+        "type": "object"
+      },
       "MultiCircuitJobCreationPayload": {
         "additionalProperties": false,
         "description": "Submit multiple circuits in a single job. Each circuit inherits the parent `input.gateset` unless overridden by `circuits[].gateset`.\n",
@@ -1961,12 +2401,18 @@
             "properties": {
               "compilation": {
                 "properties": {
+                  "gate_basis": {
+                    "type": "string"
+                  },
                   "opt": {
                     "format": "double",
                     "type": "number"
                   },
                   "precision": {
                     "type": "string"
+                  },
+                  "service_version": {
+                    "type": "string"
                   }
                 },
                 "type": "object"
@@ -1975,6 +2421,35 @@
                 "description": "To turn on debiasing, you must request at least 500 shots",
                 "properties": {
                   "debiasing": {
+                    "anyOf": [
+                      {
+                        "properties": {
+                          "phi_chi_twirling": {
+                            "properties": {
+                              "p2q": {
+                                "format": "double",
+                                "type": "number"
+                              },
+                              "t1q": {
+                                "format": "double",
+                                "type": "number"
+                              },
+                              "t2q": {
+                                "format": "double",
+                                "type": "number"
+                              }
+                            },
+                            "type": "object"
+                          }
+                        },
+                        "type": "object"
+                      },
+                      {
+                        "type": "boolean"
+                      }
+                    ]
+                  },
+                  "symmetry_verification": {
                     "type": "boolean"
                   }
                 },
@@ -2007,6 +2482,14 @@
         "title": "JSON Multi Circuit Job",
         "type": "object"
       },
+      "MultiCircuitJobResults": {
+        "additionalProperties": {
+          "$ref": "#/components/schemas/ArtifactDescriptor"
+        },
+        "description": "Results object for ionq.multi-circuit.v1 jobs. Keyed by artifact format identifier;\n`ionq.result.probabilities-aggregate.json.v1` is the aggregated distribution across all circuits. See the [Results formats](/api-reference/v0.4/schemas/results-formats) page for the full list of valid identifiers.",
+        "properties": {},
+        "type": "object"
+      },
       "NativeCircuit": {
         "additionalProperties": false,
         "properties": {
@@ -2146,12 +2629,18 @@
             "properties": {
               "compilation": {
                 "properties": {
+                  "gate_basis": {
+                    "type": "string"
+                  },
                   "opt": {
                     "format": "double",
                     "type": "number"
                   },
                   "precision": {
                     "type": "string"
+                  },
+                  "service_version": {
+                    "type": "string"
                   }
                 },
                 "type": "object"
@@ -2159,6 +2648,35 @@
               "error_mitigation": {
                 "properties": {
                   "debiasing": {
+                    "anyOf": [
+                      {
+                        "type": "boolean"
+                      },
+                      {
+                        "properties": {
+                          "phi_chi_twirling": {
+                            "properties": {
+                              "p2q": {
+                                "format": "double",
+                                "type": "number"
+                              },
+                              "t1q": {
+                                "format": "double",
+                                "type": "number"
+                              },
+                              "t2q": {
+                                "format": "double",
+                                "type": "number"
+                              }
+                            },
+                            "type": "object"
+                          }
+                        },
+                        "type": "object"
+                      }
+                    ]
+                  },
+                  "symmetry_verification": {
                     "type": "boolean"
                   }
                 },
@@ -2213,6 +2731,207 @@
         ],
         "type": "object"
       },
+      "QaoaJob": {
+        "additionalProperties": false,
+        "description": "Response shape for `qctrl.qaoa.v1` jobs — the parent QAOA optimization job.\nIts per-iteration child jobs (`qctrl.qaoa-circuit.v1`) are surfaced via\n`child_job_ids` and are documented under the Single Circuit tab.",
+        "properties": {
+          "backend": {
+            "type": "string"
+          },
+          "child_job_ids": {
+            "items": {
+              "type": "string"
+            },
+            "nullable": true,
+            "type": "array"
+          },
+          "completed_at": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/IsoTimestamp"
+              }
+            ],
+            "nullable": true
+          },
+          "cost_model": {
+            "$ref": "#/components/schemas/ApiCostModel",
+            "description": "The billing model used for this job."
+          },
+          "dry_run": {
+            "type": "boolean"
+          },
+          "execution_duration_ms": {
+            "description": "How long the job actually took to run on the QPU. Null if the job hasn't run yet.",
+            "format": "int32",
+            "nullable": true,
+            "type": "integer"
+          },
+          "failure": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Failure"
+              }
+            ],
+            "nullable": true
+          },
+          "id": {
+            "type": "string"
+          },
+          "metadata": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/JobMetadata"
+              }
+            ],
+            "nullable": true
+          },
+          "name": {
+            "nullable": true,
+            "type": "string"
+          },
+          "noise": {
+            "$ref": "#/components/schemas/Noise",
+            "description": "Only present in the response when `backend` is simulator."
+          },
+          "output": {
+            "$ref": "#/components/schemas/QuantumFunctionJobOutput"
+          },
+          "parent_job_id": {
+            "nullable": true,
+            "type": "string"
+          },
+          "predicted_execution_duration_ms": {
+            "format": "int32",
+            "nullable": true,
+            "type": "integer"
+          },
+          "predicted_wait_time_ms": {
+            "format": "int32",
+            "nullable": true,
+            "type": "integer"
+          },
+          "project_id": {
+            "nullable": true,
+            "type": "string"
+          },
+          "results": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/QaoaJobResults"
+              }
+            ],
+            "description": "Optimization results emitted by the QAOA solver — the best objective value, the corresponding bitstring, and the current state of the optimization loop. Populated once `processing_status` is `complete`.",
+            "nullable": true
+          },
+          "session_id": {
+            "nullable": true,
+            "type": "string"
+          },
+          "settings": {
+            "$ref": "#/components/schemas/QuantumFunctionJobSettings"
+          },
+          "shots": {
+            "description": "`shots` are not included with ideal simulator backend.",
+            "format": "int32",
+            "type": "integer"
+          },
+          "started_at": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/IsoTimestamp"
+              }
+            ],
+            "nullable": true
+          },
+          "stats": {
+            "$ref": "#/components/schemas/QuantumFunctionJobStats",
+            "description": "Job-type-specific execution statistics. The concrete shape is determined by the job type (see the per-job-type tabs above)."
+          },
+          "status": {
+            "$ref": "#/components/schemas/JobStatus"
+          },
+          "submitted_at": {
+            "$ref": "#/components/schemas/IsoTimestamp"
+          },
+          "submitter_id": {
+            "description": "The id of the user who submitted the job.",
+            "type": "string"
+          },
+          "type": {
+            "enum": [
+              "qctrl.qaoa.v1"
+            ],
+            "nullable": false,
+            "type": "string"
+          }
+        },
+        "required": [
+          "id",
+          "status",
+          "type",
+          "backend",
+          "dry_run",
+          "submitter_id",
+          "project_id",
+          "parent_job_id",
+          "session_id",
+          "metadata",
+          "name",
+          "submitted_at",
+          "started_at",
+          "completed_at",
+          "predicted_wait_time_ms",
+          "predicted_execution_duration_ms",
+          "execution_duration_ms",
+          "failure",
+          "output",
+          "settings",
+          "stats",
+          "results",
+          "child_job_ids"
+        ],
+        "type": "object"
+      },
+      "QaoaJobResults": {
+        "additionalProperties": false,
+        "description": "Results for `qctrl.qaoa.v1` jobs.",
+        "properties": {
+          "qaoa_results": {
+            "$ref": "#/components/schemas/QaoaResults"
+          }
+        },
+        "type": "object"
+      },
+      "QaoaResults": {
+        "additionalProperties": false,
+        "description": "Optimization output recorded by a Q-CTRL QAOA job after it completes.",
+        "properties": {
+          "optimal_bitstring": {
+            "description": "Bitstring corresponding to the best solution found.",
+            "type": "string"
+          },
+          "optimal_cost": {
+            "description": "Best objective value the optimizer reached.",
+            "format": "double",
+            "type": "number"
+          },
+          "processing_status": {
+            "description": "Current state of the optimization loop.",
+            "enum": [
+              "running",
+              "complete",
+              "max_iteration"
+            ],
+            "type": "string"
+          }
+        },
+        "required": [
+          "optimal_cost",
+          "optimal_bitstring",
+          "processing_status"
+        ],
+        "type": "object"
+      },
       "QctrlQaoaJobCreationPayload": {
         "description": "Submit a combinatorial optimization job to solve a maxcut problem using Q-CTRL's QAOA Solver. See our QAOA Job guide for more information.\n",
         "properties": {
@@ -2446,6 +3165,167 @@
           }
         ]
       },
+      "QuantumFunctionJob": {
+        "additionalProperties": false,
+        "description": "Response shape for `quantum-function` jobs. Settings, stats, output, and\nresults are all free-form — the concrete shape is defined by the function\nimplementation and varies by provider.",
+        "properties": {
+          "backend": {
+            "type": "string"
+          },
+          "child_job_ids": {
+            "items": {
+              "type": "string"
+            },
+            "nullable": true,
+            "type": "array"
+          },
+          "completed_at": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/IsoTimestamp"
+              }
+            ],
+            "nullable": true
+          },
+          "cost_model": {
+            "$ref": "#/components/schemas/ApiCostModel",
+            "description": "The billing model used for this job."
+          },
+          "dry_run": {
+            "type": "boolean"
+          },
+          "execution_duration_ms": {
+            "description": "How long the job actually took to run on the QPU. Null if the job hasn't run yet.",
+            "format": "int32",
+            "nullable": true,
+            "type": "integer"
+          },
+          "failure": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Failure"
+              }
+            ],
+            "nullable": true
+          },
+          "id": {
+            "type": "string"
+          },
+          "metadata": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/JobMetadata"
+              }
+            ],
+            "nullable": true
+          },
+          "name": {
+            "nullable": true,
+            "type": "string"
+          },
+          "noise": {
+            "$ref": "#/components/schemas/Noise",
+            "description": "Only present in the response when `backend` is simulator."
+          },
+          "output": {
+            "$ref": "#/components/schemas/QuantumFunctionJobOutput"
+          },
+          "parent_job_id": {
+            "nullable": true,
+            "type": "string"
+          },
+          "predicted_execution_duration_ms": {
+            "format": "int32",
+            "nullable": true,
+            "type": "integer"
+          },
+          "predicted_wait_time_ms": {
+            "format": "int32",
+            "nullable": true,
+            "type": "integer"
+          },
+          "project_id": {
+            "nullable": true,
+            "type": "string"
+          },
+          "results": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/QuantumFunctionJobResults"
+              }
+            ],
+            "description": "Scalar metrics emitted by the quantum-function implementation — the expectation value of the observable (`value`) and its estimated variance across the shot ensemble (`variance`).",
+            "nullable": true
+          },
+          "session_id": {
+            "nullable": true,
+            "type": "string"
+          },
+          "settings": {
+            "$ref": "#/components/schemas/QuantumFunctionJobSettings"
+          },
+          "shots": {
+            "description": "`shots` are not included with ideal simulator backend.",
+            "format": "int32",
+            "type": "integer"
+          },
+          "started_at": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/IsoTimestamp"
+              }
+            ],
+            "nullable": true
+          },
+          "stats": {
+            "$ref": "#/components/schemas/QuantumFunctionJobStats",
+            "description": "Job-type-specific execution statistics. The concrete shape is determined by the job type (see the per-job-type tabs above)."
+          },
+          "status": {
+            "$ref": "#/components/schemas/JobStatus"
+          },
+          "submitted_at": {
+            "$ref": "#/components/schemas/IsoTimestamp"
+          },
+          "submitter_id": {
+            "description": "The id of the user who submitted the job.",
+            "type": "string"
+          },
+          "type": {
+            "enum": [
+              "quantum-function"
+            ],
+            "nullable": false,
+            "type": "string"
+          }
+        },
+        "required": [
+          "id",
+          "status",
+          "type",
+          "backend",
+          "dry_run",
+          "submitter_id",
+          "project_id",
+          "parent_job_id",
+          "session_id",
+          "metadata",
+          "name",
+          "submitted_at",
+          "started_at",
+          "completed_at",
+          "predicted_wait_time_ms",
+          "predicted_execution_duration_ms",
+          "execution_duration_ms",
+          "failure",
+          "output",
+          "settings",
+          "stats",
+          "results",
+          "child_job_ids"
+        ],
+        "type": "object"
+      },
       "QuantumFunctionJobCreationPayload": {
         "properties": {
           "backend": {
@@ -2499,6 +3379,107 @@
         ],
         "type": "object"
       },
+      "QuantumFunctionJobOutput": {
+        "additionalProperties": {},
+        "description": "Output for quantum-function jobs. Shape varies by function implementation.",
+        "properties": {},
+        "type": "object"
+      },
+      "QuantumFunctionJobResults": {
+        "additionalProperties": false,
+        "description": "Results for quantum-function jobs — a scalar estimator output (`value`) and\nits estimated variance across the shot ensemble (`variance`).",
+        "properties": {
+          "value": {
+            "description": "Scalar value produced by the function — typically the expectation value of the observable.",
+            "format": "double",
+            "type": "number"
+          },
+          "variance": {
+            "description": "Estimated variance of `value` across the shot ensemble.",
+            "format": "double",
+            "type": "number"
+          }
+        },
+        "type": "object"
+      },
+      "QuantumFunctionJobSettings": {
+        "additionalProperties": false,
+        "description": "Settings for quantum-function-family jobs (`qctrl.qaoa.v1`, `quantum-function`).\nUnlike circuit jobs, no compilation settings are accepted — only error mitigation.",
+        "properties": {
+          "error_mitigation": {
+            "$ref": "#/components/schemas/CircuitJobErrorMitigationSettings"
+          }
+        },
+        "type": "object"
+      },
+      "QuantumFunctionJobStats": {
+        "additionalProperties": {},
+        "description": "Stats for quantum-function jobs. Shape varies by function implementation.",
+        "properties": {},
+        "type": "object"
+      },
+      "RegisterHistogram": {
+        "additionalProperties": {
+          "format": "double",
+          "type": "number"
+        },
+        "description": "Bitstring → shot count map for one register.",
+        "properties": {},
+        "type": "object"
+      },
+      "RegisterProbabilities": {
+        "additionalProperties": {
+          "format": "double",
+          "type": "number"
+        },
+        "description": "Bitstring → probability map for one register. Range 0–1; probabilities\nsum to 1 within the register.",
+        "properties": {},
+        "type": "object"
+      },
+      "RegisterShot": {
+        "description": "Bit array measured on a register for one shot. Each element is 0 or 1.",
+        "items": {
+          "format": "double",
+          "type": "number"
+        },
+        "type": "array"
+      },
+      "RegisteredHistogram": {
+        "additionalProperties": false,
+        "description": "Per-register histogram counts.",
+        "properties": {
+          "registers": {
+            "additionalProperties": {
+              "$ref": "#/components/schemas/RegisterHistogram"
+            },
+            "description": "Per-register shot counts, keyed by register name.",
+            "properties": {},
+            "type": "object"
+          }
+        },
+        "required": [
+          "registers"
+        ],
+        "type": "object"
+      },
+      "RegisteredProbabilities": {
+        "additionalProperties": false,
+        "description": "Per-register probability distributions, keyed by register name.",
+        "properties": {
+          "registers": {
+            "additionalProperties": {
+              "$ref": "#/components/schemas/RegisterProbabilities"
+            },
+            "description": "Bitstring → probability map for this register.",
+            "properties": {},
+            "type": "object"
+          }
+        },
+        "required": [
+          "registers"
+        ],
+        "type": "object"
+      },
       "Registers": {
         "additionalProperties": {
           "items": {
@@ -2528,6 +3509,65 @@
         },
         "type": "object"
       },
+      "ResultFormat": {
+        "enum": [
+          "ionq.result.shots.json.v1",
+          "ionq.result.shots.json.v2",
+          "ionq.result.histogram.json.v1",
+          "ionq.result.histogram.json.v2",
+          "ionq.result.probabilities.json.v1",
+          "ionq.result.probabilities.json.v2",
+          "ionq.result.probabilities-aggregate.json.v1",
+          "ionq.native.v1",
+          "ionq.qasm3.v1",
+          "ionq.ore.v1",
+          "ionq.mir.v1"
+        ],
+        "type": "string"
+      },
+      "ResultFormat.ProbabilitiesV2": {
+        "enum": [
+          "ionq.result.probabilities.json.v2"
+        ],
+        "type": "string"
+      },
+      "ResultFormatsCatalog": {
+        "additionalProperties": false,
+        "description": "Catalog of supported result artifact formats. Each property below documents\none format's payload structure. Used by the Results formats docs page.",
+        "properties": {
+          "ionq.result.histogram.json.v1": {
+            "$ref": "#/components/schemas/IonqResultHistogramJsonV1"
+          },
+          "ionq.result.histogram.json.v2": {
+            "$ref": "#/components/schemas/IonqResultHistogramJsonV2"
+          },
+          "ionq.result.probabilities-aggregate.json.v1": {
+            "$ref": "#/components/schemas/IonqResultProbabilitiesAggregateJsonV1"
+          },
+          "ionq.result.probabilities.json.v1": {
+            "$ref": "#/components/schemas/IonqResultProbabilitiesJsonV1"
+          },
+          "ionq.result.probabilities.json.v2": {
+            "$ref": "#/components/schemas/IonqResultProbabilitiesJsonV2"
+          },
+          "ionq.result.shots.json.v1": {
+            "$ref": "#/components/schemas/IonqResultShotsJsonV1"
+          },
+          "ionq.result.shots.json.v2": {
+            "$ref": "#/components/schemas/IonqResultShotsJsonV2"
+          }
+        },
+        "required": [
+          "ionq.result.probabilities.json.v1",
+          "ionq.result.probabilities.json.v2",
+          "ionq.result.histogram.json.v1",
+          "ionq.result.histogram.json.v2",
+          "ionq.result.shots.json.v1",
+          "ionq.result.shots.json.v2",
+          "ionq.result.probabilities-aggregate.json.v1"
+        ],
+        "type": "object"
+      },
       "Session": {
         "additionalProperties": false,
         "properties": {
@@ -2675,6 +3715,190 @@
         ],
         "type": "object"
       },
+      "ShotRegisters": {
+        "additionalProperties": {
+          "$ref": "#/components/schemas/RegisterShot"
+        },
+        "description": "Per-register bit arrays for one shot, keyed by register name.",
+        "properties": {},
+        "type": "object"
+      },
+      "ShotResult": {
+        "additionalProperties": false,
+        "description": "Result of a single shot — measured bit arrays for every named register.",
+        "properties": {
+          "registers": {
+            "$ref": "#/components/schemas/ShotRegisters",
+            "description": "Per-register bit arrays for this shot."
+          }
+        },
+        "required": [
+          "registers"
+        ],
+        "type": "object"
+      },
+      "SingleCircuitJob": {
+        "additionalProperties": false,
+        "description": "Response shape for single-circuit jobs.\n\nCovers every circuit-shaped job type: user-submitted (`ionq.circuit.v1`,\n`ionq.qir.v1`) and the per-circuit child jobs spawned by a QAOA run\n(`qctrl.qaoa-circuit.v1`). They all share the same settings, stats, output,\nand results shape — only the `type` discriminator differs.",
+        "properties": {
+          "backend": {
+            "type": "string"
+          },
+          "child_job_ids": {
+            "items": {
+              "type": "string"
+            },
+            "nullable": true,
+            "type": "array"
+          },
+          "completed_at": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/IsoTimestamp"
+              }
+            ],
+            "nullable": true
+          },
+          "cost_model": {
+            "$ref": "#/components/schemas/ApiCostModel",
+            "description": "The billing model used for this job."
+          },
+          "dry_run": {
+            "type": "boolean"
+          },
+          "execution_duration_ms": {
+            "description": "How long the job actually took to run on the QPU. Null if the job hasn't run yet.",
+            "format": "int32",
+            "nullable": true,
+            "type": "integer"
+          },
+          "failure": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Failure"
+              }
+            ],
+            "nullable": true
+          },
+          "id": {
+            "type": "string"
+          },
+          "metadata": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/JobMetadata"
+              }
+            ],
+            "nullable": true
+          },
+          "name": {
+            "nullable": true,
+            "type": "string"
+          },
+          "noise": {
+            "$ref": "#/components/schemas/Noise",
+            "description": "Only present in the response when `backend` is simulator."
+          },
+          "output": {
+            "$ref": "#/components/schemas/CircuitJobOutput"
+          },
+          "parent_job_id": {
+            "nullable": true,
+            "type": "string"
+          },
+          "predicted_execution_duration_ms": {
+            "format": "int32",
+            "nullable": true,
+            "type": "integer"
+          },
+          "predicted_wait_time_ms": {
+            "format": "int32",
+            "nullable": true,
+            "type": "integer"
+          },
+          "project_id": {
+            "nullable": true,
+            "type": "string"
+          },
+          "results": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CircuitJobResults"
+              }
+            ],
+            "description": "Result artifacts produced by the circuit, keyed by format identifier. Each entry is an `ArtifactDescriptor` — pass its `id` to the [artifact endpoint](/api-reference/v0.4/jobs/get-job-artifact) to download the payload. See [Results formats](/api-reference/v0.4/schemas/results-formats) for the catalog of valid identifiers and their payload schemas.",
+            "nullable": true
+          },
+          "session_id": {
+            "nullable": true,
+            "type": "string"
+          },
+          "settings": {
+            "$ref": "#/components/schemas/CircuitJobSettings"
+          },
+          "shots": {
+            "description": "`shots` are not included with ideal simulator backend.",
+            "format": "int32",
+            "type": "integer"
+          },
+          "started_at": {
+            "allO
... (truncated)

Metadata

Metadata

Assignees

No one assigned

    Labels

    spec-driftUpstream OpenAPI spec has changed

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions