Sandbox

Agent contract simulator

A deterministic, no-write contract simulator for testing parsers against Agent Community authorization and batch response shapes. Every value is a fixed synthetic fixture.

Run a fixture

Choose one fixed scenario. The response contains synthetic fixture data and performs no production read, write, authorization, or signing operation.

Four contract scenarios

Each example is generated from the same scenario registry and production response schema used by the simulator route.

agent_auth_challenge

Synthetic service authorization challenge. Models POST /agent/identity with HTTP 200.

Request

curl -X POST https://agentcommunity.org/api/v1/sandbox/simulate \
  -H "Content-Type: application/json" \
  --data '{"scenario":"agent_auth_challenge"}'

Response example

{
  "registration_id": "00000000-0000-4000-8000-000000000501",
  "registration_type": "service_auth",
  "claim_url": "https://agentcommunity.org/agent/identity/claim",
  "claim_token": "sandbox_claim_token_fixture_only",
  "claim_token_expires": "2099-01-01T00:00:00.000Z",
  "post_claim_scopes": [
    "agent.account.read",
    "agent.registrations.read"
  ],
  "claim": {
    "user_code": "000000",
    "expires_in": 600,
    "verification_uri": "https://agentcommunity.org/agent/authorize?claim_attempt_token=sandbox_claim_attempt_fixture_only",
    "interval": 5
  }
}

Response schema

{
  "type": "object",
  "properties": {
    "registration_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$"
    },
    "registration_type": {
      "type": "string",
      "const": "service_auth"
    },
    "claim_url": {
      "type": "string",
      "const": "https://agentcommunity.org/agent/identity/claim"
    },
    "claim_token": {
      "type": "string",
      "minLength": 1,
      "maxLength": 8192,
      "pattern": "^[\\u0021-\\u007e]+$"
    },
    "claim_token_expires": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "post_claim_scopes": {
      "minItems": 1,
      "maxItems": 2,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "agent.account.read",
          "agent.registrations.read"
        ]
      }
    },
    "claim": {
      "type": "object",
      "properties": {
        "user_code": {
          "type": "string",
          "pattern": "^\\d{6}$"
        },
        "expires_in": {
          "type": "number",
          "const": 600
        },
        "verification_uri": {
          "type": "string",
          "format": "uri"
        },
        "interval": {
          "type": "number",
          "const": 5
        }
      },
      "required": [
        "user_code",
        "expires_in",
        "verification_uri",
        "interval"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "registration_id",
    "registration_type",
    "claim_url",
    "claim_token",
    "claim_token_expires",
    "post_claim_scopes",
    "claim"
  ],
  "additionalProperties": false
}

agent_auth_pending

Synthetic authorization-pending OAuth response. Models POST /oauth2/token with HTTP 400.

Request

curl -X POST https://agentcommunity.org/api/v1/sandbox/simulate \
  -H "Content-Type: application/json" \
  --data '{"scenario":"agent_auth_pending"}'

Response example

{
  "error": "authorization_pending",
  "error_description": "Authorization is still pending"
}

Response schema

{
  "type": "object",
  "properties": {
    "error": {
      "type": "string",
      "enum": [
        "invalid_request",
        "unsupported_grant_type",
        "invalid_target",
        "invalid_grant",
        "authorization_pending",
        "slow_down",
        "access_denied",
        "expired_token",
        "invalid_claim_token",
        "claim_expired",
        "claimed_or_in_flight",
        "rate_limited",
        "temporarily_unavailable"
      ]
    },
    "error_description": {
      "type": "string"
    }
  },
  "required": [
    "error",
    "error_description"
  ],
  "additionalProperties": false
}

agent_auth_success

Synthetic approved agent authorization response. Models POST /oauth2/token with HTTP 200.

Request

curl -X POST https://agentcommunity.org/api/v1/sandbox/simulate \
  -H "Content-Type: application/json" \
  --data '{"scenario":"agent_auth_success"}'

Response example

{
  "access_token": "sandbox_access_token_fixture_only",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "agent.account.read agent.registrations.read",
  "identity_assertion": "sandbox_identity_assertion_fixture_only",
  "assertion_expires": "2099-01-01T00:00:00.000Z"
}

Response schema

{
  "type": "object",
  "properties": {
    "access_token": {
      "type": "string",
      "minLength": 1,
      "maxLength": 8192,
      "pattern": "^[\\u0021-\\u007e]+$"
    },
    "token_type": {
      "type": "string",
      "const": "Bearer"
    },
    "expires_in": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 3600
    },
    "scope": {
      "type": "string",
      "minLength": 1
    },
    "identity_assertion": {
      "type": "string",
      "minLength": 1,
      "maxLength": 8192
    },
    "assertion_expires": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    }
  },
  "required": [
    "access_token",
    "token_type",
    "expires_in",
    "scope",
    "identity_assertion",
    "assertion_expires"
  ],
  "additionalProperties": false
}

batch_mixed_result

Synthetic mixed public-read batch response. Models POST /api/v1/batch with HTTP 200.

Request

