- Home
- Documentation
- Docs Home
- Usage examples
Gram Agents API usage examples
The following examples demonstrate different ways to use the Gram Agents API. All examples use the API endpoint at https://app.getgram.ai/rpc/agents.response.
Basic request
Section titled “Basic request”A simple synchronous request with a single toolset:
import osimport requests
url = "https://app.getgram.ai/rpc/agents.response"
headers = { "Content-Type": "application/json", "Gram-Key": os.getenv("GRAM_API_KEY"), "Gram-Project": "default",}
payload = { "model": "openai/gpt-4o", "instructions": "You are a helpful assistant.", "input": "What information can you retrieve about my account?", "toolsets": [ { "toolset_slug": "my-api", "environment_slug": "my-env", "headers": {} }, ],}
response = requests.post(url, headers=headers, json=payload)data = response.json()
print(data["output"][-1]["content"][-1]["text"])Multiple toolsets
Section titled “Multiple toolsets”Combine multiple toolsets in a single request to give the agent access to different APIs:
payload = { "model": "openai/gpt-4o", "instructions": "You are a helpful assistant with access to multiple services.", "input": "Find the user's email and look up their payment history.", "toolsets": [ { "toolset_slug": "user-api", "environment_slug": "my-env", "headers": {} }, { "toolset_slug": "payments-api", "environment_slug": "my-env", "headers": {} }, ],}Sub-agents
Section titled “Sub-agents”Define specialized sub-agents for complex workflows. Each sub-agent can have its own toolsets and instructions:
payload = { "model": "openai/gpt-4o", "async": True, "instructions": "You are a coordinator that delegates tasks to specialized agents.", "input": "Get user details and their payment history, then summarize.", "sub_agents": [ { "name": "User Agent", "description": "Handles user-related operations.", "instructions": "Fetch user information using the provided tools.", "toolsets": [ { "toolset_slug": "user-api", "environment_slug": "my-env", "headers": {} }, ] }, { "name": "Payments Agent", "description": "Handles payment-related operations.", "tools": [ "tools:http:payments:get_charges", "tools:http:payments:get_refunds", ], "environment_slug": "my-env", }, ],}Sub-agents can be configured with either:
toolsets: Full toolset referencestools: Specific tool URNs for fine-grained control
Asynchronous execution
Section titled “Asynchronous execution”For longer-running tasks, use async mode and poll for results:
import osimport timeimport requests
url = "https://app.getgram.ai/rpc/agents.response"
headers = { "Content-Type": "application/json", "Gram-Key": os.getenv("GRAM_API_KEY"), "Gram-Project": "default",}
payload = { "model": "openai/gpt-4o", "async": True, "instructions": "You are a helpful assistant.", "input": "Analyze the data and provide a summary.", "toolsets": [ { "toolset_slug": "analytics-api", "environment_slug": "my-env", "headers": {} }, ],}
# Start the async requestresponse = requests.post(url, headers=headers, json=payload)data = response.json()response_id = data["id"]
print(f"Response ID: {response_id}")
# Poll for completionpoll_url = f"https://app.getgram.ai/rpc/agents.response?response_id={response_id}"
while True: time.sleep(5) poll_response = requests.get(poll_url, headers=headers) poll_data = poll_response.json() status = poll_data.get("status")
print(f"Status: {status}")
if status != "in_progress": print(poll_data["output"][-1]["content"][-1]["text"]) breakMulti-turn conversations with previous_response_id
Section titled “Multi-turn conversations with previous_response_id”Chain responses together using previous_response_id to build conversational agents:
import osimport requests
url = "https://app.getgram.ai/rpc/agents.response"
headers = { "Content-Type": "application/json", "Gram-Key": os.getenv("GRAM_API_KEY"), "Gram-Project": "default",}
payload = { "model": "openai/gpt-4o", "instructions": "You are a helpful assistant.", "input": "Get the details of organization 'acme-corp'.", "toolsets": [ { "toolset_slug": "org-api", "environment_slug": "my-env", "headers": {} }, ],}
# First turnresponse = requests.post(url, headers=headers, json=payload)data = response.json()
print("Turn 1:", data["output"][-1]["content"][-1]["text"])
# Second turn - reference the previous responsepayload["previous_response_id"] = data["id"]payload["input"] = "What workspaces are in that organization?"
response = requests.post(url, headers=headers, json=payload)data = response.json()
print("Turn 2:", data["output"][-1]["content"][-1]["text"])Multi-turn conversations with message history
Section titled “Multi-turn conversations with message history”Alternatively, pass the full conversation history in the input field:
# First turnpayload = { "model": "openai/gpt-4o", "instructions": "You are a helpful assistant.", "input": [ {"role": "user", "content": "Get the details of organization 'acme-corp'."} ], "toolsets": [ { "toolset_slug": "org-api", "environment_slug": "my-env", "headers": {} }, ],}
response = requests.post(url, headers=headers, json=payload)data = response.json()
# Second turn - include previous output in contextpayload["input"] = [ *data["output"], {"role": "user", "content": "What workspaces are in that organization?"}]
response = requests.post(url, headers=headers, json=payload)Disable response storage
Section titled “Disable response storage”Use store: false to prevent the response from being saved:
payload = { "model": "openai/gpt-4o", "instructions": "You are a helpful assistant.", "input": "Process this sensitive request.", "store": False, "toolsets": [ { "toolset_slug": "my-api", "environment_slug": "my-env", "headers": {} }, ],}
response = requests.post(url, headers=headers, json=payload)data = response.json()
# Response is available immediately but will be deleted shortly afterprint(data["output"][-1]["content"][-1]["text"])Note that store: false requires synchronous execution (async: false or omitted).
More examples
Section titled “More examples”Additional examples are available in the Gram examples repository.