{
  "info": {
    "name": "Simple Numerology API",
    "_postman_id": "simple-numerology-api",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://simplenumerologyapi.com"
    },
    {
      "key": "api_key",
      "value": "nk_live_…"
    }
  ],
  "item": [
    {
      "name": "Account",
      "item": [
        {
          "name": "Plan and usage for the calling key's account",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/account",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "account"
              ]
            },
            "description": "GET with an API key: plan and usage for the key's account, at no cost.\nDELETE with a session: stop any subscription renewing, then delete the account."
          }
        },
        {
          "name": "Delete this account permanently",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/account",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "account"
              ]
            },
            "description": "Irreversible: the account goes with its keys and sessions at once.\nNothing is deleted until overage already served is reported. Any\nsubscription stops renewing and ends with its paid period, whose\ninvoice bills that overage. Invoices remain with Stripe, which\naccounting law requires."
          }
        },
        {
          "name": "Download everything stored about this account",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/account/export",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "account",
                "export"
              ]
            },
            "description": "Everything stored about the account (GDPR art. 20). Chart inputs are not\nstored, so the export is the account, its key metadata and its daily\nusage — never key secrets, which are not stored either."
          }
        },
        {
          "name": "Change account settings",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/account/settings",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "account",
                "settings"
              ]
            },
            "description": "",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "The signed-in account",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/me",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "me"
              ]
            },
            "description": ""
          }
        }
      ]
    },
    {
      "name": "Billing",
      "item": [
        {
          "name": "Start a Stripe Checkout session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/checkout",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "checkout"
              ]
            },
            "description": "Starts a Stripe Checkout session for an account with no\nsubscription. A `hosted` one answers the `checkout_url` to redirect\nto; an `elements` one, the `client_secret` with which Stripe.js draws\nthe payment form in your page.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"plan\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "The plan catalogue",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/plans",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "plans"
              ]
            },
            "description": ""
          }
        },
        {
          "name": "Open the Stripe Customer Portal",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/portal",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "portal"
              ]
            },
            "description": "Billing actions accept a dashboard session or a LIVE API key, so they\nstay scriptable."
          }
        },
        {
          "name": "Change plan or billing interval",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/subscription",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "subscription"
              ]
            },
            "description": "Changes plan or billing interval. An upgrade (more requests, or\nmonthly to annual) applies now: the prorated difference is invoiced\nand charged at once, and the new quota applies as soon as it is paid.\nWhen the payment fails or needs the customer to confirm it, `plan` and\n`interval` stay as they were and `pending_payment_url` is the invoice\nto pay; the change then applies on payment. A downgrade waits for the\nend of the period already paid for: `plan` and `interval` stay until\nthen, and `scheduled_plan` and `scheduled_interval` say what comes\nnext. Choosing a plan replaces a waiting downgrade and undoes a\ncancellation, so posting the current plan keeps the subscription\nrenewing as it is.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"plan\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Cancel the subscription",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/subscription",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "subscription"
              ]
            },
            "description": "Stops the subscription renewing. The plan keeps working until\n`cancel_at`, the end of the period already paid for, and the account\nthen returns to Free with the same keys. Nothing is refunded, and a\nwaiting downgrade is dropped."
          }
        }
      ]
    },
    {
      "name": "Charts",
      "item": [
        {
          "name": "Up to 100 charts in one request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/charts/batch",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "charts",
                "batch"
              ]
            },
            "description": "Up to MAX_BATCH_SIZE charts. Costs one request per chart, spent\nall-or-nothing: every item is validated before any is computed, and a\nbatch that does not fit in the remaining quota is refused whole.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"charts\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Pythagorean numerology chart",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/charts/pythagorean",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "charts",
                "pythagorean"
              ]
            },
            "description": "The full 47-field Pythagorean chart. Costs 1 request.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"first_name\": \"\",\n  \"last_name\": \"\",\n  \"birthdate\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Compatibility",
      "item": [
        {
          "name": "Compatibility between two people",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/compatibility",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "compatibility"
              ]
            },
            "description": "Compares five core numbers by number family and polarity and returns\na weighted 0–100 score. Costs 1 request.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"a\": \"\",\n  \"b\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Cycles",
      "item": [
        {
          "name": "Personal and universal cycles on a date",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cycles",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cycles"
              ]
            },
            "description": "Personal and universal year, month and day, and the Pinnacle,\nChallenge and Life Cycle in force on the date. Costs 1 request.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"birthdate\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Keys",
      "item": [
        {
          "name": "List API keys",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/keys",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "keys"
              ]
            },
            "description": ""
          }
        },
        {
          "name": "Create an API key",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/keys",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "keys"
              ]
            },
            "description": "",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Revoke an API key",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/keys/{key_id}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "keys",
                "{key_id}"
              ]
            },
            "description": "Revokes a key. Scoped to the account, so one customer can never\nrevoke another's key by guessing an id."
          }
        },
        {
          "name": "Replace a key with a new one",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/keys/{key_id}/roll",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "keys",
                "{key_id}",
                "roll"
              ]
            },
            "description": "",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Site",
      "item": [
        {
          "name": "Send a message to support",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/contact",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "contact"
              ]
            },
            "description": "Relays a message to support, Reply-To the sender. Unauthenticated by\nnecessity — someone who cannot sign in is exactly who needs support — so it\nis rate limited by IP and honeypotted instead.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"\",\n  \"message\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Unauthenticated demo chart, behind a captcha and rate limited by IP",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-API-Key",
                "value": "{{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/demo",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "demo"
              ]
            },
            "description": "The landing page's live demo: the same calculation as the paid chart,\nwith no key and no quota. Each request needs a fresh Cloudflare Turnstile\ntoken from the website, and the client IP is rate limited. A separate view\nrather than an exemption on the paid one, so the paid path has no\nunauthenticated branch to get wrong.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"first_name\": \"\",\n  \"last_name\": \"\",\n  \"birthdate\": \"\",\n  \"captcha_token\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    }
  ]
}