curl -X POST https://agentcommunity.org/api/v1/sandbox/simulate \
  -H "Content-Type: application/json" \
  --data '{"scenario":"batch_mixed_result"}'

Response example

{
  "items": [
    {
      "id": "sandbox-content",
      "operation": "content.list",
      "status": "ok",
      "result": {
        "items": [
          {
            "title": "[sandbox fixture] Published content",
            "description": "Synthetic fixture; no production content or member data.",
            "href": "/sandbox/fixtures/content",
            "type": "page"
          }
        ],
        "page": {
          "limit": 1,
          "next_cursor": null,
          "has_more": false
        }
      }
    },
    {
      "id": "sandbox-unknown",
      "operation": "sandbox.unknown",
      "status": "error",
      "error": {
        "code": "unknown_operation",
        "message": "Unsupported operation"
      }
    }
  ]
}

Response schema

{
  "type": "object",
  "properties": {
    "items": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "anyOf": [
          {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 64,
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
                  },
                  "operation": {
                    "type": "string",
                    "const": "content.list"
                  },
                  "status": {
                    "type": "string",
                    "const": "ok"
                  },
                  "result": {
                    "type": "object",
                    "properties": {
                      "items": {
                        "maxItems": 50,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "title": {
                              "type": "string"
                            },
                            "description": {
                              "type": "string"
                            },
                            "href": {
                              "type": "string",
                              "pattern": "^\\/(?!\\/)"
                            },
                            "type": {
                              "type": "string",
                              "enum": [
                                "docs",
                                "blog",
                                "page"
                              ]
                            }
                          },
                          "required": [
                            "title",
                            "description",
                            "href",
                            "type"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "page": {
                        "type": "object",
                        "properties": {
                          "limit": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 50
                          },
                          "next_cursor": {
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 256
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "has_more": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "limit",
                          "next_cursor",
                          "has_more"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "items",
                      "page"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "id",
                  "operation",
                  "status",
                  "result"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 64,
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
                  },
                  "operation": {
                    "type": "string",
                    "const": "docs.ask"
                  },
                  "status": {
                    "type": "string",
                    "const": "ok"
                  },
                  "result": {
                    "type": "object",
                    "properties": {
                      "query": {
                        "type": "string",
                        "maxLength": 500
                      },
                      "answer": {
                        "type": "string",
                        "maxLength": 1500
                      },
                      "sources": {
                        "maxItems": 10,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "title": {
                              "type": "string",
                              "maxLength": 200
                            },
                            "description": {
                              "type": "string",
                              "maxLength": 500
                            },
                            "path": {
                              "type": "string",
                              "pattern": "^\\/(?!\\/)"
                            },
                            "url": {
                              "type": "string",
                              "format": "uri"
                            },
                            "excerpt": {
                              "type": "string",
                              "maxLength": 320
                            }
                          },
                          "required": [
                            "title",
                            "description",
                            "path",
                            "url",
                            "excerpt"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "query",
                      "answer",
                      "sources"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "id",
                  "operation",
                  "status",
                  "result"
                ],
                "additionalProperties": false
              }
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 64,
                "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
              },
              "operation": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128
              },
              "status": {
                "type": "string",
                "const": "error"
              },
              "error": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "code": {
                        "type": "string",
                        "const": "unknown_operation"
                      },
                      "message": {
                        "type": "string",
                        "const": "Unsupported operation"
                      }
                    },
                    "required": [
                      "code",
                      "message"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "code": {
                        "type": "string",
                        "const": "invalid_arguments"
                      },
                      "message": {
                        "type": "string",
                        "const": "Invalid arguments"
                      }
                    },
                    "required": [
                      "code",
                      "message"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "code": {
                        "type": "string",
                        "const": "operation_failed"
                      },
                      "message": {
                        "type": "string",
                        "const": "Operation failed"
                      }
                    },
                    "required": [
                      "code",
                      "message"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "code": {
                        "type": "string",
                        "const": "deadline_exceeded"
                      },
                      "message": {
                        "type": "string",
                        "const": "Batch deadline exceeded"
                      }
                    },
                    "required": [
                      "code",
                      "message"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "code": {
                        "type": "string",
                        "const": "response_too_large"
                      },
                      "message": {
                        "type": "string",
                        "const": "Operation response exceeds its limit"
                      }
                    },
                    "required": [
                      "code",
                      "message"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "code": {
                        "type": "string",
                        "const": "total_response_too_large"
                      },
                      "message": {
                        "type": "string",
                        "const": "Batch response budget exceeded"
                      }
                    },
                    "required": [
                      "code",
                      "message"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "required": [
              "id",
              "operation",
              "status",
              "error"
            ],
            "additionalProperties": false
          }
        ]
      }
    }
  },
  "required": [
    "items"
  ],
  "additionalProperties": false
}

Deliberate boundaries

What it simulates

Production response schemas, serializers, HTTP statuses, and deterministic mixed batch outcomes using unmistakable sandbox credentials.

What it never does

It does not call production services, read member data, sign credentials, or perform authorization. It does not simulate writes. It is not a production mirror, and its fixture tokens cannot be used as credentials.