Find an API

Search public APIs with auth details & Postman guides

← All APIs

Zuora REST API

zuora.com · Company

Company OAuth2 Paid Financial Services Technology Finance Billing Subscription

REST API for Zuora — the leading subscription management and recurring billing platform. Manage subscriptions, accounts, invoices, payments, refunds, and revenue recognition. Used by SaaS companies and enterprises for subscription monetization.

Authentication

OAuth2 OAuth2 client credentials. Create an OAuth client in Zuora UI → Settings → OAuth Clients. Sandbox available at rest.apisandbox.zuora.com.

Sample Requests

GET Get subscriptions for an account

Returns all subscriptions for a Zuora account by account number or name.

https://rest.zuora.com/v1/subscriptions/accounts/{accountKey}

Hover any highlighted part to learn what it does

Headers — extra info sent with the request
Authorization Bearer YOUR_ACCESS_TOKEN
curl -X GET "https://rest.zuora.com/v1/subscriptions/accounts/{accountKey}" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
import requests
headers = {
    "Authorization": "Bearer YOUR_ACCESS_TOKEN"
}
response = requests.get(
    "https://rest.zuora.com/v1/subscriptions/accounts/{accountKey}",
    headers=headers,
)
print(response.json())
const url = 'https://rest.zuora.com/v1/subscriptions/accounts/{accountKey}';

const response = await fetch(url, {
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
  },
}); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	targetURL := "https://rest.zuora.com/v1/subscriptions/accounts/{accountKey}"
	req, _ := http.NewRequest("GET", targetURL, nil)
	req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://rest.zuora.com/v1/subscriptions/accounts/{accountKey}")

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer YOUR_ACCESS_TOKEN"

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://rest.zuora.com/v1/subscriptions/accounts/{accountKey}";
$opts = ["http" => [
    "method" => "GET",
    "header" => implode("\r\n", [
        "Authorization: Bearer YOUR_ACCESS_TOKEN"
    ]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
POST Create an invoice

Creates a standalone invoice for a Zuora account.

https://rest.zuora.com/v1/object/invoice

Hover any highlighted part to learn what it does

Headers — extra info sent with the request
Content-Type application/json
Authorization Bearer YOUR_ACCESS_TOKEN
Request Body — data you're sending
{
  "DueDate": "2024-02-28",
  "AccountId": "account_id",
  "InvoiceDate": "2024-01-31"
}
curl -X POST "https://rest.zuora.com/v1/object/invoice" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"DueDate":"2024-02-28","AccountId":"account_id","InvoiceDate":"2024-01-31"}'
import requests
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer YOUR_ACCESS_TOKEN"
}
data = {
    "DueDate": "2024-02-28",
    "AccountId": "account_id",
    "InvoiceDate": "2024-01-31"
}
response = requests.post(
    "https://rest.zuora.com/v1/object/invoice",
    headers=headers,
    json=data,
)
print(response.json())
const url = 'https://rest.zuora.com/v1/object/invoice';

const response = await fetch(url, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
  },
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
  "DueDate": "2024-02-28",
  "AccountId": "account_id",
  "InvoiceDate": "2024-01-31"
}),
}); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"bytes"
	"encoding/json"
)

func main() {
	targetURL := "https://rest.zuora.com/v1/object/invoice"
	jsonData, _ := json.Marshal({"DueDate":"2024-02-28","AccountId":"account_id","InvoiceDate":"2024-01-31"})
	req, _ := http.NewRequest("POST", targetURL, bytes.NewBuffer(jsonData))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")
	req.Header.Set("Content-Type", "application/json")

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://rest.zuora.com/v1/object/invoice")

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Post.new(uri)
req["Content-Type"] = "application/json"
req["Authorization"] = "Bearer YOUR_ACCESS_TOKEN"
req["Content-Type"] = "application/json"
req.body = "{\"DueDate\":\"2024-02-28\",\"AccountId\":\"account_id\",\"InvoiceDate\":\"2024-01-31\"}"

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://rest.zuora.com/v1/object/invoice";
$opts = ["http" => [
    "method" => "POST",
    "header" => implode("\r\n", [
        "Content-Type: application/json",
        "Authorization: Bearer YOUR_ACCESS_TOKEN",
        "Content-Type: application/json"
    ]),
    "content" => json_encode({"DueDate":"2024-02-28","AccountId":"account_id","InvoiceDate":"2024-01-31"}),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));

Postman Setup Guide

Get Postman ↗
  1. Sandbox: rest.apisandbox.zuora.com — requires Zuora sandbox tenant
  2. Create OAuth client: Zuora UI → Settings → OAuth Clients → Create Client
  3. Token URL: https://rest.zuora.com/oauth/token (production) or https://rest.apisandbox.zuora.com/oauth/token (sandbox)
  4. In Postman, use OAuth2 with client credentials grant type
  5. Download official Postman collection from https://developer.zuora.com
  6. Zuora also supports ZOQL (Zuora Object Query Language) for complex queries

What can you build with Zuora REST API?

Zuora REST API is a Company API. Developers commonly use company APIs for:

  • enriching CRM records with company firmographics
  • building lead-generation and prospecting tools
  • verifying business identity and registration details
  • monitoring competitors and market intelligence
  • powering B2B data enrichment pipelines

OAuth 2.0. OAuth lets your app act on behalf of a user. You redirect them to authorise access, receive a token, then use that token in requests. Best for accessing user-owned data. Zuora REST API is a paid API — check the provider's pricing page before building a production integration.

New to APIs? Read our beginner's guide · Learn about API keys · What is REST?

Open documentation ↗