{
  "info": {
    "_postman_id": "6b1f5c1e-9d0a-4c3e-8f7a-2a9f1c0e5d41",
    "name": "API Ghana",
    "description": "Ghana's data as a JSON API: datasets, live market prices, news and more.\n\n**Setup**\n1. Import the API Ghana environment too, and choose it (top right).\n2. Paste your API key into its `api_key` value. Get one free at https://apighana.com/auth/signup.\n3. Send any request. Every request outside News, Exports and Webhooks works on a free key.\n\nThe key is sent as the `X-API-Key` header, set once on this collection. Public requests send no key.\n\nEvery answer is `{ status, message, data, meta }`. Errors are `{ status: \"error\", message, code? }`:\n- 200: Success. 201 when something was created.\n- 400: The request is malformed: an unknown column, a bad filter or body. `message` says what, `errors` lists fields.\n- 401: No key, or the key is wrong or revoked. Send it as `X-API-Key`.\n- 403: The key cannot do this: the dataset is not on it (`ACCESS_REQUIRED`), the plan does not include it (`PLAN_REQUIRED`), or the key is inactive.\n- 404: No dataset, row, series or route by that name.\n- 409: The dataset cannot be queried (no column definitions).\n- 429: Too many requests. Wait for `Retry-After` seconds.\n- 500: Our side. Retry with backoff; quote the `request_id` in the answer to us.\n- 503: A part of the service is unavailable for a moment. Retry with backoff.\n\nFull reference: https://apighana.com/docs/reference",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-API-Key",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{api_key}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://connect.apighana.com",
      "type": "string"
    },
    {
      "key": "dataset",
      "value": "districts",
      "type": "string"
    },
    {
      "key": "row_id",
      "value": "1",
      "type": "string"
    },
    {
      "key": "series",
      "value": "fx-usd-ghs",
      "type": "string"
    },
    {
      "key": "market_group",
      "value": "rates",
      "type": "string"
    },
    {
      "key": "news_slug",
      "value": "",
      "type": "string"
    },
    {
      "key": "export_id",
      "value": "",
      "type": "string"
    },
    {
      "key": "webhook_id",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Catalogue",
      "description": "What datasets exist, what their columns are and where each comes from. All public: no key needed. The dataset `name` is what every other endpoint takes.",
      "item": [
        {
          "name": "List datasets",
          "request": {
            "method": "GET",
            "header": [],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{base_url}}/api/datasets?page=1&limit=2",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "datasets"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number, from 1."
                },
                {
                  "key": "limit",
                  "value": "2",
                  "description": "Datasets per page, up to 100."
                },
                {
                  "key": "search",
                  "value": "hospital",
                  "description": "Matches the name or description.",
                  "disabled": true
                },
                {
                  "key": "category",
                  "value": "21",
                  "description": "A category id from GET /api/categories.",
                  "disabled": true
                }
              ]
            },
            "description": "Every dataset with its description, sector, price, source, licence and freshness.\n\nPublic: no key needed.\n\n`price` is the yearly licence in cedis; `0` means free on every key.\n\nDocs: https://apighana.com/docs/reference#list-datasets"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/datasets?page=1&limit=2",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "datasets"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Page number, from 1."
                    },
                    {
                      "key": "limit",
                      "value": "2",
                      "description": "Datasets per page, up to 100."
                    },
                    {
                      "key": "search",
                      "value": "hospital",
                      "description": "Matches the name or description.",
                      "disabled": true
                    },
                    {
                      "key": "category",
                      "value": "21",
                      "description": "A category id from GET /api/categories.",
                      "disabled": true
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Datasets fetched successfully.\",\n  \"data\": [\n    {\n      \"id\": 1,\n      \"name\": \"health_facilities\",\n      \"description\": \"Hospitals, clinics, health centres and doctors across Ghana, with region, district and coordinates. Derived from OpenStreetMap. 1186 records.\",\n      \"endpoint\": \"/api/data/health_facilities\",\n      \"version\": \"1.0\",\n      \"price\": 49,\n      \"price_usd\": null,\n      \"requiresAuth\": true,\n      \"category\": 1,\n      \"category_name\": \"Health\",\n      \"data_as_of\": \"2026-09-18\",\n      \"last_checked_at\": \"2026-09-25T02:07:11.341+00:00\",\n      \"check_status\": \"warning\",\n      \"update_frequency\": \"monthly\",\n      \"source_name\": \"OpenStreetMap contributors\",\n      \"source_url\": \"https://www.openstreetmap.org/copyright\",\n      \"licence\": \"ODbL\",\n      \"coverage_start\": null,\n      \"coverage_end\": null,\n      \"coverage_column\": null,\n      \"enrichment\": null,\n      \"created_at\": \"2026-09-16T14:48:47.221879+00:00\",\n      \"updated_at\": \"2026-09-18T22:46:18.987+00:00\"\n    }\n  ],\n  \"meta\": {\n    \"total\": 284,\n    \"page\": 1,\n    \"limit\": 2,\n    \"total_pages\": 142\n  }\n}"
            }
          ]
        },
        {
          "name": "Describe a dataset",
          "request": {
            "method": "GET",
            "header": [],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{base_url}}/api/datasets/{{dataset}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "datasets",
                "{{dataset}}"
              ]
            },
            "description": "One dataset's documentation: its columns and types, source, licence and freshness. Takes a name or an id.\n\nPublic: no key needed.\n\n**Errors**\n- 404: No dataset by that name.\n\nDocs: https://apighana.com/docs/reference#get-dataset"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/datasets/{{dataset}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "datasets",
                    "{{dataset}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Dataset fetched successfully\",\n  \"data\": {\n    \"id\": 77,\n    \"name\": \"districts\",\n    \"description\": \"Ghana's metropolitan, municipal and district assemblies with their region, land area and centroid. 260 records.\",\n    \"endpoint\": \"/api/data/districts\",\n    \"version\": \"1.0\",\n    \"price\": 0,\n    \"price_usd\": null,\n    \"requiresAuth\": true,\n    \"created_at\": \"2026-09-16T14:55:46.241304+00:00\",\n    \"updated_at\": \"2026-09-18T22:46:50.243+00:00\",\n    \"data_as_of\": \"2026-09-18\",\n    \"coverage_start\": null,\n    \"coverage_end\": null,\n    \"coverage_column\": null,\n    \"last_checked_at\": \"2026-09-25T02:04:23.445+00:00\",\n    \"check_status\": \"ok\",\n    \"update_frequency\": \"monthly\",\n    \"source_name\": \"geoBoundaries ADM2\",\n    \"source_url\": \"https://www.geoboundaries.org/\",\n    \"licence\": \"CC BY 4.0\",\n    \"category\": 21,\n    \"category_name\": \"Geography\",\n    \"schema\": {\n      \"columns\": [\n        {\n          \"name\": \"id\",\n          \"type\": \"BIGSERIAL PRIMARY KEY\"\n        },\n        {\n          \"name\": \"name\",\n          \"type\": \"TEXT NOT NULL\"\n        },\n        {\n          \"name\": \"region\",\n          \"type\": \"TEXT\"\n        },\n        {\n          \"name\": \"boundary_id\",\n          \"type\": \"TEXT\"\n        },\n        {\n          \"name\": \"area_sqkm\",\n          \"type\": \"DECIMAL(12,2)\"\n        },\n        {\n          \"name\": \"centroid_latitude\",\n          \"type\": \"DECIMAL(9,6)\"\n        },\n        {\n          \"name\": \"centroid_longitude\",\n          \"type\": \"DECIMAL(9,6)\"\n        },\n        {\n          \"name\": \"source\",\n          \"type\": \"TEXT\"\n        }\n      ]\n    },\n    \"api_parameters\": null,\n    \"api_headers\": null,\n    \"api_status_codes\": null,\n    \"api_examples\": null,\n    \"total_calls\": 0,\n    \"usage_per_month\": 0\n  }\n}"
            }
          ]
        },
        {
          "name": "Dataset versions",
          "request": {
            "method": "GET",
            "header": [],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{base_url}}/api/datasets/{{dataset}}/versions",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "datasets",
                "{{dataset}}",
                "versions"
              ]
            },
            "description": "The dataset's recorded versions, newest first, with rows added, removed and changed. Up to 100.\n\nPublic: no key needed.\n\nA version with `exportable: true` can be passed as `version` to the export endpoint.\n\nDocs: https://apighana.com/docs/reference#dataset-versions"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/datasets/{{dataset}}/versions",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "datasets",
                    "{{dataset}}",
                    "versions"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Versions retrieved\",\n  \"data\": [\n    {\n      \"id\": 21,\n      \"dataset_name\": \"districts\",\n      \"version\": \"2026-09-18\",\n      \"version_date\": \"2026-09-18\",\n      \"row_count\": 260,\n      \"rows_added\": 260,\n      \"rows_removed\": 0,\n      \"rows_changed\": 0,\n      \"note\": \"First check\",\n      \"created_at\": \"2026-09-18T02:49:25.695525+00:00\",\n      \"exportable\": true\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "List categories",
          "request": {
            "method": "GET",
            "header": [],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{base_url}}/api/categories",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "categories"
              ]
            },
            "description": "The sectors datasets are grouped into, with how many datasets each has.\n\nPublic: no key needed.\n\nDocs: https://apighana.com/docs/reference#list-categories"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/categories",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "categories"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Categories retrieved successfully\",\n  \"data\": [\n    {\n      \"id\": 20,\n      \"name\": \"Agriculture\",\n      \"description\": \"Agriculture datasets for Ghana.\",\n      \"created_at\": \"2026-09-16T14:48:42.96785+00:00\",\n      \"updated_at\": \"2026-09-16T14:48:42.96785+00:00\",\n      \"dataset_count\": 26\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Preview rows",
          "request": {
            "method": "GET",
            "header": [],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{base_url}}/api/data/{{dataset}}/preview",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "data",
                "{{dataset}}",
                "preview"
              ]
            },
            "description": "The first five rows of any dataset, paid ones included, and its column names. Use it to see a dataset before you licence it.\n\nPublic: no key needed.\n\n**Errors**\n- 404: No dataset by that name.\n\nDocs: https://apighana.com/docs/reference#preview-rows"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/data/{{dataset}}/preview",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "data",
                    "{{dataset}}",
                    "preview"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Preview of 'districts': the first 5 records.\",\n  \"data\": [\n    {\n      \"id\": 1,\n      \"name\": \"Adenta Municipal\",\n      \"region\": \"Greater Accra Region\",\n      \"boundary_id\": \"2480657B26321648161032\",\n      \"area_sqkm\": 78.47,\n      \"centroid_latitude\": 5.703203,\n      \"centroid_longitude\": -0.119929,\n      \"source\": \"geoBoundaries ADM2 (CC BY 4.0)\",\n      \"reference_date\": null\n    },\n    {\n      \"id\": 2,\n      \"name\": \"Ledzokuku Municipal\",\n      \"region\": \"Greater Accra Region\",\n      \"boundary_id\": \"2480657B94892111901595\",\n      \"area_sqkm\": 29.44,\n      \"centroid_latitude\": 5.594821,\n      \"centroid_longitude\": -0.124979,\n      \"source\": \"geoBoundaries ADM2 (CC BY 4.0)\",\n      \"reference_date\": null\n    }\n  ],\n  \"meta\": {\n    \"preview\": true,\n    \"preview_rows\": 5,\n    \"total\": 260,\n    \"columns\": [\n      \"id\",\n      \"name\",\n      \"region\",\n      \"boundary_id\",\n      \"area_sqkm\",\n      \"centroid_latitude\",\n      \"centroid_longitude\",\n      \"source\",\n      \"reference_date\"\n    ]\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Data rows",
      "description": "A dataset's rows, paged. Free datasets work on every key; any other dataset needs a licence, a free pick, a pack, or the Developer plan or higher.",
      "item": [
        {
          "name": "List rows",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/data/{{dataset}}?page=1&limit=2",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "data",
                "{{dataset}}"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number, from 1."
                },
                {
                  "key": "limit",
                  "value": "2",
                  "description": "Rows per page. Capped at your plan's rows per page (Free 50, Developer 500, Business 5,000, Enterprise 10,000)."
                },
                {
                  "key": "filter",
                  "value": "region:Greater Accra Region",
                  "description": "Exact matches, `column:value` pairs joined by commas. Case-sensitive; values cannot contain commas.",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "Accra",
                  "description": "Case-insensitive match across the text columns, up to 200 characters.",
                  "disabled": true
                }
              ]
            },
            "description": "A page of rows, in id order, with the total and where the data comes from.\n\nNeeds an API key (sent from `{{api_key}}`).\n\n**Errors**\n- 400: A bad `filter` or `search`, or a filter on a column the dataset does not have.\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 403 `ACCESS_REQUIRED`: The dataset is not on your key. `data.options` says how to get it: a yearly licence, a free pick, a pack or a plan.\n- 404: No dataset by that name.\n- 429: Over your plan's requests per minute. Wait for `Retry-After` seconds.\n\nWhen `limit` is above your plan's cap, the page is cut to the cap and `message` says so.\n`meta.source` names the source, its licence and when the data was last updated. Show it wherever you show the figures.\n\nDocs: https://apighana.com/docs/reference#list-rows"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/data/{{dataset}}?page=1&limit=2",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "data",
                    "{{dataset}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Page number, from 1."
                    },
                    {
                      "key": "limit",
                      "value": "2",
                      "description": "Rows per page. Capped at your plan's rows per page (Free 50, Developer 500, Business 5,000, Enterprise 10,000)."
                    },
                    {
                      "key": "filter",
                      "value": "region:Greater Accra Region",
                      "description": "Exact matches, `column:value` pairs joined by commas. Case-sensitive; values cannot contain commas.",
                      "disabled": true
                    },
                    {
                      "key": "search",
                      "value": "Accra",
                      "description": "Case-insensitive match across the text columns, up to 200 characters.",
                      "disabled": true
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Records fetched from 'districts'.\",\n  \"data\": [\n    {\n      \"id\": 1,\n      \"name\": \"Adenta Municipal\",\n      \"region\": \"Greater Accra Region\",\n      \"boundary_id\": \"2480657B26321648161032\",\n      \"area_sqkm\": 78.47,\n      \"centroid_latitude\": 5.703203,\n      \"centroid_longitude\": -0.119929,\n      \"source\": \"geoBoundaries ADM2 (CC BY 4.0)\",\n      \"reference_date\": null\n    },\n    {\n      \"id\": 2,\n      \"name\": \"Ledzokuku Municipal\",\n      \"region\": \"Greater Accra Region\",\n      \"boundary_id\": \"2480657B94892111901595\",\n      \"area_sqkm\": 29.44,\n      \"centroid_latitude\": 5.594821,\n      \"centroid_longitude\": -0.124979,\n      \"source\": \"geoBoundaries ADM2 (CC BY 4.0)\",\n      \"reference_date\": null\n    }\n  ],\n  \"meta\": {\n    \"page\": 1,\n    \"limit\": 2,\n    \"total\": 260,\n    \"total_items\": 260,\n    \"total_pages\": 130,\n    \"is_limited\": true,\n    \"source\": {\n      \"dataset\": \"districts\",\n      \"source\": \"geoBoundaries ADM2\",\n      \"source_url\": \"https://www.geoboundaries.org/\",\n      \"licence\": \"CC BY 4.0\",\n      \"last_updated\": \"2026-09-18\",\n      \"last_checked\": \"2026-09-25T02:04:23.445+00:00\",\n      \"covers\": null,\n      \"notice\": \"Source: geoBoundaries ADM2 (CC BY 4.0). Last updated from the source on 2026-09-18. The records are a snapshot of the source as of the date it was last updated. Provided as published by the source, without warranty. Check the dates before relying on a figure.\"\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "Get one row",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/data/{{dataset}}/{{row_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "data",
                "{{dataset}}",
                "{{row_id}}"
              ]
            },
            "description": "One row by its id.\n\nNeeds an API key (sent from `{{api_key}}`).\n\n**Errors**\n- 400: `id` is not a positive integer.\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 403 `ACCESS_REQUIRED`: The dataset is not on your key. `data.options` says how to get it: a yearly licence, a free pick, a pack or a plan.\n- 404: No dataset, or no row with that id.\n- 429: Over your plan's requests per minute. Wait for `Retry-After` seconds.\n\nDocs: https://apighana.com/docs/reference#get-row"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/data/{{dataset}}/{{row_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "data",
                    "{{dataset}}",
                    "{{row_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Record fetched from 'districts'.\",\n  \"data\": {\n    \"id\": 1,\n    \"name\": \"Adenta Municipal\",\n    \"region\": \"Greater Accra Region\",\n    \"boundary_id\": \"2480657B26321648161032\",\n    \"area_sqkm\": 78.47,\n    \"centroid_latitude\": 5.703203,\n    \"centroid_longitude\": -0.119929,\n    \"source\": \"geoBoundaries ADM2 (CC BY 4.0)\",\n    \"reference_date\": null\n  }\n}"
            }
          ]
        },
        {
          "name": "Columns",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/datasets/extended/schema/{{dataset}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "datasets",
                "extended",
                "schema",
                "{{dataset}}"
              ]
            },
            "description": "The dataset's column names and types. The same columns are listed publicly by GET /api/datasets/{table}.\n\nNeeds an API key (sent from `{{api_key}}`).\n\n**Errors**\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 404: No dataset by that name.\n- 429: Over your plan's requests per minute. Wait for `Retry-After` seconds.\n\nDocs: https://apighana.com/docs/reference#dataset-schema"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/datasets/extended/schema/{{dataset}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "datasets",
                    "extended",
                    "schema",
                    "{{dataset}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Dataset schema retrieved successfully.\",\n  \"data\": {\n    \"columns\": [\n      {\n        \"name\": \"id\",\n        \"type\": \"BIGSERIAL PRIMARY KEY\"\n      },\n      {\n        \"name\": \"name\",\n        \"type\": \"TEXT NOT NULL\"\n      },\n      {\n        \"name\": \"region\",\n        \"type\": \"TEXT\"\n      },\n      {\n        \"name\": \"boundary_id\",\n        \"type\": \"TEXT\"\n      },\n      {\n        \"name\": \"area_sqkm\",\n        \"type\": \"DECIMAL(12,2)\"\n      },\n      {\n        \"name\": \"centroid_latitude\",\n        \"type\": \"DECIMAL(9,6)\"\n      },\n      {\n        \"name\": \"centroid_longitude\",\n        \"type\": \"DECIMAL(9,6)\"\n      },\n      {\n        \"name\": \"source\",\n        \"type\": \"TEXT\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Row count",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/datasets/extended/stats/{{dataset}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "datasets",
                "extended",
                "stats",
                "{{dataset}}"
              ]
            },
            "description": "How many rows the dataset has, and when it was created and last changed.\n\nNeeds an API key (sent from `{{api_key}}`).\n\n**Errors**\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 404: No dataset by that name.\n- 429: Over your plan's requests per minute. Wait for `Retry-After` seconds.\n\nDocs: https://apighana.com/docs/reference#dataset-stats"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/datasets/extended/stats/{{dataset}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "datasets",
                    "extended",
                    "stats",
                    "{{dataset}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Statistics for dataset 'districts'.\",\n  \"data\": {\n    \"total_records\": 260,\n    \"created_at\": \"2026-09-16T14:55:46.241304+00:00\",\n    \"updated_at\": \"2026-09-18T22:46:50.243+00:00\"\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Query builder",
      "description": "Choose columns, filter with operators and sort, in one JSON body. Column names come from the dataset's schema; an unknown column is an error, not an empty answer.",
      "item": [
        {
          "name": "Run a query",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"select\": [\n    \"name\",\n    \"region\",\n    \"area_sqkm\"\n  ],\n  \"where\": [\n    {\n      \"column\": \"name\",\n      \"operator\": \"IN\",\n      \"value\": [\n        \"Wa East\",\n        \"Wa Municipal\"\n      ]\n    }\n  ],\n  \"order\": {\n    \"column\": \"area_sqkm\",\n    \"direction\": \"desc\"\n  },\n  \"limit\": 10\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/query/{{dataset}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "query",
                "{{dataset}}"
              ]
            },
            "description": "Rows matching every `where` condition, with the columns you choose, in the order you choose.\n\nNeeds an API key (sent from `{{api_key}}`).\n\n**Body**\n- `select` (string[], default [\"*\"]): Columns to return.\n- `where` (object[], default []): Conditions, all of which must hold: `{ column, operator, value }`. Operators: `=`, `!=`, `>`, `<`, `>=`, `<=`, `IN` (value is a non-empty array), `CONTAINS` (case-insensitive text match).\n- `order` (object): `{ column, direction }`, direction `asc` or `desc`.\n- `limit` (integer, default 10): 1 to 1,000. Capped at your plan's rows per page (Free 50, Developer 500, Business 5,000, Enterprise 10,000).\n- `page` (integer, default 1): Page number, from 1.\n\n**Errors**\n- 400: A bad body, or a column in `select`, `where` or `order` that the dataset does not have. `errors` names the field.\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 403 `ACCESS_REQUIRED`: The dataset is not on your key. `data.options` says how to get it: a yearly licence, a free pick, a pack or a plan.\n- 404: No dataset by that name.\n- 409: The dataset has no column definitions to query against.\n- 429: Over your plan's requests per minute. Wait for `Retry-After` seconds.\n\nA `limit` above your plan's cap is lowered to the cap without an error.\n\nDocs: https://apighana.com/docs/reference#run-query"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"select\": [\n    \"name\",\n    \"region\",\n    \"area_sqkm\"\n  ],\n  \"where\": [\n    {\n      \"column\": \"name\",\n      \"operator\": \"IN\",\n      \"value\": [\n        \"Wa East\",\n        \"Wa Municipal\"\n      ]\n    }\n  ],\n  \"order\": {\n    \"column\": \"area_sqkm\",\n    \"direction\": \"desc\"\n  },\n  \"limit\": 10\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/api/query/{{dataset}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "query",
                    "{{dataset}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Custom query executed successfully.\",\n  \"data\": [\n    {\n      \"name\": \"Wa East\",\n      \"region\": \"Upper West Region\",\n      \"area_sqkm\": 4325\n    },\n    {\n      \"name\": \"Wa Municipal\",\n      \"region\": \"Upper West Region\",\n      \"area_sqkm\": 583.44\n    }\n  ],\n  \"meta\": {\n    \"total\": 2,\n    \"total_items\": 2,\n    \"total_pages\": 1,\n    \"page\": 1,\n    \"limit\": 10,\n    \"source\": {\n      \"dataset\": \"districts\",\n      \"source\": \"geoBoundaries ADM2\",\n      \"source_url\": \"https://www.geoboundaries.org/\",\n      \"licence\": \"CC BY 4.0\",\n      \"last_updated\": \"2026-09-18\",\n      \"last_checked\": \"2026-09-25T02:04:23.445+00:00\",\n      \"covers\": null,\n      \"notice\": \"Source: geoBoundaries ADM2 (CC BY 4.0). Last updated from the source on 2026-09-18. The records are a snapshot of the source as of the date it was last updated. Provided as published by the source, without warranty. Check the dates before relying on a figure.\"\n    }\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Ask in plain English",
      "description": "Ask a question in words and get an answer worked out from the rows, with the queries that produced it. Each question counts against a daily allowance: Free 10, Developer 50, Business 200, Enterprise 500 (reset at midnight, Accra time). Bought questions are used after that.",
      "item": [
        {
          "name": "Ask a dataset",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"question\": \"How many districts are there?\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/datasets/{{dataset}}/ask",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "datasets",
                "{{dataset}}",
                "ask"
              ]
            },
            "description": "Answers a question from one dataset's rows.\n\nNeeds an API key (sent from `{{api_key}}`).\n\n**Body**\n- `question` (string, required): 1 to 2,000 characters.\n- `history` (object[], default []): Earlier turns for follow-up questions, up to 8: `{ role: \"user\" | \"assistant\", content }`.\n\n**Errors**\n- 400: No `question`, or one over 2,000 characters.\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 403 `ACCESS_REQUIRED`: The dataset is not on your key. `data.options` says how to get it: a yearly licence, a free pick, a pack or a plan.\n- 429 `ASK_LIMIT`: Today's questions are used up and there are no bought ones left.\n- 503 `ASK_NOT_CONFIGURED`: Asking is switched off on our side.\n\nDocs: https://apighana.com/docs/reference#ask-dataset"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"question\": \"How many districts are there?\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/api/datasets/{{dataset}}/ask",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "datasets",
                    "{{dataset}}",
                    "ask"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Chat with data answered.\",\n  \"data\": {\n    \"answer\": \"The districts dataset lists 260 districts.\",\n    \"tools\": [\n      {\n        \"name\": \"run_query\",\n        \"args\": {\n          \"table\": \"districts\"\n        },\n        \"summary\": \"Queried districts: 1 rows (260 match)\"\n      }\n    ],\n    \"dataset\": {\n      \"id\": 77,\n      \"name\": \"districts\"\n    },\n    \"sources\": [\n      {\n        \"dataset\": \"districts\",\n        \"source\": \"geoBoundaries ADM2\",\n        \"source_url\": \"https://www.geoboundaries.org/\",\n        \"licence\": \"CC BY 4.0\",\n        \"last_updated\": \"2026-09-18\",\n        \"last_checked\": \"2026-09-25T02:04:23.445+00:00\",\n        \"covers\": null,\n        \"notice\": \"Source: geoBoundaries ADM2 (CC BY 4.0). Last updated from the source on 2026-09-18. The records are a snapshot of the source as of the date it was last updated. Provided as published by the source, without warranty. Check the dates before relying on a figure.\"\n      }\n    ],\n    \"mode\": \"dataset\",\n    \"quota\": {\n      \"used\": 1,\n      \"limit\": 10,\n      \"remaining\": 9,\n      \"day\": \"2026-09-25\",\n      \"credits\": 0\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "Ask the catalogue",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"question\": \"How many regions does Ghana have?\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/datasets/ask",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "datasets",
                "ask"
              ]
            },
            "description": "Answers a question from any dataset your key can read; it chooses the datasets itself.\n\nNeeds an API key (sent from `{{api_key}}`).\n\n**Body**\n- `question` (string, required): 1 to 2,000 characters.\n- `history` (object[], default []): Earlier turns, up to 8.\n\n**Errors**\n- 400: No `question`, or one over 2,000 characters.\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 429 `ASK_LIMIT`: Today's questions are used up and there are no bought ones left.\n- 503 `ASK_NOT_CONFIGURED`: Asking is switched off on our side.\n\nDocs: https://apighana.com/docs/reference#ask-catalogue"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"question\": \"How many regions does Ghana have?\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/api/datasets/ask",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "datasets",
                    "ask"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Chat with data answered.\",\n  \"data\": {\n    \"answer\": \"Ghana has 16 regions, according to the regions dataset.\",\n    \"tools\": [\n      {\n        \"name\": \"list_datasets\",\n        \"args\": {\n          \"query\": \"regions\"\n        },\n        \"summary\": \"Listed 3 datasets\"\n      },\n      {\n        \"name\": \"run_query\",\n        \"args\": {\n          \"table\": \"regions\"\n        },\n        \"summary\": \"Queried regions: 16 rows (16 match)\"\n      }\n    ],\n    \"dataset\": null,\n    \"sources\": [],\n    \"mode\": \"catalogue\",\n    \"quota\": {\n      \"used\": 2,\n      \"limit\": 10,\n      \"remaining\": 8,\n      \"day\": \"2026-09-25\",\n      \"credits\": 0\n    }\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Live and markets",
      "description": "Exchange rates, bank rates, fuel, food and commodity prices and economic indicators, updated through the day. No key needed for the latest values; a key's plan sets how much history comes back. The two families name their groups differently: `/api/live` uses `fx banks fuel food commodities macro`, `/api/market` uses `rates banks fuel food commodities indicators`.",
      "item": [
        {
          "name": "Every live series",
          "request": {
            "method": "GET",
            "header": [],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{base_url}}/api/live",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "live"
              ],
              "query": [
                {
                  "key": "group",
                  "value": "fx",
                  "description": "`fx`, `banks`, `fuel`, `food`, `commodities` or `macro`.",
                  "disabled": true
                },
                {
                  "key": "points",
                  "value": "7",
                  "description": "Recent observations per series, 0 to 120.",
                  "disabled": true
                }
              ]
            },
            "description": "Every live series with its latest and previous value, grouped. Add `points` for recent history to draw a line.\n\nPublic: no key needed.\n\nDocs: https://apighana.com/docs/reference#live-overview"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/live",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "live"
                  ],
                  "query": [
                    {
                      "key": "group",
                      "value": "fx",
                      "description": "`fx`, `banks`, `fuel`, `food`, `commodities` or `macro`.",
                      "disabled": true
                    },
                    {
                      "key": "points",
                      "value": "7",
                      "description": "Recent observations per series, 0 to 120.",
                      "disabled": true
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Live data\",\n  \"data\": {\n    \"groups\": {\n      \"fx\": [\n        {\n          \"id\": 12,\n          \"slug\": \"fx-usd-ghs\",\n          \"name\": \"US dollar to cedi\",\n          \"group\": \"fx\",\n          \"unit\": \"GHS per USD\",\n          \"frequency\": \"daily\",\n          \"source_name\": \"exchangerate-api.com\",\n          \"source_url\": \"https://www.exchangerate-api.com\",\n          \"licence\": \"Free for use with attribution\",\n          \"description\": \"How many Ghana cedis one US dollar buys, mid-market, updated daily.\",\n          \"dataset_name\": \"fx_rates\",\n          \"dimensions\": {\n            \"base\": \"USD\",\n            \"quote\": \"GHS\"\n          },\n          \"latest_value\": 11.5673,\n          \"latest_at\": \"2026-09-25T00:00:01+00:00\",\n          \"previous_value\": 11.574,\n          \"previous_at\": \"2026-09-24T00:00:02+00:00\",\n          \"change_pct\": -0.0579,\n          \"first_at\": \"2026-09-18T00:00:01+00:00\",\n          \"observation_count\": 9,\n          \"stale\": false,\n          \"points\": []\n        }\n      ]\n    },\n    \"series\": [\n      {\n        \"id\": 12,\n        \"slug\": \"fx-usd-ghs\",\n        \"name\": \"US dollar to cedi\",\n        \"group\": \"fx\",\n        \"unit\": \"GHS per USD\",\n        \"frequency\": \"daily\",\n        \"source_name\": \"exchangerate-api.com\",\n        \"source_url\": \"https://www.exchangerate-api.com\",\n        \"licence\": \"Free for use with attribution\",\n        \"description\": \"How many Ghana cedis one US dollar buys, mid-market, updated daily.\",\n        \"dataset_name\": \"fx_rates\",\n        \"dimensions\": {\n          \"base\": \"USD\",\n          \"quote\": \"GHS\"\n        },\n        \"latest_value\": 11.5673,\n        \"latest_at\": \"2026-09-25T00:00:01+00:00\",\n        \"previous_value\": 11.574,\n        \"previous_at\": \"2026-09-24T00:00:02+00:00\",\n        \"change_pct\": -0.0579,\n        \"first_at\": \"2026-09-18T00:00:01+00:00\",\n        \"observation_count\": 9,\n        \"stale\": false,\n        \"points\": []\n      }\n    ],\n    \"updated_at\": null\n  }\n}"
            }
          ]
        },
        {
          "name": "One series with history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/live/{{series}}?range=30d",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "live",
                "{{series}}"
              ],
              "query": [
                {
                  "key": "range",
                  "value": "30d",
                  "description": "`30d`, `90d`, `1y`, `5y` or `all`."
                },
                {
                  "key": "limit",
                  "value": "5",
                  "description": "Most points returned, 1 to 5,000.",
                  "disabled": true
                }
              ]
            },
            "description": "One series and its observations, oldest first.\n\nWorks without a key; with one, your plan applies.\n\n**Errors**\n- 401: A key was sent but is wrong or revoked. Leave the header out to call without one.\n- 404: No series with that slug.\n\nWithout a key, and on Free and Developer, a daily series goes back 92 days, a monthly one 2 years and an annual one all the way. Business, Enterprise and owners of the series' dataset get all of it.\nOnly Business and Enterprise get figures from within the day; other plans get the last figure of each day.\n\nDocs: https://apighana.com/docs/reference#live-series"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/live/{{series}}?range=30d",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "live",
                    "{{series}}"
                  ],
                  "query": [
                    {
                      "key": "range",
                      "value": "30d",
                      "description": "`30d`, `90d`, `1y`, `5y` or `all`."
                    },
                    {
                      "key": "limit",
                      "value": "5",
                      "description": "Most points returned, 1 to 5,000.",
                      "disabled": true
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Series retrieved\",\n  \"data\": {\n    \"id\": 12,\n    \"slug\": \"fx-usd-ghs\",\n    \"name\": \"US dollar to cedi\",\n    \"group\": \"fx\",\n    \"unit\": \"GHS per USD\",\n    \"frequency\": \"daily\",\n    \"source_name\": \"exchangerate-api.com\",\n    \"source_url\": \"https://www.exchangerate-api.com\",\n    \"licence\": \"Free for use with attribution\",\n    \"description\": \"How many Ghana cedis one US dollar buys, mid-market, updated daily.\",\n    \"dataset_name\": \"fx_rates\",\n    \"dimensions\": {\n      \"base\": \"USD\",\n      \"quote\": \"GHS\"\n    },\n    \"latest_value\": 11.5673,\n    \"latest_at\": \"2026-09-25T00:00:01+00:00\",\n    \"previous_value\": 11.574,\n    \"previous_at\": \"2026-09-24T00:00:02+00:00\",\n    \"change_pct\": -0.0579,\n    \"first_at\": \"2026-09-18T00:00:01+00:00\",\n    \"observation_count\": 9,\n    \"stale\": false,\n    \"points\": [\n      {\n        \"t\": \"2026-09-23T00:00:01+00:00\",\n        \"v\": 11.5805\n      },\n      {\n        \"t\": \"2026-09-24T00:00:02+00:00\",\n        \"v\": 11.574\n      },\n      {\n        \"t\": \"2026-09-25T00:00:01+00:00\",\n        \"v\": 11.5673\n      }\n    ]\n  },\n  \"meta\": {\n    \"range\": \"30d\",\n    \"truncated\": false,\n    \"free_window_days\": 92,\n    \"history_days\": 92,\n    \"plan\": null,\n    \"intraday\": false,\n    \"dataset\": {\n      \"name\": \"fx_rates\",\n      \"price\": 9,\n      \"endpoint\": \"/api/data/fx_rates\"\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "Market board",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/market/{{market_group}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "market",
                "{{market_group}}"
              ]
            },
            "description": "The latest value of every series in one group.\n\nWorks without a key; with one, your plan applies.\n\n**Errors**\n- 401: A key was sent but is wrong or revoked.\n- 404: Unknown market group.\n\nOn `banks`, Free keys and callers without a key see five banks; `meta.bank_by_bank` says when the list is cut.\n\nDocs: https://apighana.com/docs/reference#market-board"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/market/{{market_group}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "market",
                    "{{market_group}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Latest rates\",\n  \"data\": [\n    {\n      \"id\": 13,\n      \"slug\": \"fx-gbp-ghs\",\n      \"name\": \"British pound to cedi\",\n      \"group\": \"fx\",\n      \"unit\": \"GHS per GBP\",\n      \"frequency\": \"daily\",\n      \"source_name\": \"exchangerate-api.com\",\n      \"source_url\": \"https://www.exchangerate-api.com\",\n      \"licence\": \"Free for use with attribution\",\n      \"dimensions\": {\n        \"base\": \"GBP\",\n        \"quote\": \"GHS\"\n      },\n      \"latest_value\": 15.29257007,\n      \"latest_at\": \"2026-09-25T00:00:01+00:00\",\n      \"previous_value\": 15.33996024,\n      \"previous_at\": \"2026-09-24T00:00:02+00:00\",\n      \"change_pct\": -0.3089,\n      \"first_at\": \"2026-09-18T00:00:01+00:00\",\n      \"observation_count\": 9,\n      \"stale\": false\n    }\n  ],\n  \"meta\": {\n    \"group\": \"fx\",\n    \"plan\": \"free\",\n    \"history_days\": 7,\n    \"as_of\": \"2026-09-25T00:00:01+00:00\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Market history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/market/{{market_group}}/history?series={{series}}&limit=3",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "market",
                "{{market_group}}",
                "history"
              ],
              "query": [
                {
                  "key": "series",
                  "value": "{{series}}",
                  "description": "One series slug. Leave out for the whole group."
                },
                {
                  "key": "currency",
                  "value": "USD",
                  "description": "Only series whose base currency is this, e.g. `USD`.",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "2026-09-01",
                  "description": "Start date, `YYYY-MM-DD`. Clipped to your plan's history.",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "2026-09-25",
                  "description": "End date, `YYYY-MM-DD`.",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "3",
                  "description": "Observations per page, 1 to 5,000."
                },
                {
                  "key": "order",
                  "value": "desc",
                  "description": "`asc` or `desc`.",
                  "disabled": true
                },
                {
                  "key": "after",
                  "value": "",
                  "description": "`meta.next_cursor` from the previous page.",
                  "disabled": true
                }
              ]
            },
            "description": "Observations for a group, or one series in it, between two dates. Paged with a cursor.\n\nWorks without a key; with one, your plan applies.\n\n**Errors**\n- 400: A bad date, cursor or limit.\n- 401: A key was sent but is wrong or revoked.\n- 404: Unknown market group.\n\nHistory here follows the plan: 7 days without a key and on Free, 90 on Developer, everything on Business and Enterprise. `meta.clipped` is true when `from` was moved forward.\nKeep asking with `after = meta.next_cursor` until it is null.\n\nDocs: https://apighana.com/docs/reference#market-history"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/market/{{market_group}}/history?series={{series}}&limit=3",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "market",
                    "{{market_group}}",
                    "history"
                  ],
                  "query": [
                    {
                      "key": "series",
                      "value": "{{series}}",
                      "description": "One series slug. Leave out for the whole group."
                    },
                    {
                      "key": "currency",
                      "value": "USD",
                      "description": "Only series whose base currency is this, e.g. `USD`.",
                      "disabled": true
                    },
                    {
                      "key": "from",
                      "value": "2026-09-01",
                      "description": "Start date, `YYYY-MM-DD`. Clipped to your plan's history.",
                      "disabled": true
                    },
                    {
                      "key": "to",
                      "value": "2026-09-25",
                      "description": "End date, `YYYY-MM-DD`.",
                      "disabled": true
                    },
                    {
                      "key": "limit",
                      "value": "3",
                      "description": "Observations per page, 1 to 5,000."
                    },
                    {
                      "key": "order",
                      "value": "desc",
                      "description": "`asc` or `desc`.",
                      "disabled": true
                    },
                    {
                      "key": "after",
                      "value": "",
                      "description": "`meta.next_cursor` from the previous page.",
                      "disabled": true
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"rates history\",\n  \"data\": [\n    {\n      \"series\": \"fx-usd-ghs\",\n      \"observed_at\": \"2026-09-19T00:00:01+00:00\",\n      \"value\": 11.426\n    },\n    {\n      \"series\": \"fx-usd-ghs\",\n      \"observed_at\": \"2026-09-20T00:00:01+00:00\",\n      \"value\": 11.4837\n    },\n    {\n      \"series\": \"fx-usd-ghs\",\n      \"observed_at\": \"2026-09-21T00:00:01+00:00\",\n      \"value\": 11.5608\n    }\n  ],\n  \"meta\": {\n    \"series\": [\n      {\n        \"slug\": \"fx-usd-ghs\",\n        \"name\": \"US dollar to cedi\",\n        \"unit\": \"GHS per USD\",\n        \"frequency\": \"daily\",\n        \"dimensions\": {\n          \"base\": \"USD\",\n          \"quote\": \"GHS\"\n        }\n      }\n    ],\n    \"plan\": \"free\",\n    \"history_days\": 7,\n    \"from\": \"2026-09-18T08:50:41.415Z\",\n    \"to\": null,\n    \"clipped\": true,\n    \"upgrade\": \"Your plan reads 7 days of history. Developer reads 90 days, Business everything.\",\n    \"next_cursor\": \"MjAyNi0wOS0yMVQwMDowMDowMSswMDowMHwxMg\",\n    \"count\": 3,\n    \"intraday\": false\n  }\n}"
            }
          ]
        },
        {
          "name": "Daily snapshot",
          "request": {
            "method": "GET",
            "header": [],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{base_url}}/api/market/snapshot",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "market",
                "snapshot"
              ]
            },
            "description": "Every series' value as recorded in today's snapshot, taken once a day. `data` is null before the first snapshot.\n\nPublic: no key needed.\n\nDocs: https://apighana.com/docs/reference#market-snapshot"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/market/snapshot",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "market",
                    "snapshot"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Daily snapshot\",\n  \"data\": {\n    \"snapshot_date\": \"2026-09-25\",\n    \"rows\": [\n      {\n        \"slug\": \"fx-usd-ghs\",\n        \"group\": \"fx\",\n        \"value\": 11.5673,\n        \"observed_at\": \"2026-09-25T00:00:01+00:00\",\n        \"is_carried_forward\": false,\n        \"source\": \"exchangerate-api.com\",\n        \"raw\": {\n          \"unit\": \"GHS per USD\",\n          \"frequency\": \"daily\",\n          \"change_pct\": -0.0579,\n          \"previous_at\": \"2026-09-24T00:00:02+00:00\",\n          \"previous_value\": 11.574\n        }\n      }\n    ]\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "News",
      "description": "Ghanaian news, sorted into sections, with outlet and link. With an API key this is the News API, which comes with the Developer plan and up: a Free key gets 403 `PLAN_REQUIRED`. The same endpoints answer without a key, as they do for the website.",
      "item": [
        {
          "name": "List stories",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/news?page=1&limit=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "news"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number, from 1."
                },
                {
                  "key": "limit",
                  "value": "1",
                  "description": "Stories per page, up to 100."
                },
                {
                  "key": "category",
                  "value": "business",
                  "description": "`politics`, `business`, `technology`, `health`, `education`, `energy`, `agriculture`, `environment`, `sports`, `entertainment`, `society`, `world` or `general`.",
                  "disabled": true
                },
                {
                  "key": "q",
                  "value": "cedi",
                  "description": "Words in the headline or summary, up to 100 characters.",
                  "disabled": true
                },
                {
                  "key": "source",
                  "value": "myjoyonline",
                  "description": "A source slug from GET /api/news/sources.",
                  "disabled": true
                },
                {
                  "key": "tag",
                  "value": "gold",
                  "description": "A tag.",
                  "disabled": true
                },
                {
                  "key": "outlet",
                  "value": "asaaseradio.com",
                  "description": "The outlet's domain.",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "2026-09-01",
                  "description": "Published on or after, `YYYY-MM-DD`.",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "2026-09-25",
                  "description": "Published on or before, `YYYY-MM-DD`.",
                  "disabled": true
                },
                {
                  "key": "sentiment",
                  "value": "positive",
                  "description": "`positive`, `neutral` or `negative`.",
                  "disabled": true
                },
                {
                  "key": "entity",
                  "value": "Bank of Ghana",
                  "description": "A person, company or place named in the story.",
                  "disabled": true
                }
              ]
            },
            "description": "Stories, newest first.\n\nWorks without a key; with one, your plan applies.\nNeeds the Developer plan or higher when called with a key.\n\n**Errors**\n- 401: A key was sent but is wrong or revoked.\n- 403 `PLAN_REQUIRED`: Needs the Developer plan or higher.\n\nDocs: https://apighana.com/docs/reference#list-news"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/news?page=1&limit=1",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "news"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Page number, from 1."
                    },
                    {
                      "key": "limit",
                      "value": "1",
                      "description": "Stories per page, up to 100."
                    },
                    {
                      "key": "category",
                      "value": "business",
                      "description": "`politics`, `business`, `technology`, `health`, `education`, `energy`, `agriculture`, `environment`, `sports`, `entertainment`, `society`, `world` or `general`.",
                      "disabled": true
                    },
                    {
                      "key": "q",
                      "value": "cedi",
                      "description": "Words in the headline or summary, up to 100 characters.",
                      "disabled": true
                    },
                    {
                      "key": "source",
                      "value": "myjoyonline",
                      "description": "A source slug from GET /api/news/sources.",
                      "disabled": true
                    },
                    {
                      "key": "tag",
                      "value": "gold",
                      "description": "A tag.",
                      "disabled": true
                    },
                    {
                      "key": "outlet",
                      "value": "asaaseradio.com",
                      "description": "The outlet's domain.",
                      "disabled": true
                    },
                    {
                      "key": "from",
                      "value": "2026-09-01",
                      "description": "Published on or after, `YYYY-MM-DD`.",
                      "disabled": true
                    },
                    {
                      "key": "to",
                      "value": "2026-09-25",
                      "description": "Published on or before, `YYYY-MM-DD`.",
                      "disabled": true
                    },
                    {
                      "key": "sentiment",
                      "value": "positive",
                      "description": "`positive`, `neutral` or `negative`.",
                      "disabled": true
                    },
                    {
                      "key": "entity",
                      "value": "Bank of Ghana",
                      "description": "A person, company or place named in the story.",
                      "disabled": true
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"News retrieved\",\n  \"data\": [\n    {\n      \"id\": 3879,\n      \"slug\": \"gold-shipments-resume-boosting-ghanas-forex-reserves-bog-governor-31239d\",\n      \"url\": \"https://asaaseradio.com/gold-shipments-resume-boosting-ghanas-forex-reserves-bog-governor\",\n      \"headline\": \"Gold shipments resume, boosting Ghana's forex reserves, says BoG governor\",\n      \"summary\": \"Fresh gold shipments from Ghana are accelerating foreign exchange reserve accumulation, with the Bank of Ghana confirming a significant export spike, though volatile international gold prices remain a challenge.\",\n      \"image_url\": null,\n      \"source_name\": \"Asaase Radio\",\n      \"source_domain\": \"asaaseradio.com\",\n      \"author\": \"Winifred Lartey\",\n      \"category\": \"business\",\n      \"tags\": [\n        \"gold\",\n        \"bank of ghana\",\n        \"forex reserves\",\n        \"exports\"\n      ],\n      \"region\": \"national\",\n      \"published_at\": \"2026-09-25T08:03:47+00:00\",\n      \"clicks\": 0,\n      \"sentiment\": null,\n      \"entities\": []\n    }\n  ],\n  \"meta\": {\n    \"total\": 923,\n    \"page\": 1,\n    \"limit\": 1,\n    \"total_pages\": 923\n  }\n}"
            }
          ]
        },
        {
          "name": "Sections",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/news/categories",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "news",
                "categories"
              ]
            },
            "description": "Each section with how many stories it has.\n\nWorks without a key; with one, your plan applies.\nNeeds the Developer plan or higher when called with a key.\n\n**Errors**\n- 403 `PLAN_REQUIRED`: Needs the Developer plan or higher.\n\nDocs: https://apighana.com/docs/reference#news-categories"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/news/categories",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "news",
                    "categories"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Categories retrieved\",\n  \"data\": [\n    {\n      \"category\": \"politics\",\n      \"count\": 296\n    },\n    {\n      \"category\": \"business\",\n      \"count\": 251\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Sources",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/news/sources",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "news",
                "sources"
              ]
            },
            "description": "The outlets and feeds stories come from.\n\nWorks without a key; with one, your plan applies.\nNeeds the Developer plan or higher when called with a key.\n\n**Errors**\n- 403 `PLAN_REQUIRED`: Needs the Developer plan or higher.\n\nDocs: https://apighana.com/docs/reference#news-sources"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/news/sources",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "news",
                    "sources"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Sources retrieved\",\n  \"data\": [\n    {\n      \"id\": 1,\n      \"name\": \"MyJoyOnline\",\n      \"slug\": \"myjoyonline\",\n      \"homepage\": \"https://www.myjoyonline.com\",\n      \"kind\": \"rss\",\n      \"item_count\": 1172\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Trending",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/news/trending?limit=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "news",
                "trending"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "1",
                  "description": "Up to 20."
                }
              ]
            },
            "description": "The most-read recent stories.\n\nWorks without a key; with one, your plan applies.\nNeeds the Developer plan or higher when called with a key.\n\n**Errors**\n- 403 `PLAN_REQUIRED`: Needs the Developer plan or higher.\n\nDocs: https://apighana.com/docs/reference#news-trending"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/news/trending?limit=1",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "news",
                    "trending"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "1",
                      "description": "Up to 20."
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Trending retrieved\",\n  \"data\": [\n    {\n      \"id\": 3879,\n      \"slug\": \"gold-shipments-resume-boosting-ghanas-forex-reserves-bog-governor-31239d\",\n      \"url\": \"https://asaaseradio.com/gold-shipments-resume-boosting-ghanas-forex-reserves-bog-governor\",\n      \"headline\": \"Gold shipments resume, boosting Ghana's forex reserves, says BoG governor\",\n      \"summary\": \"Fresh gold shipments from Ghana are accelerating foreign exchange reserve accumulation, with the Bank of Ghana confirming a significant export spike, though volatile international gold prices remain a challenge.\",\n      \"image_url\": null,\n      \"source_name\": \"Asaase Radio\",\n      \"source_domain\": \"asaaseradio.com\",\n      \"author\": \"Winifred Lartey\",\n      \"category\": \"business\",\n      \"tags\": [\n        \"gold\",\n        \"bank of ghana\",\n        \"forex reserves\",\n        \"exports\"\n      ],\n      \"region\": \"national\",\n      \"published_at\": \"2026-09-25T08:03:47+00:00\",\n      \"clicks\": 0,\n      \"sentiment\": null,\n      \"entities\": []\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "One story",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/news/story/{{news_slug}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "news",
                "story",
                "{{news_slug}}"
              ]
            },
            "description": "One story and related ones.\n\nWorks without a key; with one, your plan applies.\nNeeds the Developer plan or higher when called with a key.\n\n**Errors**\n- 403 `PLAN_REQUIRED`: Needs the Developer plan or higher.\n- 404: No story with that slug.\n\nDocs: https://apighana.com/docs/reference#news-story"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/news/story/{{news_slug}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "news",
                    "story",
                    "{{news_slug}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Story retrieved\",\n  \"data\": {\n    \"id\": 3879,\n    \"slug\": \"gold-shipments-resume-boosting-ghanas-forex-reserves-bog-governor-31239d\",\n    \"url\": \"https://asaaseradio.com/gold-shipments-resume-boosting-ghanas-forex-reserves-bog-governor\",\n    \"headline\": \"Gold shipments resume, boosting Ghana's forex reserves, says BoG governor\",\n    \"summary\": \"Fresh gold shipments from Ghana are accelerating foreign exchange reserve accumulation, with the Bank of Ghana confirming a significant export spike, though volatile international gold prices remain a challenge.\",\n    \"image_url\": null,\n    \"source_name\": \"Asaase Radio\",\n    \"source_domain\": \"asaaseradio.com\",\n    \"author\": \"Winifred Lartey\",\n    \"category\": \"business\",\n    \"tags\": [\n      \"gold\",\n      \"bank of ghana\",\n      \"forex reserves\",\n      \"exports\"\n    ],\n    \"region\": \"national\",\n    \"published_at\": \"2026-09-25T08:03:47+00:00\",\n    \"clicks\": 0,\n    \"sentiment\": null,\n    \"entities\": [],\n    \"related\": []\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Exports",
      "description": "Whole datasets and long market histories as files. Exports come with the Business plan and up; other plans get 403 `PLAN_REQUIRED`.",
      "item": [
        {
          "name": "Download a dataset",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/data/{{dataset}}/export?format=csv",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "data",
                "{{dataset}}",
                "export"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "csv",
                  "description": "`csv` or `xlsx`."
                },
                {
                  "key": "version",
                  "value": "2026-09-18",
                  "description": "A version from GET /api/datasets/{table}/versions, `YYYY-MM-DD`. Leave out for the current rows.",
                  "disabled": true
                }
              ]
            },
            "description": "The dataset as a CSV or Excel file, streamed. Up to 250,000 rows.\n\nNeeds an API key (sent from `{{api_key}}`).\nNeeds the Business plan or higher when called with a key.\n\n**Errors**\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 403 `PLAN_REQUIRED`: Needs the Business plan or higher.\n- 403 `ACCESS_REQUIRED`: The dataset is not on your key. `data.options` says how to get it: a yearly licence, a free pick, a pack or a plan.\n- 404: No dataset, or no such version.\n- 429: Over your plan's requests per minute. Wait for `Retry-After` seconds.\n\nDocs: https://apighana.com/docs/reference#export-dataset"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/data/{{dataset}}/export?format=csv",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "data",
                    "{{dataset}}",
                    "export"
                  ],
                  "query": [
                    {
                      "key": "format",
                      "value": "csv",
                      "description": "`csv` or `xlsx`."
                    },
                    {
                      "key": "version",
                      "value": "2026-09-18",
                      "description": "A version from GET /api/datasets/{table}/versions, `YYYY-MM-DD`. Leave out for the current rows.",
                      "disabled": true
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "text",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "text/csv"
                }
              ],
              "body": "id,name,region,boundary_id,area_sqkm,...\n1,Adenta Municipal,Greater Accra Region,2480657B26321648161032,78.47,..."
            }
          ]
        },
        {
          "name": "Download a query",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"format\": \"csv\",\n  \"where\": [\n    {\n      \"column\": \"region\",\n      \"operator\": \"=\",\n      \"value\": \"Upper West Region\"\n    }\n  ],\n  \"order\": {\n    \"column\": \"name\",\n    \"direction\": \"asc\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/query/{{dataset}}/export",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "query",
                "{{dataset}}",
                "export"
              ]
            },
            "description": "The rows matching a query, as a CSV or Excel file. Excel files carry an \"About this data\" sheet.\n\nNeeds an API key (sent from `{{api_key}}`).\nNeeds the Business plan or higher when called with a key.\n\n**Body**\n- `format` (string, default csv): `csv` or `xlsx`.\n- `where` (object[], default []): As in POST /api/query/{table}. `IN` also takes a comma-separated string here.\n- `order` (object): `{ column, direction }`.\n\n**Errors**\n- 400: A bad body or an unknown column.\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 403 `PLAN_REQUIRED`: Needs the Business plan or higher.\n- 403 `ACCESS_REQUIRED`: The dataset is not on your key. `data.options` says how to get it: a yearly licence, a free pick, a pack or a plan.\n- 404: No dataset by that name.\n- 429: Over your plan's requests per minute. Wait for `Retry-After` seconds.\n\nThe answer carries `X-Data-Source`, `X-Data-Last-Updated` and `X-Data-Covers` headers.\n\nDocs: https://apighana.com/docs/reference#export-query"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"format\": \"csv\",\n  \"where\": [\n    {\n      \"column\": \"region\",\n      \"operator\": \"=\",\n      \"value\": \"Upper West Region\"\n    }\n  ],\n  \"order\": {\n    \"column\": \"name\",\n    \"direction\": \"asc\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/api/query/{{dataset}}/export",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "query",
                    "{{dataset}}",
                    "export"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "text",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "text/csv"
                }
              ],
              "body": "name,region,area_sqkm,...\nWa East,Upper West Region,4325,..."
            }
          ]
        },
        {
          "name": "Queue a bulk export",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"kind\": \"market\",\n  \"format\": \"csv\",\n  \"groups\": [\n    \"fx\",\n    \"fuel\"\n  ],\n  \"from\": \"2026-01-01\",\n  \"to\": \"2026-09-24\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/market/exports",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "market",
                "exports"
              ]
            },
            "description": "Starts a CSV or Parquet export of market history or a whole dataset. We email a download link when it is ready; you can also poll the job.\n\nNeeds an API key (sent from `{{api_key}}`).\nNeeds the Business plan or higher when called with a key.\n\n**Body**\n- `kind` (string, default market): `market` or `dataset`.\n- `format` (string, default csv): `csv` or `parquet`.\n- `groups` (string[]): For `market`: any of `fx`, `fuel`, `banks`, `commodities`, `food`, `macro`. Leave out for all.\n- `from` (string): For `market`: start date, `YYYY-MM-DD`.\n- `to` (string): For `market`: end date, `YYYY-MM-DD`.\n- `table` (string): For `dataset`: the dataset name.\n\n**Errors**\n- 400: A bad body (`BAD_PARAMS`).\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 403 `PLAN_REQUIRED`: Needs the Business plan or higher.\n- 429 `TOO_MANY`: Three exports are already running.\n\nDocs: https://apighana.com/docs/reference#queue-export"
          },
          "response": [
            {
              "name": "201 Created",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"kind\": \"market\",\n  \"format\": \"csv\",\n  \"groups\": [\n    \"fx\",\n    \"fuel\"\n  ],\n  \"from\": \"2026-01-01\",\n  \"to\": \"2026-09-24\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/api/market/exports",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "market",
                    "exports"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Export queued. You will get an email with the link.\",\n  \"data\": {\n    \"id\": 41,\n    \"kind\": \"market\",\n    \"params\": {\n      \"groups\": [\n        \"fx\",\n        \"fuel\"\n      ],\n      \"from\": \"2026-01-01\",\n      \"to\": \"2026-09-24\"\n    },\n    \"format\": \"csv\",\n    \"status\": \"queued\",\n    \"rows\": null,\n    \"bytes\": null,\n    \"download_url\": null,\n    \"expires_at\": null,\n    \"error\": null,\n    \"created_at\": \"2026-09-25T09:00:00.000Z\",\n    \"finished_at\": null\n  }\n}"
            }
          ]
        },
        {
          "name": "List exports",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/market/exports",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "market",
                "exports"
              ]
            },
            "description": "Your export jobs, with their status and, once finished, a download link and when it expires.\n\nNeeds an API key (sent from `{{api_key}}`).\nNeeds the Business plan or higher when called with a key.\n\n**Errors**\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n\nDocs: https://apighana.com/docs/reference#list-exports"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/market/exports",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "market",
                    "exports"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Your exports\",\n  \"data\": [\n    {\n      \"id\": 41,\n      \"kind\": \"market\",\n      \"params\": {\n        \"groups\": [\n          \"fx\",\n          \"fuel\"\n        ],\n        \"from\": \"2026-01-01\",\n        \"to\": \"2026-09-24\"\n      },\n      \"format\": \"csv\",\n      \"status\": \"done\",\n      \"rows\": 5420,\n      \"bytes\": 318204,\n      \"download_url\": \"https://…/exports/41.csv?token=…\",\n      \"expires_at\": \"2026-10-02T09:01:12.000Z\",\n      \"error\": null,\n      \"created_at\": \"2026-09-25T09:00:00.000Z\",\n      \"finished_at\": \"2026-09-25T09:01:12.000Z\"\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Get an export",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/market/exports/{{export_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "market",
                "exports",
                "{{export_id}}"
              ]
            },
            "description": "One export job. Poll until `status` is `done`, then fetch `download_url`.\n\nNeeds an API key (sent from `{{api_key}}`).\nNeeds the Business plan or higher when called with a key.\n\n**Errors**\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 404: No export with that id on your account.\n\nDocs: https://apighana.com/docs/reference#get-export"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/market/exports/{{export_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "market",
                    "exports",
                    "{{export_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Export\",\n  \"data\": {\n    \"id\": 41,\n    \"kind\": \"market\",\n    \"params\": {\n      \"groups\": [\n        \"fx\",\n        \"fuel\"\n      ],\n      \"from\": \"2026-01-01\",\n      \"to\": \"2026-09-24\"\n    },\n    \"format\": \"csv\",\n    \"status\": \"queued\",\n    \"rows\": null,\n    \"bytes\": null,\n    \"download_url\": null,\n    \"expires_at\": null,\n    \"error\": null,\n    \"created_at\": \"2026-09-25T09:00:00.000Z\",\n    \"finished_at\": null\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Webhooks",
      "description": "We POST to your URL when a market group changes or news is published, instead of you polling. Webhooks come with the Business plan and up. Up to 10 endpoints per account.",
      "item": [
        {
          "name": "List endpoints",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/market/webhooks",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "market",
                "webhooks"
              ]
            },
            "description": "Your webhook endpoints, the events you can subscribe to, and the last 30 deliveries.\n\nNeeds an API key (sent from `{{api_key}}`).\nNeeds the Business plan or higher when called with a key.\n\n**Errors**\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n\nDocs: https://apighana.com/docs/reference#list-webhooks"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/market/webhooks",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "market",
                    "webhooks"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Webhook endpoints\",\n  \"data\": {\n    \"endpoints\": [\n      {\n        \"id\": 7,\n        \"url\": \"https://example.com/hooks/apighana\",\n        \"events\": [\n          \"rates.changed\",\n          \"fuel.changed\"\n        ],\n        \"description\": \"Pricing service\",\n        \"active\": true,\n        \"created_at\": \"2026-09-25T09:00:00.000Z\",\n        \"failures\": 0,\n        \"last_delivery_at\": \"2026-09-25T08:00:03.000Z\",\n        \"last_status\": 200,\n        \"disabled_at\": null\n      }\n    ],\n    \"events\": [\n      \"rates.changed\",\n      \"fuel.changed\",\n      \"commodities.changed\",\n      \"food.changed\",\n      \"macro.changed\",\n      \"news.published\"\n    ],\n    \"deliveries\": []\n  }\n}"
            }
          ]
        },
        {
          "name": "Add an endpoint",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com/hooks/apighana\",\n  \"events\": [\n    \"rates.changed\",\n    \"fuel.changed\"\n  ],\n  \"description\": \"Pricing service\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/market/webhooks",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "market",
                "webhooks"
              ]
            },
            "description": "Registers a URL for the events you choose. The answer includes the signing `secret`, shown only this once.\n\nNeeds an API key (sent from `{{api_key}}`).\nNeeds the Business plan or higher when called with a key.\n\n**Body**\n- `url` (string, required): A public `https` URL.\n- `events` (string[], default [\"rates.changed\", \"fuel.changed\"]): Any of `rates.changed`, `fuel.changed`, `commodities.changed`, `food.changed`, `macro.changed`, `news.published`.\n- `description` (string): Up to 120 characters.\n\n**Errors**\n- 400 `BAD_URL`: The URL is not a public https address.\n- 400 `BAD_EVENTS`: No known event was chosen.\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 403 `PLAN_REQUIRED`: Needs the Business plan or higher.\n- 429 `TOO_MANY`: You already have 10 endpoints.\n\nDocs: https://apighana.com/docs/reference#create-webhook"
          },
          "response": [
            {
              "name": "201 Created",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"url\": \"https://example.com/hooks/apighana\",\n  \"events\": [\n    \"rates.changed\",\n    \"fuel.changed\"\n  ],\n  \"description\": \"Pricing service\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/api/market/webhooks",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "market",
                    "webhooks"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Endpoint added. Keep the secret; it is shown once.\",\n  \"data\": {\n    \"id\": 7,\n    \"url\": \"https://example.com/hooks/apighana\",\n    \"events\": [\n      \"rates.changed\",\n      \"fuel.changed\"\n    ],\n    \"description\": \"Pricing service\",\n    \"active\": true,\n    \"created_at\": \"2026-09-25T09:00:00.000Z\",\n    \"secret\": \"whsec_3f9c…\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Change an endpoint",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"events\": [\n    \"rates.changed\",\n    \"fuel.changed\",\n    \"news.published\"\n  ],\n  \"active\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/market/webhooks/{{webhook_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "market",
                "webhooks",
                "{{webhook_id}}"
              ]
            },
            "description": "Changes the URL, events or description, or switches the endpoint off and on.\n\nNeeds an API key (sent from `{{api_key}}`).\nNeeds the Business plan or higher when called with a key.\n\n**Body**\n- `url` (string): A public `https` URL.\n- `events` (string[]): Replaces the list.\n- `description` (string): Up to 120 characters.\n- `active` (boolean): `false` stops deliveries; `true` resumes them.\n\n**Errors**\n- 400 `BAD_URL`: The URL is not a public https address.\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 404: No endpoint with that id on your account.\n\nDocs: https://apighana.com/docs/reference#update-webhook"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"events\": [\n    \"rates.changed\",\n    \"fuel.changed\",\n    \"news.published\"\n  ],\n  \"active\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/api/market/webhooks/{{webhook_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "market",
                    "webhooks",
                    "{{webhook_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Endpoint updated\",\n  \"data\": {\n    \"id\": 7,\n    \"url\": \"https://example.com/hooks/apighana\",\n    \"events\": [\n      \"rates.changed\",\n      \"fuel.changed\",\n      \"news.published\"\n    ],\n    \"description\": \"Pricing service\",\n    \"active\": true,\n    \"created_at\": \"2026-09-25T09:00:00.000Z\",\n    \"failures\": 0\n  }\n}"
            }
          ]
        },
        {
          "name": "Remove an endpoint",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/market/webhooks/{{webhook_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "market",
                "webhooks",
                "{{webhook_id}}"
              ]
            },
            "description": "Removes the endpoint; nothing more is sent to it.\n\nNeeds an API key (sent from `{{api_key}}`).\nNeeds the Business plan or higher when called with a key.\n\n**Errors**\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n\nDocs: https://apighana.com/docs/reference#delete-webhook"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/market/webhooks/{{webhook_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "market",
                    "webhooks",
                    "{{webhook_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Endpoint removed\",\n  \"data\": null\n}"
            }
          ]
        },
        {
          "name": "Send a test",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/market/webhooks/{{webhook_id}}/test",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "market",
                "webhooks",
                "{{webhook_id}}",
                "test"
              ]
            },
            "description": "Sends a `test` event to this endpoint now, so you can check your receiver and its signature check.\n\nNeeds an API key (sent from `{{api_key}}`).\nNeeds the Business plan or higher when called with a key.\n\n**Errors**\n- 401: No `X-API-Key` header, or the key is wrong or revoked.\n- 403: The key is inactive or the account is deactivated.\n- 404: No endpoint with that id on your account.\n\nDocs: https://apighana.com/docs/reference#test-webhook"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/market/webhooks/{{webhook_id}}/test",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "market",
                    "webhooks",
                    "{{webhook_id}}",
                    "test"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Test delivery attempted\",\n  \"data\": {\n    \"delivered\": 1,\n    \"failed\": 0,\n    \"dead\": 0\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Status and plans",
      "description": "Whether the API is up, and what each plan includes. All public.",
      "item": [
        {
          "name": "Status",
          "request": {
            "method": "GET",
            "header": [],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{base_url}}/api/status",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "status"
              ]
            },
            "description": "Whether the API, the database, the live feeds and the daily dataset checks are working. The same data as the status page.\n\nPublic: no key needed.\n\nDocs: https://apighana.com/docs/reference#status"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/status",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "status"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Status\",\n  \"data\": {\n    \"state\": \"operational\",\n    \"components\": [\n      {\n        \"name\": \"API\",\n        \"state\": \"operational\"\n      },\n      {\n        \"name\": \"Database\",\n        \"state\": \"operational\",\n        \"latency_ms\": 181\n      },\n      {\n        \"name\": \"Live data feeds\",\n        \"state\": \"operational\"\n      },\n      {\n        \"name\": \"Dataset checks\",\n        \"state\": \"operational\"\n      }\n    ],\n    \"feeds\": [\n      {\n        \"feed\": \"fx\",\n        \"label\": \"Exchange rates\",\n        \"state\": \"operational\",\n        \"last_success_at\": \"2026-09-25T07:38:14.599+00:00\"\n      }\n    ],\n    \"datasets\": {\n      \"checked\": 284,\n      \"ok\": 162,\n      \"warning\": 120,\n      \"error\": 2,\n      \"last_checked_at\": \"2026-09-25T02:17:54.612+00:00\",\n      \"state\": \"operational\"\n    },\n    \"checked_at\": \"2026-09-25T08:50:46.703Z\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Health",
          "request": {
            "method": "GET",
            "header": [],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{base_url}}/api/health",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "health"
              ]
            },
            "description": "Answers 200 while the API process is running. For uptime monitors.\n\nPublic: no key needed.\n\nDocs: https://apighana.com/docs/reference#health"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/health",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "health"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"API Ghana is running\",\n  \"data\": {\n    \"uptime\": 1182.66\n  }\n}"
            }
          ]
        },
        {
          "name": "Ready",
          "request": {
            "method": "GET",
            "header": [],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{base_url}}/api/health/ready",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "health",
                "ready"
              ]
            },
            "description": "Like health, but also checks the database: 503 when it cannot be reached.\n\nPublic: no key needed.\n\n**Errors**\n- 503: The database cannot be reached.\n\nDocs: https://apighana.com/docs/reference#ready"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/health/ready",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "health",
                    "ready"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"API Ghana is ready\",\n  \"data\": {\n    \"database\": \"ok\",\n    \"database_ms\": 172\n  }\n}"
            }
          ]
        },
        {
          "name": "Plans",
          "request": {
            "method": "GET",
            "header": [],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{base_url}}/api/plans",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "plans"
              ],
              "query": [
                {
                  "key": "currency",
                  "value": "USD",
                  "description": "`GHS` or `USD`. Chosen from your country when left out.",
                  "disabled": true
                }
              ]
            },
            "description": "Every plan with its price and limits: requests per minute, rows per page, history, exports, webhooks, News API.\n\nPublic: no key needed.\n\nDocs: https://apighana.com/docs/reference#plans"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/plans",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "plans"
                  ],
                  "query": [
                    {
                      "key": "currency",
                      "value": "USD",
                      "description": "`GHS` or `USD`. Chosen from your country when left out.",
                      "disabled": true
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json; charset=utf-8"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Plans\",\n  \"data\": {\n    \"currency\": \"USD\",\n    \"tiers_enabled\": true,\n    \"vat_rate\": 0.15,\n    \"plans\": [\n      {\n        \"code\": \"developer\",\n        \"name\": \"Developer\",\n        \"currency\": \"USD\",\n        \"monthly\": 19,\n        \"annual\": 190,\n        \"rate_per_minute\": 600,\n        \"rows_per_page\": 500,\n        \"history_days\": 90,\n        \"catalogue\": \"all\",\n        \"free_dataset_limit\": 0,\n        \"exports\": \"none\",\n        \"webhooks\": false,\n        \"news_api\": true,\n        \"intraday\": false,\n        \"bank_rows\": null,\n        \"support\": \"Email, 3 business days\",\n        \"uptime_target\": null,\n        \"self_serve\": true\n      }\n    ]\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "MCP",
      "description": "API Ghana is also an MCP server, so AI assistants (Claude, ChatGPT, Cursor and others) can search the catalogue, read rows and query datasets themselves. It speaks JSON-RPC over Streamable HTTP; most people point an MCP client at it rather than calling it by hand.",
      "item": [
        {
          "name": "List tools",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json, text/event-stream"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/list\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/mcp",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "mcp"
              ]
            },
            "description": "The tools the server offers. Stateless: no session to open first.\n\nWorks without a key; with one, your plan applies.\n\nSend the key as `X-API-Key`, or as `Authorization: Bearer <key>` for clients that only send that. Without a key, tools that read rows say how to get one.\n\nDocs: https://apighana.com/docs/reference#mcp-tools"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json, text/event-stream"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/list\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/mcp",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "mcp"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "text",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "text/event-stream"
                }
              ],
              "body": "event: message\ndata: {\"result\":{\"tools\":[{\"name\":\"search_datasets\",\"title\":\"Search Ghana datasets\",…},{\"name\":\"describe_dataset\",…},{\"name\":\"get_rows\",…},{\"name\":\"query_dataset\",…},{\"name\":\"get_market\",…},{\"name\":\"get_series\",…},{\"name\":\"search_news\",…}]},\"jsonrpc\":\"2.0\",\"id\":1}"
            }
          ]
        },
        {
          "name": "Call a tool",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json, text/event-stream"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 2,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"get_rows\",\n    \"arguments\": {\n      \"dataset\": \"districts\",\n      \"limit\": 2\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/mcp",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "mcp"
              ]
            },
            "description": "Runs one tool with your key; your plan's access and limits apply.\n\nWorks without a key; with one, your plan applies.\n\nDocs: https://apighana.com/docs/reference#mcp-call"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json, text/event-stream"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 2,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"get_rows\",\n    \"arguments\": {\n      \"dataset\": \"districts\",\n      \"limit\": 2\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/mcp",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "mcp"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "text",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "text/event-stream"
                }
              ],
              "body": "event: message\ndata: {\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"{\\\"data\\\":[{\\\"id\\\":1,\\\"name\\\":\\\"Adenta Municipal\\\",…}],\\\"meta\\\":{…}}\"}]},\"jsonrpc\":\"2.0\",\"id\":2}"
            }
          ]
        }
      ]
    }
  ]
}
