Every API here is available over the APIs.io API and to AI agents over MCP.
{
"info": {
"name": "Fragment Ledger GraphQL API",
"description": "GraphQL-first ledger API for engineering teams. OAuth2 client-credentials for auth; a single region-scoped GraphQL endpoint (https://api.fragment.dev/graphql) for schema, ledgers, entries, balances, and reconciliation. All write mutations are idempotent via an idempotency key (ik).",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"variable": [
{
"key": "graphqlUrl",
"value": "https://api.us-west-2.fragment.dev/graphql"
},
{
"key": "tokenUrl",
"value": "https://auth.us-west-2.fragment.dev/oauth2/token"
},
{
"key": "scope",
"value": "https://api.us-west-2.fragment.dev/*"
},
{
"key": "clientId",
"value": "your-client-id"
},
{
"key": "bearerToken",
"value": "your-access-token"
}
],
"item": [
{
"name": "Authentication",
"item": [
{
"name": "Get OAuth2 Access Token (client_credentials)",
"request": {
"method": "POST",
"auth": {
"type": "basic",
"basic": [
{ "key": "username", "value": "{{clientId}}" },
{ "key": "password", "value": "{{clientSecret}}" }
]
},
"header": [
{ "key": "Content-Type", "value": "application/x-www-form-urlencoded" }
],
"url": { "raw": "{{tokenUrl}}", "host": ["{{tokenUrl}}"] },
"body": {
"mode": "urlencoded",
"urlencoded": [
{ "key": "grant_type", "value": "client_credentials" },
{ "key": "scope", "value": "{{scope}}" },
{ "key": "client_id", "value": "{{clientId}}" }
]
},
"description": "Exchange client_id/client_secret (Basic auth) for a Bearer access token that expires in ~1 hour."
}
}
]
},
{
"name": "Schema",
"item": [
{
"name": "storeSchema",
"request": {
"method": "POST",
"auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{bearerToken}}" } ] },
"header": [ { "key": "Content-Type", "value": "application/json" } ],
"url": { "raw": "{{graphqlUrl}}", "host": ["{{graphqlUrl}}"] },
"body": {
"mode": "raw",
"options": { "raw": { "language": "json" } },
"raw": "{\n \"query\": \"mutation StoreSchema($key: String!, $schema: JSON!) { storeSchema(key: $key, schema: $schema) { __typename ... on StoreSchemaResult { schema { key version } } ... on BadRequestError { code message } } }\",\n \"variables\": {\n \"key\": \"wallet-v1\",\n \"schema\": { \"accounts\": [], \"entryTypes\": [] }\n }\n}"
},
"description": "Store / version a ledger Schema (chart of accounts + entry types)."
}
}
]
},
{
"name": "Ledgers",
"item": [
{
"name": "createLedger",
"request": {
"method": "POST",
"auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{bearerToken}}" } ] },
"header": [ { "key": "Content-Type", "value": "application/json" } ],
"url": { "raw": "{{graphqlUrl}}", "host": ["{{graphqlUrl}}"] },
"body": {
"mode": "raw",
"options": { "raw": { "language": "json" } },
"raw": "{\n \"query\": \"mutation CreateLedger($ik: SafeString!, $name: String!, $schemaKey: String!) { createLedger(ik: $ik, name: $name, schemaKey: $schemaKey) { __typename ... on CreateLedgerResult { ledger { ik name type } } ... on BadRequestError { code message } } }\",\n \"variables\": {\n \"ik\": \"main\",\n \"name\": \"Main Ledger\",\n \"schemaKey\": \"wallet-v1\"\n }\n}"
},
"description": "Create a new ledger from a stored Schema."
}
},
{
"name": "ledger (query)",
"request": {
"method": "POST",
"auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{bearerToken}}" } ] },
"header": [ { "key": "Content-Type", "value": "application/json" } ],
"url": { "raw": "{{graphqlUrl}}", "host": ["{{graphqlUrl}}"] },
"body": {
"mode": "raw",
"options": { "raw": { "language": "json" } },
"raw": "{\n \"query\": \"query GetLedger($ik: SafeString!) { ledger(ik: $ik) { ik name type created ledgerAccounts { path type } } }\",\n \"variables\": { \"ik\": \"main\" }\n}"
},
"description": "Retrieve a ledger's configuration, schema, and accounts."
}
}
]
},
{
"name": "Ledger Entries",
"item": [
{
"name": "addLedgerEntry (idempotent)",
"request": {
"method": "POST",
"auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{bearerToken}}" } ] },
"header": [ { "key": "Content-Type", "value": "application/json" } ],
"url": { "raw": "{{graphqlUrl}}", "host": ["{{graphqlUrl}}"] },
"body": {
"mode": "raw",
"options": { "raw": { "language": "json" } },
"raw": "{\n \"query\": \"mutation PostEntry($ik: SafeString!) { addLedgerEntry(ledgerIk: \\\"main\\\", ik: $ik, type: \\\"deposit\\\", date: \\\"2026-07-01\\\", parameters: {amount: \\\"10.00\\\", currency: {code: \\\"USD\\\"}, userId: \\\"user-123\\\"}) { __typename ... on AddLedgerEntryResult { entry { ik posted lines { amount currency { code } type account { path } } } } ... on BadRequestError { code message } } }\",\n \"variables\": { \"ik\": \"deposit-0001\" }\n}"
},
"description": "Post a balanced double-entry ledger entry. The ik makes retries safe."
}
},
{
"name": "reverseLedgerEntry",
"request": {
"method": "POST",
"auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{bearerToken}}" } ] },
"header": [ { "key": "Content-Type", "value": "application/json" } ],
"url": { "raw": "{{graphqlUrl}}", "host": ["{{graphqlUrl}}"] },
"body": {
"mode": "raw",
"options": { "raw": { "language": "json" } },
"raw": "{\n \"query\": \"mutation Reverse($ik: SafeString!) { reverseLedgerEntry(ledgerIk: \\\"main\\\", ik: $ik, entryIk: \\\"deposit-0001\\\") { __typename ... on ReverseLedgerEntryResult { entry { ik isReversal } } ... on BadRequestError { code message } } }\",\n \"variables\": { \"ik\": \"reverse-0001\" }\n}"
},
"description": "Reverse a previously posted ledger entry."
}
}
]
},
{
"name": "Balances",
"item": [
{
"name": "getLedgerBalances",
"request": {
"method": "POST",
"auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{bearerToken}}" } ] },
"header": [ { "key": "Content-Type", "value": "application/json" } ],
"url": { "raw": "{{graphqlUrl}}", "host": ["{{graphqlUrl}}"] },
"body": {
"mode": "raw",
"options": { "raw": { "language": "json" } },
"raw": "{\n \"query\": \"query Balances { getLedgerBalances(ledgerIk: \\\"main\\\") { amount currency { code } } }\"\n}"
},
"description": "Read overall balances for a ledger."
}
},
{
"name": "getLedgerAccountLines",
"request": {
"method": "POST",
"auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{bearerToken}}" } ] },
"header": [ { "key": "Content-Type", "value": "application/json" } ],
"url": { "raw": "{{graphqlUrl}}", "host": ["{{graphqlUrl}}"] },
"body": {
"mode": "raw",
"options": { "raw": { "language": "json" } },
"raw": "{\n \"query\": \"query Lines { getLedgerAccountLines(ledgerIk: \\\"main\\\", path: \\\"user_funds/user-123\\\", first: 20) { nodes { amount currency { code } type posted } pageInfo { hasNextPage endCursor } } }\"\n}"
},
"description": "Read the debit/credit lines behind an account."
}
}
]
},
{
"name": "Reconciliation",
"item": [
{
"name": "reconcileTx (idempotent by txId)",
"request": {
"method": "POST",
"auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{bearerToken}}" } ] },
"header": [ { "key": "Content-Type", "value": "application/json" } ],
"url": { "raw": "{{graphqlUrl}}", "host": ["{{graphqlUrl}}"] },
"body": {
"mode": "raw",
"options": { "raw": { "language": "json" } },
"raw": "{\n \"query\": \"mutation Reconcile { reconcileTx(ledgerIk: \\\"main\\\", txId: \\\"psp-tx-987\\\", parameters: {amount: \\\"10.00\\\", currency: {code: \\\"USD\\\"}}) { __typename ... on ReconcileTxResult { reconciled } ... on BadRequestError { code message } } }\"\n}"
},
"description": "Reconcile a transaction against external money movement, idempotent by transaction ID."
}
}
]
}
]
}