Customers
Customers represent the people and businesses that buy from you. A customer record keeps a buyer's name, contact details, addresses, and your own reference together, giving you a stable identity to use across purchases.
Use a customer when you expect a buyer to return, want to save a payment method, or need a consistent view of their account history. Attach the returned customer ID to future orders and payment methods so activity for the same buyer remains connected.
You can also provide customer details directly when you create an order. Inttegro creates a guest customer for that checkout; update the customer later if the buyer chooses to create an account or return for another purchase. See Manage customers for the complete integration flow.
The customer object
A customer object contains a buyer's profile and current customer-held balances. Orders and payment methods are separate resources: use the customer ID to associate them with the same buyer.
Properties
Create customer
Create a customer when you want to recognize a buyer across purchases. Save the returned customer ID in your system, then use it when creating orders or saving payment methods for that buyer.
AI clients can use create_customer or create_customer_from_contact for this operation. Confirmed MCP actions still require explicit form confirmation before Inttegro changes state.
Required attributes
Optional attributes
custom_dataobjectClick or tap to expandMetadata from your own system, such as a loyalty tier or account manager. Use string values. The complete object may be up to 25 KB, and each key may contain up to 256 characters. See Custom data.
The response returns the new customer. Store its id as the Inttegro customer ID for this buyer.
Request
- cURL
- TypeScript
- Go
- Python
- PHP
- Ruby
- Java
- C#
curl https://api.inttegro.com/customers/create \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: create-customer-user-123456" \
-d '{
"name": "Jane Mensah",
"title": "Ms.",
"reference": "user_123456",
"email_address": "[email protected]",
"phone_number": "+233242057831",
"custom_data": {
"loyalty_tier": "gold",
"account_manager": "am_789"
}
}'
import * as Inttegro from '@inttegro/inttegro-sdk'
const inttegro = new Inttegro.InttegroClient({
apiKey: process.env.INTTEGRO_API_KEY!,
})
const result = await inttegro.customers.create({
name: "Jane Mensah",
title: "Ms.",
reference: "user_123456",
phoneNumber: "+233242057831",
customData: {
loyalty_tier: "gold",
account_manager: "am_789",
},
})
package main
import (
"context"
"log"
"os"
inttegro "github.com/zebodotdev/inttegro-sdk-go/v4"
)
func main() {
ctx := context.Background()
client := inttegro.NewClient(os.Getenv("INTTEGRO_API_KEY"))
params := inttegro.CreateCustomerParams{
Name: "Jane Mensah",
Title: "Ms.",
Reference: "user_123456",
PhoneNumber: "+233242057831",
CustomData: map[string]string{
"loyalty_tier": "gold",
"account_manager": "am_789",
},
}
result, err := client.Customers.Create(ctx, params)
if err != nil {
log.Fatal(err)
}
_ = result
}
import os
import inttegro
client = inttegro.InttegroClient(api_key=os.environ["INTTEGRO_API_KEY"])
result = client.customers.create(inttegro.customers.CreateRequest(
name="Jane Mensah",
title="Ms.",
reference="user_123456",
phone_number="+233242057831",
custom_data={
"loyalty_tier": "gold",
"account_manager": "am_789",
},
))
<?php
use Inttegro\Client;
$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->customers->create([
'name' => 'Jane Mensah',
'title' => 'Ms.',
'reference' => 'user_123456',
'phone_number' => '+233242057831',
'custom_data' => [
'loyalty_tier' => 'gold',
'account_manager' => 'am_789',
],
]);
require "inttegro"
client = Inttegro::Client.new(api_key: ENV.fetch("INTTEGRO_API_KEY"))
result = client.customers.create(
name: "Jane Mensah",
title: "Ms.",
reference: "user_123456",
phone_number: "+233242057831",
custom_data: {
loyalty_tier: "gold",
account_manager: "am_789",
}
)
import com.inttegro.Client;
import com.inttegro.customers.CreateCustomerParams;
import java.util.Map;
public class Example {
public static void main(String[] args) throws Exception {
var client = new Client(System.getenv("INTTEGRO_API_KEY"));
var params = CreateCustomerParams.builder()
.name("Jane Mensah")
.title("Ms.")
.reference("user_123456")
.phoneNumber("+233242057831")
.customData(Map.<String, String>ofEntries(
Map.entry("loyalty_tier", "gold"),
Map.entry("account_manager", "am_789")
))
.build();
var result = client.customers().create(params);
}
}
using Inttegro;
using var inttegro = new InttegroClient(
Environment.GetEnvironmentVariable("INTTEGRO_API_KEY")!
);
var result = await inttegro.Customers.CreateAsync(new {
name = "Jane Mensah",
title = "Ms.",
reference = "user_123456",
phone_number = "+233242057831",
custom_data = new {
loyalty_tier = "gold",
account_manager = "am_789",
},
});
Response
- Object
- JSON
CustomerResponse {
customer: { … },
}
{
"customer": {
"id": "cu_a1b2c3d4e5",
"name": "Jane Mensah",
"title": "Ms.",
"phone_number": "+233242057831",
"reference": "user_123456",
"custom_data": { … },
"guest": false,
"balance": {},
"created_at": "2025-11-23T14:30:00Z"
}
}
Lookup customer
Retrieve a customer's current profile and available balances. Use this when showing account details, preparing a repeat purchase, or helping a customer with their account.
AI clients can use get_customer for this operation. MCP read tools return minimized business data and do not change Inttegro state.
Required attributes
The response returns the customer object, including available customer-held balances by currency.
Request
- cURL
- TypeScript
- Go
- Python
- PHP
- Ruby
- Java
- C#
curl https://api.inttegro.com/customers/lookup \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "cu_a1b2c3d4e5"
}'
import * as Inttegro from '@inttegro/inttegro-sdk'
const inttegro = new Inttegro.InttegroClient({
apiKey: process.env.INTTEGRO_API_KEY!,
})
const result = await inttegro.customers.lookup({
customerId: "cu_a1b2c3d4e5",
})
package main
import (
"context"
"log"
"os"
inttegro "github.com/zebodotdev/inttegro-sdk-go/v4"
)
func main() {
ctx := context.Background()
client := inttegro.NewClient(os.Getenv("INTTEGRO_API_KEY"))
result, err := client.Customers.Lookup(ctx, "cu_a1b2c3d4e5")
if err != nil {
log.Fatal(err)
}
_ = result
}
import os
import inttegro
client = inttegro.InttegroClient(api_key=os.environ["INTTEGRO_API_KEY"])
result = client.customers.lookup("cu_a1b2c3d4e5")
<?php
use Inttegro\Client;
$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->customers->lookup("cu_a1b2c3d4e5");
require "inttegro"
client = Inttegro::Client.new(api_key: ENV.fetch("INTTEGRO_API_KEY"))
result = client.customers.lookup(customer_id: "cu_a1b2c3d4e5")
import com.inttegro.Client;
public class Example {
public static void main(String[] args) throws Exception {
var client = new Client(System.getenv("INTTEGRO_API_KEY"));
var result = client.customers().lookup("cu_a1b2c3d4e5");
}
}
using Inttegro;
using var inttegro = new InttegroClient(
Environment.GetEnvironmentVariable("INTTEGRO_API_KEY")!
);
var result = await inttegro.Customers.LookupAsync("cu_a1b2c3d4e5");
Response
- Object
- JSON
CustomerResponse {
customer: { … },
}
{
"customer": {
"id": "cu_a1b2c3d4e5",
"name": "Jane Mensah",
"title": "Ms.",
"phone_number": "+233242057831",
"reference": "user_123456",
"guest": false,
"billing_address": { … },
"shipping_address": { … },
"custom_data": { … },
"balance": { … },
"created_at": "2025-11-23T14:30:00Z",
"updated_at": "2025-11-24T08:00:00Z"
}
}
Update customer
Keep a customer's name, contact details, addresses, reference, or custom data current. Send only the fields you want to change; omitted fields keep their existing values.
Updating a guest customer created during checkout turns it into a reusable customer, so you can use the same customer ID for future purchases.
AI clients can use update_customer for this operation. Confirmed MCP actions still require explicit form confirmation before Inttegro changes state.
Update behavior
- A top-level
nullvalue behaves like an omitted field; it does not clear the existing value. - An address replaces the complete saved address. Include every address field you want to keep.
custom_datareplaces the complete metadata object rather than merging with it. Send{}to remove all custom data.
Request attributes
The response returns the updated customer.
Request
- cURL
- SDK coverage
curl https://api.inttegro.com/customers/update \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: update-customer-user-123456-v2" \
-d '{
"customer_id": "cu_a1b2c3d4e5",
"name": "Jane Mensah-Asante",
"billing_address": {
"name": "Jane Mensah-Asante",
"line1": "5 Liberation Road",
"city": "Accra",
"country": "GH"
},
"custom_data": {
"loyalty_tier": "platinum"
}
}'
Official SDK coverage for POST /customers/update is pending.
Add this operation to the checked-in SDKs before publishing a runnable sample here.
Response
- Object
- JSON
CustomerResponse {
customer: { … },
}
{
"customer": {
"id": "cu_a1b2c3d4e5",
"name": "Jane Mensah-Asante",
"title": "Ms.",
"phone_number": "+233242057831",
"reference": "user_123456",
"custom_data": { … },
"guest": false,
"billing_address": { … },
"balance": {},
"created_at": "2025-11-23T14:30:00Z",
"updated_at": "2025-11-25T10:45:00Z"
}
}
Page through customers
Browse customers from newest to oldest. Use this endpoint to build customer lists, review recent sign-ups, or select a customer before retrieving their full account activity.
AI clients can use list_customers for this operation. MCP read tools return minimized business data and do not change Inttegro state.
Request attributes
The response contains the page number, the number of customers returned, and the customer objects. An empty page returns customers: [] and size: 0.
Request
- cURL
- TypeScript
- Go
- Python
- PHP
- Ruby
- Java
- C#
curl https://api.inttegro.com/customers/page \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"page_number": 1,
"page_size": 50
}'
import * as Inttegro from '@inttegro/inttegro-sdk'
const inttegro = new Inttegro.InttegroClient({
apiKey: process.env.INTTEGRO_API_KEY!,
})
const result = await inttegro.customers.page({
pageNumber: 1,
pageSize: 50,
})
package main
import (
"context"
"log"
"os"
inttegro "github.com/zebodotdev/inttegro-sdk-go/v4"
)
func main() {
ctx := context.Background()
client := inttegro.NewClient(os.Getenv("INTTEGRO_API_KEY"))
params := inttegro.PageCustomersParams{
PageNumber: 1,
PageSize: 50,
}
result, err := client.Customers.Page(ctx, params)
if err != nil {
log.Fatal(err)
}
_ = result
}
import os
import inttegro
client = inttegro.InttegroClient(api_key=os.environ["INTTEGRO_API_KEY"])
result = client.customers.page(inttegro.customers.PageRequest(
page_number=1,
page_size=50,
))
<?php
use Inttegro\Client;
$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->customers->page([
'page_number' => 1,
'page_size' => 50,
]);
require "inttegro"
client = Inttegro::Client.new(api_key: ENV.fetch("INTTEGRO_API_KEY"))
result = client.customers.page(
page_number: 1,
page_size: 50
)
import com.inttegro.Client;
import com.inttegro.customers.PageCustomersParams;
public class Example {
public static void main(String[] args) throws Exception {
var client = new Client(System.getenv("INTTEGRO_API_KEY"));
var params = PageCustomersParams.builder()
.pageNumber(1)
.pageSize(50)
.build();
var result = client.customers().page(params);
}
}
using Inttegro;
using var inttegro = new InttegroClient(
Environment.GetEnvironmentVariable("INTTEGRO_API_KEY")!
);
var result = await inttegro.Customers.PageAsync(new {
page_number = 1,
page_size = 50,
});