curl --request GET \
--url https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"creditBalance": {
"balanceCents": 123,
"currency": "<string>"
},
"subscriptions": [
{
"cancelsAt": "<string>",
"category": "<string>",
"currentPeriodEnd": "<string>",
"currentPeriodStart": "<string>",
"nextBillingAt": "<string>",
"paymentMode": "automatic",
"plan": {
"baseAmountCents": 4503599627370495,
"currency": "<string>",
"description": "<string>",
"entitlements": [
{
"featureKey": "<string>",
"value": "<string>"
}
],
"fixedCharges": [
{
"chargeModel": "graduated",
"displayName": "<string>",
"fixedChargeCode": "<string>",
"payInAdvance": true,
"pricing": {
"amount": "<string>",
"tiers": [
{
"flatAmount": "<string>",
"fromUnit": 4503599627370495,
"perUnitAmount": "<string>",
"toUnit": 4503599627370495
}
]
},
"prorated": true,
"quantity": 4503599627370495
}
],
"interval": "weekly",
"isDefault": true,
"minimumCommitment": {
"amountCents": 4503599627370495,
"displayName": "<string>"
},
"name": "<string>",
"payInAdvance": true,
"planCode": "<string>",
"tier": 0,
"tierDisplayName": "<string>",
"usageCharges": [
{
"chargeCode": "<string>",
"chargeModel": "dynamic",
"displayName": "<string>",
"filters": [
{
"displayName": "<string>",
"pricing": {
"amount": "<string>",
"fixedAmount": "<string>",
"freeUnits": 4503599627370495,
"freeUnitsPerEvents": 4503599627370495,
"freeUnitsPerTotalAggregation": "<string>",
"packageSize": 4503599627370495,
"perTransactionMaxAmount": "<string>",
"perTransactionMinAmount": "<string>",
"pricingGroupKeys": [
"<string>"
],
"rate": "<string>",
"tiers": [
{
"flatAmount": "<string>",
"fromUnit": 4503599627370495,
"perUnitAmount": "<string>",
"rate": "<string>",
"toUnit": 4503599627370495
}
]
},
"values": [
{
"key": "<string>",
"values": [
"<string>"
]
}
]
}
],
"invoiceable": true,
"metricCode": "<string>",
"minimumAmountCents": 4503599627370495,
"payInAdvance": true,
"pricing": {
"amount": "<string>",
"fixedAmount": "<string>",
"freeUnits": 4503599627370495,
"freeUnitsPerEvents": 4503599627370495,
"freeUnitsPerTotalAggregation": "<string>",
"packageSize": 4503599627370495,
"perTransactionMaxAmount": "<string>",
"perTransactionMinAmount": "<string>",
"pricingGroupKeys": [
"<string>"
],
"rate": "<string>",
"tiers": [
{
"flatAmount": "<string>",
"fromUnit": 4503599627370495,
"perUnitAmount": "<string>",
"rate": "<string>",
"toUnit": 4503599627370495
}
]
},
"prorated": true
}
],
"usageThresholds": [
{
"amountCents": 4503599627370495,
"displayName": "<string>",
"recurring": true
}
],
"categoryDisplayName": "<string>"
},
"planSource": "catalog",
"scheduledPlanChange": {
"effectiveAt": "<string>",
"planCode": "<string>"
}
}
],
"timeZone": "<string>"
}{
"code": "INVALID_ARGUMENT",
"status": 400,
"title": "Invalid Argument",
"type": "https://photon.codes/docs/problems/invalid-argument"
}{
"code": "NOT_AUTHENTICATED",
"status": 401,
"title": "Not Authenticated",
"type": "https://photon.codes/docs/problems/not-authenticated"
}{
"code": "FORBIDDEN",
"status": 403,
"title": "Forbidden",
"type": "https://photon.codes/docs/problems/forbidden"
}{
"code": "FAILED_PRECONDITION",
"status": 409,
"title": "Failed Precondition",
"type": "https://photon.codes/docs/problems/failed-precondition"
}{
"code": "VALIDATION_FAILED",
"issues": [
{
"code": "invalid_type",
"location": "json",
"message": "Expected a string.",
"path": "/name"
}
],
"status": 422,
"title": "Request Validation Failed",
"type": "https://photon.codes/docs/problems/validation-failed"
}{
"code": "INTERNAL_ERROR",
"status": 500,
"title": "Internal Server Error",
"type": "https://photon.codes/docs/problems/internal-error"
}{
"code": "UPSTREAM_FAILURE",
"status": 502,
"title": "Upstream Service Failure",
"type": "https://photon.codes/docs/problems/upstream-failure"
}{
"code": "UPSTREAM_UNAVAILABLE",
"status": 503,
"title": "Upstream Service Unavailable",
"type": "https://photon.codes/docs/problems/upstream-unavailable"
}{
"code": "REQUEST_TIMEOUT",
"status": 504,
"title": "Request Timeout",
"type": "https://photon.codes/docs/problems/request-timeout"
}Get the project's effective billing terms
Returns what the selected project is billed on now, per category it holds: the plan as its subscription has it, with any override applied, each fixed charge at the subscription’s price and quantity, and resolved entitlements; where the plan comes from; how invoices are paid; the current period and next billing date; and any downgrade or cancellation waiting for the period end. It also returns the credit the paying organization holds on credit notes, such as the unused time of a plan an upgrade replaced; it offsets that organization’s next invoices. Supply both organizationId and projectId; the organization must pay for the project. This operation does not change billing.
curl --request GET \
--url https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.photon.codes/v1/organizations/{organizationId}/billing/projects/{projectId}/terms")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"creditBalance": {
"balanceCents": 123,
"currency": "<string>"
},
"subscriptions": [
{
"cancelsAt": "<string>",
"category": "<string>",
"currentPeriodEnd": "<string>",
"currentPeriodStart": "<string>",
"nextBillingAt": "<string>",
"paymentMode": "automatic",
"plan": {
"baseAmountCents": 4503599627370495,
"currency": "<string>",
"description": "<string>",
"entitlements": [
{
"featureKey": "<string>",
"value": "<string>"
}
],
"fixedCharges": [
{
"chargeModel": "graduated",
"displayName": "<string>",
"fixedChargeCode": "<string>",
"payInAdvance": true,
"pricing": {
"amount": "<string>",
"tiers": [
{
"flatAmount": "<string>",
"fromUnit": 4503599627370495,
"perUnitAmount": "<string>",
"toUnit": 4503599627370495
}
]
},
"prorated": true,
"quantity": 4503599627370495
}
],
"interval": "weekly",
"isDefault": true,
"minimumCommitment": {
"amountCents": 4503599627370495,
"displayName": "<string>"
},
"name": "<string>",
"payInAdvance": true,
"planCode": "<string>",
"tier": 0,
"tierDisplayName": "<string>",
"usageCharges": [
{
"chargeCode": "<string>",
"chargeModel": "dynamic",
"displayName": "<string>",
"filters": [
{
"displayName": "<string>",
"pricing": {
"amount": "<string>",
"fixedAmount": "<string>",
"freeUnits": 4503599627370495,
"freeUnitsPerEvents": 4503599627370495,
"freeUnitsPerTotalAggregation": "<string>",
"packageSize": 4503599627370495,
"perTransactionMaxAmount": "<string>",
"perTransactionMinAmount": "<string>",
"pricingGroupKeys": [
"<string>"
],
"rate": "<string>",
"tiers": [
{
"flatAmount": "<string>",
"fromUnit": 4503599627370495,
"perUnitAmount": "<string>",
"rate": "<string>",
"toUnit": 4503599627370495
}
]
},
"values": [
{
"key": "<string>",
"values": [
"<string>"
]
}
]
}
],
"invoiceable": true,
"metricCode": "<string>",
"minimumAmountCents": 4503599627370495,
"payInAdvance": true,
"pricing": {
"amount": "<string>",
"fixedAmount": "<string>",
"freeUnits": 4503599627370495,
"freeUnitsPerEvents": 4503599627370495,
"freeUnitsPerTotalAggregation": "<string>",
"packageSize": 4503599627370495,
"perTransactionMaxAmount": "<string>",
"perTransactionMinAmount": "<string>",
"pricingGroupKeys": [
"<string>"
],
"rate": "<string>",
"tiers": [
{
"flatAmount": "<string>",
"fromUnit": 4503599627370495,
"perUnitAmount": "<string>",
"rate": "<string>",
"toUnit": 4503599627370495
}
]
},
"prorated": true
}
],
"usageThresholds": [
{
"amountCents": 4503599627370495,
"displayName": "<string>",
"recurring": true
}
],
"categoryDisplayName": "<string>"
},
"planSource": "catalog",
"scheduledPlanChange": {
"effectiveAt": "<string>",
"planCode": "<string>"
}
}
],
"timeZone": "<string>"
}{
"code": "INVALID_ARGUMENT",
"status": 400,
"title": "Invalid Argument",
"type": "https://photon.codes/docs/problems/invalid-argument"
}{
"code": "NOT_AUTHENTICATED",
"status": 401,
"title": "Not Authenticated",
"type": "https://photon.codes/docs/problems/not-authenticated"
}{
"code": "FORBIDDEN",
"status": 403,
"title": "Forbidden",
"type": "https://photon.codes/docs/problems/forbidden"
}{
"code": "FAILED_PRECONDITION",
"status": 409,
"title": "Failed Precondition",
"type": "https://photon.codes/docs/problems/failed-precondition"
}{
"code": "VALIDATION_FAILED",
"issues": [
{
"code": "invalid_type",
"location": "json",
"message": "Expected a string.",
"path": "/name"
}
],
"status": 422,
"title": "Request Validation Failed",
"type": "https://photon.codes/docs/problems/validation-failed"
}{
"code": "INTERNAL_ERROR",
"status": 500,
"title": "Internal Server Error",
"type": "https://photon.codes/docs/problems/internal-error"
}{
"code": "UPSTREAM_FAILURE",
"status": 502,
"title": "Upstream Service Failure",
"type": "https://photon.codes/docs/problems/upstream-failure"
}{
"code": "UPSTREAM_UNAVAILABLE",
"status": 503,
"title": "Upstream Service Unavailable",
"type": "https://photon.codes/docs/problems/upstream-unavailable"
}{
"code": "REQUEST_TIMEOUT",
"status": 504,
"title": "Request Timeout",
"type": "https://photon.codes/docs/problems/request-timeout"
}Authorizations
Account Service Key, prefixed with pho_ask_, sent as Authorization: Bearer <key>. Acts on behalf of its owning account, subject to the permissions and credential restrictions of each operation. Account access tokens and OAuth grants also use the Bearer header. In organizations that require SSO, Account Service Keys are not accepted for managing the organization's SSO settings, deleting the organization, or checking whether it can be deleted.
Response
The project's effective billing terms, per category.
Credit the paying organization holds on credit notes, such as the unused time of a plan an upgrade replaced. It offsets that organization's next invoices of any kind except one-off invoices. Prepaid wallet credit is separate. Null when it holds none.
Show child attributes
Show child attributes
One entry per category the project holds, by category. Empty means it holds none.
Show child attributes
Show child attributes
The IANA time zone the payer is billed in, e.g. America/Los_Angeles. Billing periods start and end at its midnights, so read their calendar dates in it.
Was this page helpful?